diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
 # Change Log
 
+## 0.3.0
+
+* **Backwards-incompatible**: We now use the official AWS JSON spec document to
+  auto-generate types. This means there is no more Python scraper and custom
+  JSON schemas. The behavior of the library is exactly the same, but a ton of
+  resource names changed to match official the official AWS names. On the plus
+  side, we now have 100% service coverage!
+
 ## 0.2.2
 
 * Fixed a test suite failure caused by bleeding edge HLint version.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -117,21 +117,18 @@
 
 ## Auto-generation
 
-All of the resources and resource properties are auto-generated from JSON files
-and are placed in `library-gen/`. The `gen/` directory contains the
-auto-generator code and the JSON model files. We include the `library-gen/`
-directory in git so the build process is simplified. To build `library-gen`
-from scratch and then build all of `stratosphere`, just run the very short
-`build.sh` script. You can pass stack args to the script too, so run
-`./build.sh --fast` to build the library without optimization. This is useful
-for development.
+All of the resources and resource properties are auto-generated from
+a
+[JSON schema file](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-resource-specification.html) and
+are placed in `library-gen/`. The `gen/` directory contains the auto-generator
+code and the JSON model file. We include the `library-gen/` directory in git so
+the build process is simplified. To build `library-gen` from scratch and then
+build all of `stratosphere`, just run the very short `build.sh` script. You can
+pass stack args to the script too, so run `./build.sh --fast` to build the
+library without optimization. This is useful for development.
 
 In the future, it would be great to not have to include the auto-generated code
 in git.
-
-Also, there is a file called `scraper.py` that scrapes a given CloudFormation
-resource documentation page to produce the JSON model. It isn't perfect, but it
-helps a lot.
 
 ## Contributing
 
diff --git a/examples/apigw-lambda-dynamodb.hs b/examples/apigw-lambda-dynamodb.hs
--- a/examples/apigw-lambda-dynamodb.hs
+++ b/examples/apigw-lambda-dynamodb.hs
@@ -36,89 +36,98 @@
   & formatVersion ?~ "2010-09-09"
 
 apiGWRestApi :: Resource
-apiGWRestApi = (resource "ApiGWRestApi" $
+apiGWRestApi =
+  resource "ApiGWRestApi" $
   ApiGatewayRestApiProperties $
   apiGatewayRestApi
-    "myApi"
-  )
+  & agraName ?~ "myApi"
 
 apiGWResource :: Resource
-apiGWResource = (resource "ApiGWResource" $
+apiGWResource =
+  resource "ApiGWResource" $
   ApiGatewayResourceProperties $
   apiGatewayResource
     (GetAtt "ApiGWRestApi" "RootResourceId")
     "thing"
     (toRef apiGWRestApi)
-  )
 
+
 getMethod :: Resource
-getMethod = (resource "ApiGWGetMethod" $
+getMethod = (
+  resource "ApiGWGetMethod" $
   ApiGatewayMethodProperties $
   apiGatewayMethod
-    NONE
-    GET
-    (toRef apiGWResource)
-    (toRef apiGWRestApi)
+    (Literal GET)
+    & agmeAuthorizationType ?~ Literal NONE
+    & agmeResourceId ?~ toRef apiGWResource
+    & agmeAuthorizerId ?~ toRef apiGWRestApi
     & agmeIntegration ?~ integration
     & agmeMethodResponses ?~ [ methodResponse ]
   )
-  & dependsOn ?~ deps [
-      readLambdaPermission
-    ]
+  & dependsOn ?~ deps [readLambdaPermission]
 
   where
-    integration = apiGatewayIntegration AWS
-      & agiIntegrationHttpMethod ?~ POST
-      & agiUri ?~ (Join "" [
+    integration =
+      apiGatewayMethodIntegration
+      & agmiType ?~ Literal AWS
+      & agmiIntegrationHttpMethod ?~ Literal POST
+      & agmiUri ?~ Join "" [
           "arn:aws:apigateway:"
         , Ref "AWS::Region"
         , ":lambda:path/2015-03-31/functions/"
         , GetAtt "ReadTableLambda" "Arn"
-        , "/invocations"])
-      & agiIntegrationResponses ?~ [ integrationResponse ]
-      & agiPassthroughBehavior ?~ WHEN_NO_TEMPLATES
-      & agiRequestTemplates ?~ [ ]
+        , "/invocations"]
+      & agmiIntegrationResponses ?~ [ integrationResponse ]
+      & agmiPassthroughBehavior ?~ Literal WHEN_NO_TEMPLATES
+      & agmiRequestTemplates ?~ [ ]
 
-    integrationResponse = apiGatewayIntegrationResponse
-      & agirResponseTemplates ?~ [ ("application/json", "$input.json('$.body')") ]
-      & agirStatusCode ?~ "200"
+    integrationResponse =
+      apiGatewayMethodIntegrationResponse
+      & agmirResponseTemplates ?~ [ ("application/json", "$input.json('$.body')") ]
+      & agmirStatusCode ?~ "200"
 
-    methodResponse = apiGatewayMethodResponse "200"
+    methodResponse =
+      apiGatewayMethodMethodResponse
+      & agmmrStatusCode ?~ "200"
 
 
 postMethod :: Resource
-postMethod = (resource "ApiGWPutMethod" $
+postMethod = (
+  resource "ApiGWPutMethod" $
   ApiGatewayMethodProperties $
   apiGatewayMethod
-    NONE
-    POST
-    (toRef apiGWResource)
-    (toRef apiGWRestApi)
+    (Literal POST)
+    & agmeAuthorizationType ?~ Literal NONE
+    & agmeResourceId ?~ toRef apiGWResource
+    & agmeAuthorizerId ?~ toRef apiGWRestApi
     & agmeIntegration ?~ integration
     & agmeMethodResponses ?~ [ methodResponse ]
   )
-  & dependsOn ?~ deps [
-      writeLambdaPermission
-    ]
+  & dependsOn ?~ deps [writeLambdaPermission]
 
   where
-    integration = apiGatewayIntegration AWS
-      & agiIntegrationHttpMethod ?~ POST
-      & agiUri ?~ (Join "" [
+    integration =
+      apiGatewayMethodIntegration
+      & agmiType ?~ Literal AWS
+      & agmiIntegrationHttpMethod ?~ Literal POST
+      & agmiUri ?~ Join "" [
           "arn:aws:apigateway:"
         , Ref "AWS::Region"
         , ":lambda:path/2015-03-31/functions/"
         , GetAtt "WriteTableLambda" "Arn"
-        , "/invocations"])
-      & agiIntegrationResponses ?~ [ integrationResponse ]
-      & agiPassthroughBehavior ?~ WHEN_NO_TEMPLATES
-      & agiRequestTemplates ?~ [ ("application/json", "{\"body\": $input.body}") ]
+        , "/invocations"]
+      & agmiIntegrationResponses ?~ [integrationResponse]
+      & agmiPassthroughBehavior ?~ Literal WHEN_NO_TEMPLATES
+      & agmiRequestTemplates ?~ [ ("application/json", "{\"body\": $input.body}") ]
 
-    integrationResponse = apiGatewayIntegrationResponse
-      & agirResponseTemplates ?~ [ ("application/json", "$input.json('$.body')") ]
-      & agirStatusCode ?~ "200"
+    integrationResponse =
+      apiGatewayMethodIntegrationResponse
+      & agmirResponseTemplates ?~ [ ("application/json", "$input.json('$.body')") ]
+      & agmirStatusCode ?~ "200"
 
-    methodResponse = apiGatewayMethodResponse "200"
+    methodResponse =
+      apiGatewayMethodMethodResponse
+      & agmmrStatusCode ?~ "200"
 
 apiGWDeployment :: Resource
 apiGWDeployment = (resource "ApiGWDeployment" $
@@ -140,7 +149,7 @@
     lambdaCode
     "index.handler"
     (GetAtt "ReadLambdaRole" "Arn")
-    NodeJS43
+    (Literal NodeJS43)
     & lfFunctionName ?~ "readTable"
   )
 
@@ -171,15 +180,15 @@
 
 
 writeLambda :: Resource
-writeLambda = (resource "WriteTableLambda" $
+writeLambda =
+  resource "WriteTableLambda" $
   LambdaFunctionProperties $
   lambdaFunction
     lambdaCode
     "index.handler"
     (GetAtt "WriteLambdaRole" "Arn")
-    NodeJS43
+    (Literal NodeJS43)
     & lfFunctionName ?~ "writeTable"
-  )
 
   where
     lambdaCode :: LambdaFunctionCode
@@ -209,14 +218,15 @@
 readLambdaRole :: Resource
 readLambdaRole = resource "ReadLambdaRole" $
   IAMRoleProperties $
-  iamRole rolePolicyDocumentObject
+  iamRole
+  rolePolicyDocumentObject
   & iamrPolicies ?~ [ executePolicy ]
   & iamrRoleName ?~ "ReadLambdaRole"
   & iamrPath ?~ "/"
 
   where
     executePolicy =
-      iamPolicies
+      iamRolePolicy
       [ ("Version", "2012-10-17")
       , ("Statement", statement)
       ]
@@ -236,7 +246,6 @@
           , "dynamodb:GetItem"
           ]
 
-
     rolePolicyDocumentObject =
       [ ("Version", "2012-10-17")
       , ("Statement", statement)
@@ -255,14 +264,15 @@
 writeLambdaRole :: Resource
 writeLambdaRole = resource "WriteLambdaRole" $
   IAMRoleProperties $
-  iamRole rolePolicyDocumentObject
+  iamRole
+  rolePolicyDocumentObject
   & iamrPolicies ?~ [ executePolicy ]
   & iamrRoleName ?~ "WriteLambdaRole"
   & iamrPath ?~ "/"
 
   where
     executePolicy =
-      iamPolicies
+      iamRolePolicy
       [ ("Version", "2012-10-17")
       , ("Statement", statement)
       ]
@@ -325,14 +335,19 @@
 
   where
     attributeDefinitions = [
-        dynamoDBAttributeDefinition "Id" S
+        dynamoDBTableAttributeDefinition
+        (Literal "Id")
+        (Literal S)
       ]
     keySchema = [
-        dynamoDBKeySchema "Id" HASH
+        dynamoDBTableKeySchema
+        (Literal "Id")
+        (Literal HASH)
       ]
     provisionedThroughput =
-      dynamoDBProvisionedThroughput (Literal 1) (Literal 1)
+      dynamoDBTableProvisionedThroughput
+      (Literal 1)
+      (Literal 1)
 
 deps :: [Resource] -> [Text]
-deps = map (\d -> d ^. resName)
-
+deps = map (^. resName)
diff --git a/examples/apigw-lambda-s3.hs b/examples/apigw-lambda-s3.hs
deleted file mode 100644
--- a/examples/apigw-lambda-s3.hs
+++ /dev/null
@@ -1,189 +0,0 @@
-{-# LANGUAGE OverloadedLists #-}
-{-# LANGUAGE OverloadedStrings #-}
-
-module Main where
-
-import Control.Lens
-import Data.Aeson (Value (Array), object)
-import qualified Data.ByteString.Lazy.Char8 as B
-import Data.Text (Text)
-import Stratosphere
-
-
--- to curl the endpoint: (substitute your APIGW deployment URL)
--- curl -v -X POST -H "Content-Type: application/json" -d "{\"property\": 3}" "https://t04rmwbtgj.execute-api.us-east-1.amazonaws.com/v1/thing"
-
-main :: IO ()
-main = B.putStrLn $ encodeTemplate myTemplate
-
-myTemplate :: Template
-myTemplate = template
-  [ role
-  , incomingS3Bucket
-  , lambda
-  , permission
-  , apiGWRestApi
-  , apiGWResource
-  , apiGWMethod
-  , apiGWDeployment
-  ]
-  & description ?~ "Simple api gateway attached to a lambda that writes the request body to a S3 object"
-  & formatVersion ?~ "2010-09-09"
-
-apiGWRestApi :: Resource
-apiGWRestApi = (resource "ApiGWRestApi" $
-  ApiGatewayRestApiProperties $
-  apiGatewayRestApi
-    "myApi"
-  )
-
-apiGWResource :: Resource
-apiGWResource = (resource "ApiGWResource" $
-  ApiGatewayResourceProperties $
-  apiGatewayResource
-    (GetAtt "ApiGWRestApi" "RootResourceId")
-    "thing"
-    (toRef apiGWRestApi)
-  )
-
-apiGWMethod :: Resource
-apiGWMethod = (resource "ApiGWMethod" $
-  ApiGatewayMethodProperties $
-  apiGatewayMethod
-    NONE
-    POST
-    (toRef apiGWResource)
-    (toRef apiGWRestApi)
-    & agmeIntegration ?~ integration
-    & agmeMethodResponses ?~ [ methodResponse ]
-  )
-  & dependsOn ?~ deps [
-      permission
-    ]
-
-  where
-    integration = apiGatewayIntegration AWS
-      & agiIntegrationHttpMethod ?~ POST
-      & agiUri ?~ (Join "" [
-          "arn:aws:apigateway:"
-        , Ref "AWS::Region"
-        , ":lambda:path/2015-03-31/functions/"
-        , GetAtt "WriteS3ObjectLambda" "Arn"
-        , "/invocations"])
-      & agiIntegrationResponses ?~ [ integrationResponse ]
-      & agiPassthroughBehavior ?~ WHEN_NO_TEMPLATES
-      & agiRequestTemplates ?~ [ ("application/json", "{\"body\": $input.body}") ]
-
-    integrationResponse = apiGatewayIntegrationResponse
-      & agirResponseTemplates ?~ [ ("application/json", "$input.json('$.body')") ]
-      & agirStatusCode ?~ "200"
-
-    methodResponse = apiGatewayMethodResponse "200"
-
-apiGWDeployment :: Resource
-apiGWDeployment = (resource "ApiGWDeployment" $
-  ApiGatewayDeploymentProperties $
-  apiGatewayDeployment
-    (toRef apiGWRestApi)
-    & agdStageName ?~ "v1"
-  )
-  & dependsOn ?~ deps [
-      apiGWResource
-    , apiGWMethod
-    ]
-
-lambda :: Resource
-lambda = (resource "WriteS3ObjectLambda" $
-  LambdaFunctionProperties $
-  lambdaFunction
-    lambdaCode
-    "index.handler"
-    (GetAtt "IAMRole" "Arn")
-    NodeJS43
-    & lfFunctionName ?~ "writeS3Object"
-  )
-
-  where
-    lambdaCode :: LambdaFunctionCode
-    lambdaCode = lambdaFunctionCode
-      & lfcZipFile ?~ code
-
-    code :: Val Text
-    code = "\
-    \ var AWS = require('aws-sdk');\n\
-    \ var s3 = new AWS.S3({apiVersion: '2006-03-01'});\n\
-    \ exports.handler = function(event, context, callback) {\n\
-    \   console.log(JSON.stringify(event));\n\
-    \   s3.putObject({Bucket: \"stratosphere-api-gateway-lambda-incoming\", Key: \"content.json\", ContentType: \"application/json\", Body: JSON.stringify(event.body)}, function(err){\n\
-    \     if (err) { \n\
-    \       console.log(\"Error:\", err); \n\
-    \       callback(err) \n\
-    \     } else { \n\
-    \       callback(null, {\"body\": event.body});\n\
-    \     } \n\
-    \   });\n\
-    \ }\n\
-    \ "
-
-role :: Resource
-role = resource "IAMRole" $
-  IAMRoleProperties $
-  iamRole rolePolicyDocumentObject
-  & iamrPolicies ?~ [ executePolicy ]
-  & iamrRoleName ?~ "MyLambdaBasicExecutionRole"
-  & iamrPath ?~ "/"
-
-  where
-    executePolicy =
-      iamPolicies
-      [ ("Version", "2012-10-17")
-      , ("Statement", statement)
-      ]
-      "MyLambdaExecutionPolicy"
-
-      where
-        statement = object
-          [ ("Effect", "Allow")
-          , ("Action", actions)
-          , ("Resource", "*")
-          ]
-
-        actions = Array
-          [ "logs:CreateLogGroup"
-          , "logs:CreateLogStream"
-          , "logs:PutLogEvents"
-          , "s3:PutObject"
-          ]
-
-
-    rolePolicyDocumentObject =
-      [ ("Version", "2012-10-17")
-      , ("Statement", statement)
-      ]
-
-      where
-        statement = object
-          [ ("Effect", "Allow")
-          , ("Principal", principal)
-          , ("Action", "sts:AssumeRole")
-          ]
-
-        principal = object
-          [ ("Service", "lambda.amazonaws.com") ]
-
-incomingS3Bucket :: Resource
-incomingS3Bucket = resource "IncomingBucket" $
-  BucketProperties $
-  bucket
-  & bBucketName ?~ "stratosphere-api-gateway-lambda-incoming"
-
-permission :: Resource
-permission = resource "LambdaPermission" $
-  LambdaPermissionProperties $
-  lambdaPermission
-    "lambda:*"
-    (GetAtt "WriteS3ObjectLambda" "Arn")
-    "apigateway.amazonaws.com"
-
-deps :: [Resource] -> [Text]
-deps = map (\d -> d ^. resName)
diff --git a/examples/auto-scaling-group.hs b/examples/auto-scaling-group.hs
--- a/examples/auto-scaling-group.hs
+++ b/examples/auto-scaling-group.hs
@@ -28,12 +28,12 @@
 asgResource :: Resource
 asgResource =
   resource "AutoScalingGroup" $
-  AutoScalingGroupProperties $
-  autoScalingGroup
+  AutoScalingAutoScalingGroupProperties $
+  autoScalingAutoScalingGroup
   "1"
   "4"
-  & asgDesiredCapacity ?~ "3"
-  & asgLaunchConfigurationName ?~ Ref "LaunchConfig"
+  & asasgDesiredCapacity ?~ "3"
+  & asasgLaunchConfigurationName ?~ Ref "LaunchConfig"
 
 asgCreationPolicy :: CreationPolicy
 asgCreationPolicy =
@@ -46,21 +46,21 @@
 asgUpdatePolicy =
   updatePolicy
   & upAutoScalingScheduledAction ?~ (
-    autoScalingScheduledAction
-    & assaIgnoreUnmodifiedGroupSizeProperties ?~ Literal True'
+    autoScalingScheduledActionPolicy
+    & assapIgnoreUnmodifiedGroupSizeProperties ?~ Literal True'
     )
   & upAutoScalingRollingUpdate ?~ (
-    autoScalingRollingUpdate
-    & asruMinInstancesInService ?~ Literal 1
-    & asruMaxBatchSize ?~ Literal 2
-    & asruPauseTime ?~ "PT15M"
-    & asruWaitOnResourceSignals ?~ Literal True'
+    autoScalingRollingUpdatePolicy
+    & asrupMinInstancesInService ?~ Literal 1
+    & asrupMaxBatchSize ?~ Literal 2
+    & asrupPauseTime ?~ "PT15M"
+    & asrupWaitOnResourceSignals ?~ Literal True'
     )
 
 launchConfigResource :: Resource
 launchConfigResource =
   resource "LaunchConfig" $
-  LaunchConfigurationProperties $
-  launchConfiguration
+  AutoScalingLaunchConfigurationProperties $
+  autoScalingLaunchConfiguration
   "ami-16d18a7e"
   "t2.micro"
diff --git a/examples/ec2-with-eip.hs b/examples/ec2-with-eip.hs
--- a/examples/ec2-with-eip.hs
+++ b/examples/ec2-with-eip.hs
@@ -30,22 +30,22 @@
       )
     & deletionPolicy ?~ Retain
   , resource "InstanceSecurityGroup" $
-    SecurityGroupProperties $
-    securityGroup
+    EC2SecurityGroupProperties $
+    ec2SecurityGroup
     "Enable SSH Access"
-    & sgSecurityGroupIngress ?~ [
-      securityGroupIngressRule
+    & ecsgSecurityGroupIngress ?~ [
+      ec2SecurityGroupRule
       "tcp"
-      & sgirFromPort ?~ Literal 22
-      & sgirToPort ?~ Literal 22
-      & sgirCidrIp ?~ Ref "SSHLocation"
+      & ecsgrFromPort ?~ Literal 22
+      & ecsgrToPort ?~ Literal 22
+      & ecsgrCidrIp ?~ Ref "SSHLocation"
       ]
-  , resource "IPAddress" (EIPProperties eip)
+  , resource "IPAddress" (EC2EIPProperties ec2EIP)
   , resource "IPAssoc" $
-    EIPAssociationProperties $
-    eipAssociation
-    & eipaInstanceId ?~ Ref "EC2Instance"
-    & eipaEIP ?~ Ref "IPAddress"
+    EC2EIPAssociationProperties $
+    ec2EIPAssociation
+    & eceipaInstanceId ?~ Ref "EC2Instance"
+    & eceipaEip ?~ Ref "IPAddress"
   ]
   & description ?~ "See https://s3.amazonaws.com/cloudformation-templates-us-east-1/EIP_With_Association.template"
   & formatVersion ?~ "2010-09-09"
diff --git a/examples/rds-master-replica.hs b/examples/rds-master-replica.hs
--- a/examples/rds-master-replica.hs
+++ b/examples/rds-master-replica.hs
@@ -8,7 +8,6 @@
 module Main where
 
 import Control.Lens
-import Data.Aeson (object)
 import qualified Data.ByteString.Lazy.Char8 as B
 
 import Stratosphere
@@ -33,49 +32,50 @@
 rdsMaster :: Resource
 rdsMaster =
   resource "RDSMaster" $
-  DBInstanceProperties $
-  dbInstance
+  RDSDBInstanceProperties $
+  rdsdbInstance
   "db.t2.micro"
-  & dbiDBInstanceIdentifier ?~ Literal "db-master"
-  & dbiStorageType ?~ "gp2"
-  & dbiAllocatedStorage ?~ "20"
-  & dbiDBParameterGroupName ?~ toRef rdsParamGroup
-  & dbiEngine ?~ "postgres"
-  & dbiEngineVersion ?~ "9.3.10"
-  & dbiMasterUsername ?~ "postgres"
-  & dbiMasterUserPassword ?~ Ref "RdsMasterPassword"
-  & dbiDBName ?~ "the_database"
-  & dbiPreferredMaintenanceWindow ?~ "Sun:01:00-Sun:02:00"
-  & dbiBackupRetentionPeriod ?~ "30"
-  & dbiPreferredBackupWindow ?~ "08:00-09:00"
-  & dbiPort ?~ "5432"
-  & dbiBackupRetentionPeriod ?~ "2"
-  & dbiTags ?~
-  [ resourceTag "Role" "rds-master"
+  -- DBInstanceIdentifier is not present in the new schema for some reason
+  -- & rdsdbiDBInstanceIdentifier ?~ Literal "db-master"
+  & rdsdbiStorageType ?~ "gp2"
+  & rdsdbiAllocatedStorage ?~ "20"
+  & rdsdbiDBParameterGroupName ?~ toRef rdsParamGroup
+  & rdsdbiEngine ?~ "postgres"
+  & rdsdbiEngineVersion ?~ "9.3.10"
+  & rdsdbiMasterUsername ?~ "postgres"
+  & rdsdbiMasterUserPassword ?~ Ref "RdsMasterPassword"
+  & rdsdbiDBName ?~ "the_database"
+  & rdsdbiPreferredMaintenanceWindow ?~ "Sun:01:00-Sun:02:00"
+  & rdsdbiBackupRetentionPeriod ?~ "30"
+  & rdsdbiPreferredBackupWindow ?~ "08:00-09:00"
+  & rdsdbiPort ?~ "5432"
+  & rdsdbiBackupRetentionPeriod ?~ "2"
+  & rdsdbiTags ?~
+  [ tag "Role" "rds-master"
   ]
 
 rdsReplica :: Resource
 rdsReplica =
   resource "RDSReplica" $
-  DBInstanceProperties $
-  dbInstance
+  RDSDBInstanceProperties $
+  rdsdbInstance
   "db.t2.micro"
-  & dbiDBInstanceIdentifier ?~ Literal "db-standby"
-  & dbiSourceDBInstanceIdentifier ?~ toRef rdsMaster
-  & dbiStorageType ?~ "gp2"
-  & dbiTags ?~
-  [ resourceTag "Role" "rds-standby"
+  -- DBInstanceIdentifier is not present in the new schema for some reason
+  -- & dbiDBInstanceIdentifier ?~ Literal "db-standby"
+  & rdsdbiSourceDBInstanceIdentifier ?~ toRef rdsMaster
+  & rdsdbiStorageType ?~ "gp2"
+  & rdsdbiTags ?~
+  [ tag "Role" "rds-standby"
   ]
 
 rdsParamGroup :: Resource
 rdsParamGroup =
   resource "RDSParamGroup" $
-  DBParameterGroupProperties $
-  dbParameterGroup
+  RDSDBParameterGroupProperties $
+  rdsdbParameterGroup
   "Parameter group for RDS instances"
   "postgres9.3"
-  & dbpgParameters ?~
-    object
+  & rdsdbpgParameters ?~
     [ ("checkpoint_segments", "32")
     , ("effective_cache_size", "5584716")
     , ("hot_standby_feedback", "1")
diff --git a/examples/s3-copy.hs b/examples/s3-copy.hs
--- a/examples/s3-copy.hs
+++ b/examples/s3-copy.hs
@@ -9,27 +9,33 @@
 import Data.Text (Text)
 import Stratosphere
 
-
 main :: IO ()
 main = B.putStrLn $ encodeTemplate myTemplate
 
 myTemplate :: Template
-myTemplate = template
-  [ role, lambda, permission, incomingS3Bucket, outgoingS3Bucket ]
+myTemplate =
+  template
+  [ role'
+  , lambda
+  , permission
+  , incomingS3Bucket
+  , outgoingS3Bucket
+  ]
   & description ?~ "Simple event triggered S3 bucket to bucket copy example"
   & formatVersion ?~ "2010-09-09"
 
 lambda :: Resource
-lambda = (resource "CopyS3ObjectLambda" $
+lambda = (
+  resource "CopyS3ObjectLambda" $
   LambdaFunctionProperties $
   lambdaFunction
     lambdaCode
     "index.handler"
     (GetAtt "IAMRole" "Arn")
-    NodeJS43
+    (Literal NodeJS43)
     & lfFunctionName ?~ "copyS3Object"
   )
-  & dependsOn ?~ [ role ^. resName ]
+  & dependsOn ?~ [ role' ^. resName ]
 
   where
     lambdaCode :: LambdaFunctionCode
@@ -51,21 +57,22 @@
     \ } \
     \ "
 
-
-role :: Resource
-role = resource "IAMRole" $
+role' :: Resource
+role' =
+  resource "IAMRole" $
   IAMRoleProperties $
-  iamRole rolePolicyDocumentObject
+  iamRole
+  rolePolicyDocumentObject
   & iamrPolicies ?~ [ executePolicy ]
   & iamrRoleName ?~ "MyLambdaBasicExecutionRole"
   & iamrPath ?~ "/"
 
   where
     executePolicy =
-      iamPolicies
+      iamRolePolicy
       [ ("Version", "2012-10-17")
       , ("Statement", statement)
-      ] $
+      ]
       "MyLambdaExecutionPolicy"
 
       where
@@ -84,7 +91,6 @@
           , "s3:GetObject"
           ]
 
-
     rolePolicyDocumentObject =
       [ ("Version", "2012-10-17")
       , ("Statement", statement)
@@ -101,28 +107,30 @@
           [ ("Service", "lambda.amazonaws.com") ]
 
 incomingS3Bucket :: Resource
-incomingS3Bucket = (resource "IncomingBucket" $
-  BucketProperties $
-  bucket
-    & bBucketName ?~ "stratosphere-s3-copy-incoming"
-    & bNotificationConfiguration ?~ config
+incomingS3Bucket = (
+  resource "IncomingBucket" $
+  S3BucketProperties $
+  s3Bucket
+  & sbBucketName ?~ "stratosphere-s3-copy-incoming"
+  & sbNotificationConfiguration ?~ config
   )
   & dependsOn ?~ [ lambda ^. resName ]
 
   where
-    config = s3NotificationConfiguration
-      & sncLambdaConfigurations ?~ [lambdaConfig]
+    config =
+      s3BucketNotificationConfiguration
+      & sbncLambdaConfigurations ?~ [lambdaConfig]
 
-    lambdaConfig = s3NotificationConfigurationLambdaConfiguration
+    lambdaConfig =
+      s3BucketLambdaConfiguration
       "s3:ObjectCreated:*"
       (GetAtt "CopyS3ObjectLambda" "Arn")
 
 outgoingS3Bucket :: Resource
 outgoingS3Bucket = resource "OutgoingBucket" $
-  BucketProperties $
-  bucket
-  & bBucketName ?~ "stratosphere-s3-copy-outgoing"
-
+  S3BucketProperties $
+  s3Bucket
+  & sbBucketName ?~ "stratosphere-s3-copy-outgoing"
 
 permission :: Resource
 permission = resource "LambdaPermission" $
diff --git a/examples/simple-lambda.hs b/examples/simple-lambda.hs
--- a/examples/simple-lambda.hs
+++ b/examples/simple-lambda.hs
@@ -9,28 +9,27 @@
 import Data.Text (Text)
 import Stratosphere
 
-
 main :: IO ()
 main = B.putStrLn $ encodeTemplate myTemplate
 
 myTemplate :: Template
 myTemplate =
   template
-  [ role, lambda ]
+  [ role', lambda ]
   & description ?~ "Lambda example"
   & formatVersion ?~ "2010-09-09"
 
 lambda :: Resource
-lambda =
-  (resource "LambdaFunction" $
+lambda = (
+  resource "LambdaFunction" $
   LambdaFunctionProperties $
   lambdaFunction
     lambdaCode
     "index.handler"
     (GetAtt "IAMRole" "Arn")
-    NodeJS43
+    (Literal NodeJS43)
   )
-  & dependsOn ?~ [ role ^. resName ]
+  & dependsOn ?~ [ role' ^. resName ]
 
 lambdaCode :: LambdaFunctionCode
 lambdaCode = lambdaFunctionCode
@@ -46,21 +45,22 @@
 \ "
 
 
-role :: Resource
-role =
+role' :: Resource
+role' =
   resource "IAMRole" $
   IAMRoleProperties $
-  iamRole rolePolicyDocumentObject
+  iamRole
+  rolePolicyDocumentObject
   & iamrPolicies ?~ [ executePolicy ]
   & iamrRoleName ?~ "MyLambdaBasicExecutionRole"
   & iamrPath ?~ "/"
 
   where
     executePolicy =
-      iamPolicies
+      iamRolePolicy
       [ ("Version", "2012-10-17")
       , ("Statement", statement)
-      ] $
+      ]
       "MyLambdaExecutionPolicy"
 
       where
diff --git a/library-gen/Stratosphere/ResourceAttributes/AutoScalingReplacingUpdate.hs b/library-gen/Stratosphere/ResourceAttributes/AutoScalingReplacingUpdate.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceAttributes/AutoScalingReplacingUpdate.hs
+++ /dev/null
@@ -1,50 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | To specify how AWS CloudFormation handles replacing updates for an Auto
--- Scaling group, use the AutoScalingReplacingUpdate policy.
-
-module Stratosphere.ResourceAttributes.AutoScalingReplacingUpdate where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for AutoScalingReplacingUpdate. See
--- 'autoScalingReplacingUpdate' for a more convenient constructor.
-data AutoScalingReplacingUpdate =
-  AutoScalingReplacingUpdate
-  { _autoScalingReplacingUpdateWillReplace :: Maybe (Val Bool')
-  } deriving (Show, Generic)
-
-instance ToJSON AutoScalingReplacingUpdate where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
-
-instance FromJSON AutoScalingReplacingUpdate where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
-
--- | Constructor for 'AutoScalingReplacingUpdate' containing required fields
--- as arguments.
-autoScalingReplacingUpdate
-  :: AutoScalingReplacingUpdate
-autoScalingReplacingUpdate  =
-  AutoScalingReplacingUpdate
-  { _autoScalingReplacingUpdateWillReplace = Nothing
-  }
-
--- | Specifies whether an Auto Scaling group and the instances it contains are
--- replaced during an update. During replacement, AWS CloudFormation retains
--- the old group until it finishes creating the new one. This allows AWS
--- CloudFormation to roll back to the old Auto Scaling group if the update
--- doesn't succeed. While AWS CloudFormation creates the new group, it doesn't
--- detach or attach any instances. After creating the new Auto Scaling group,
--- AWS CloudFormation removes the old Auto Scaling group during the cleanup
--- process. If the update doesn't succeed, AWS CloudFormation removes the new
--- Auto Scaling group.
-asruWillReplace :: Lens' AutoScalingReplacingUpdate (Maybe (Val Bool'))
-asruWillReplace = lens _autoScalingReplacingUpdateWillReplace (\s a -> s { _autoScalingReplacingUpdateWillReplace = a })
diff --git a/library-gen/Stratosphere/ResourceAttributes/AutoScalingRollingUpdate.hs b/library-gen/Stratosphere/ResourceAttributes/AutoScalingRollingUpdate.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceAttributes/AutoScalingRollingUpdate.hs
+++ /dev/null
@@ -1,108 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | To specify how AWS CloudFormation handles rolling updates for an Auto
--- Scaling group, use the AutoScalingRollingUpdate policy.
-
-module Stratosphere.ResourceAttributes.AutoScalingRollingUpdate where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for AutoScalingRollingUpdate. See
--- 'autoScalingRollingUpdate' for a more convenient constructor.
-data AutoScalingRollingUpdate =
-  AutoScalingRollingUpdate
-  { _autoScalingRollingUpdateMaxBatchSize :: Maybe (Val Integer')
-  , _autoScalingRollingUpdateMinInstancesInService :: Maybe (Val Integer')
-  , _autoScalingRollingUpdateMinSuccessfulInstancesPercent :: Maybe (Val Integer')
-  , _autoScalingRollingUpdatePauseTime :: Maybe (Val Text)
-  , _autoScalingRollingUpdateSuspendProcess :: Maybe [Val Text]
-  , _autoScalingRollingUpdateWaitOnResourceSignals :: Maybe (Val Bool')
-  } deriving (Show, Generic)
-
-instance ToJSON AutoScalingRollingUpdate where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
-
-instance FromJSON AutoScalingRollingUpdate where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
-
--- | Constructor for 'AutoScalingRollingUpdate' containing required fields as
--- arguments.
-autoScalingRollingUpdate
-  :: AutoScalingRollingUpdate
-autoScalingRollingUpdate  =
-  AutoScalingRollingUpdate
-  { _autoScalingRollingUpdateMaxBatchSize = Nothing
-  , _autoScalingRollingUpdateMinInstancesInService = Nothing
-  , _autoScalingRollingUpdateMinSuccessfulInstancesPercent = Nothing
-  , _autoScalingRollingUpdatePauseTime = Nothing
-  , _autoScalingRollingUpdateSuspendProcess = Nothing
-  , _autoScalingRollingUpdateWaitOnResourceSignals = Nothing
-  }
-
--- | Specifies the maximum number of instances that AWS CloudFormation
--- terminates.
-asruMaxBatchSize :: Lens' AutoScalingRollingUpdate (Maybe (Val Integer'))
-asruMaxBatchSize = lens _autoScalingRollingUpdateMaxBatchSize (\s a -> s { _autoScalingRollingUpdateMaxBatchSize = a })
-
--- | Specifies the minimum number of instances that must be in service within
--- the Auto Scaling group while AWS CloudFormation terminates obsolete
--- instances.
-asruMinInstancesInService :: Lens' AutoScalingRollingUpdate (Maybe (Val Integer'))
-asruMinInstancesInService = lens _autoScalingRollingUpdateMinInstancesInService (\s a -> s { _autoScalingRollingUpdateMinInstancesInService = a })
-
--- | Specifies the percentage of instances in an Auto Scaling rolling update
--- that must signal success for an update to succeed. You can specify a value
--- from 0 to 100. AWS CloudFormation rounds to the nearest tenth of a percent.
--- For example, if you update five instances with a minimum successful
--- percentage of 50, three instances must signal success. If an instance
--- doesn't send a signal within the time specified using the PauseTime
--- property, AWS CloudFormation assumes that the instance wasn't successfully
--- updated. If you specify this property, you must also enable the
--- WaitOnResourceSignals and PauseTime properties.
-asruMinSuccessfulInstancesPercent :: Lens' AutoScalingRollingUpdate (Maybe (Val Integer'))
-asruMinSuccessfulInstancesPercent = lens _autoScalingRollingUpdateMinSuccessfulInstancesPercent (\s a -> s { _autoScalingRollingUpdateMinSuccessfulInstancesPercent = a })
-
--- | Specifies the amount of time that AWS CloudFormation should pause after
--- making a change to a batch of instances to give these instances time to
--- start software applications. For example, you might need PauseTime when
--- scaling up the number of instances in an Auto Scaling group. If you enable
--- the WaitOnResourceSignals property, PauseTime is the amount of time AWS
--- CloudFormation should wait for the Auto Scaling group to receive the
--- required number of valid signals from added or replaced instances. If the
--- PauseTime is exceeded before the Auto Scaling group receives the required
--- number of signals, the update fails. For best results, specify a time
--- period that gives your instances sufficient time to get started. If the
--- update needs to be rolled back, a short PauseTime can cause the rollback to
--- fail. Specify PauseTime in the ISO8601 duration format (in the format
--- PT#H#M#S, where each # is the number of hours, minutes, and seconds,
--- respectively). The maximum PauseTime is one hour (PT1H).
-asruPauseTime :: Lens' AutoScalingRollingUpdate (Maybe (Val Text))
-asruPauseTime = lens _autoScalingRollingUpdatePauseTime (\s a -> s { _autoScalingRollingUpdatePauseTime = a })
-
--- | Specifies the Auto Scaling processes to suspend during a stack update.
--- Suspending processes prevents Auto Scaling from interfering with a stack
--- update. For example, you can suspend alarming so that Auto Scaling doesn't
--- execute scaling policies associated with an alarm. For valid values, see
--- the ScalingProcesses.member.N parameter for the SuspendProcesses action in
--- the Auto Scaling API Reference.
-asruSuspendProcess :: Lens' AutoScalingRollingUpdate (Maybe [Val Text])
-asruSuspendProcess = lens _autoScalingRollingUpdateSuspendProcess (\s a -> s { _autoScalingRollingUpdateSuspendProcess = a })
-
--- | Specifies whether the Auto Scaling group waits on signals from new
--- instances during an update. AWS CloudFormation suspends the update of an
--- Auto Scaling group after new Amazon EC2 instances are launched into the
--- group. AWS CloudFormation must receive a signal from each new instance
--- within the specified PauseTime before continuing the update. To signal the
--- Auto Scaling group, use the cfn-signal helper script or SignalResource API.
--- Use this property to ensure that instances have completed installing and
--- configuring applications before the Auto Scaling group update proceeds.
-asruWaitOnResourceSignals :: Lens' AutoScalingRollingUpdate (Maybe (Val Bool'))
-asruWaitOnResourceSignals = lens _autoScalingRollingUpdateWaitOnResourceSignals (\s a -> s { _autoScalingRollingUpdateWaitOnResourceSignals = a })
diff --git a/library-gen/Stratosphere/ResourceAttributes/AutoScalingScheduledAction.hs b/library-gen/Stratosphere/ResourceAttributes/AutoScalingScheduledAction.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceAttributes/AutoScalingScheduledAction.hs
+++ /dev/null
@@ -1,60 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | To specify how AWS CloudFormation handles updates for the MinSize,
--- MaxSize, and DesiredCapacity properties when the
--- AWS::AutoScaling::AutoScalingGroup resource has an associated scheduled
--- action, use the AutoScalingScheduledAction policy. With scheduled actions,
--- the group size properties of an Auto Scaling group can change at any time.
--- When you update a stack with an Auto Scaling group and scheduled action,
--- AWS CloudFormation always sets the group size property values of your Auto
--- Scaling group to the values that are defined in the
--- AWS::AutoScaling::AutoScalingGroup resource of your template, even if a
--- scheduled action is in effect. If you do not want AWS CloudFormation to
--- change any of the group size property values when you have a scheduled
--- action in effect, use the AutoScalingScheduledAction update policy to
--- prevent AWS CloudFormation from changing the MinSize, MaxSize, or
--- DesiredCapacity properties unless you have modified these values in your
--- template.
-
-module Stratosphere.ResourceAttributes.AutoScalingScheduledAction where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for AutoScalingScheduledAction. See
--- 'autoScalingScheduledAction' for a more convenient constructor.
-data AutoScalingScheduledAction =
-  AutoScalingScheduledAction
-  { _autoScalingScheduledActionIgnoreUnmodifiedGroupSizeProperties :: Maybe (Val Bool')
-  } deriving (Show, Generic)
-
-instance ToJSON AutoScalingScheduledAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
-
-instance FromJSON AutoScalingScheduledAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
-
--- | Constructor for 'AutoScalingScheduledAction' containing required fields
--- as arguments.
-autoScalingScheduledAction
-  :: AutoScalingScheduledAction
-autoScalingScheduledAction  =
-  AutoScalingScheduledAction
-  { _autoScalingScheduledActionIgnoreUnmodifiedGroupSizeProperties = Nothing
-  }
-
--- | Specifies whether AWS CloudFormation ignores differences in group size
--- properties between your current Auto Scaling group and the Auto Scaling
--- group described in the AWS::AutoScaling::AutoScalingGroup resource of your
--- template during a stack update. If you modify any of the group size
--- property values in your template, AWS CloudFormation uses the modified
--- values and updates your Auto Scaling group.
-assaIgnoreUnmodifiedGroupSizeProperties :: Lens' AutoScalingScheduledAction (Maybe (Val Bool'))
-assaIgnoreUnmodifiedGroupSizeProperties = lens _autoScalingScheduledActionIgnoreUnmodifiedGroupSizeProperties (\s a -> s { _autoScalingScheduledActionIgnoreUnmodifiedGroupSizeProperties = a })
diff --git a/library-gen/Stratosphere/ResourceAttributes/CreationPolicy.hs b/library-gen/Stratosphere/ResourceAttributes/CreationPolicy.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceAttributes/CreationPolicy.hs
+++ /dev/null
@@ -1,58 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | You associate the CreationPolicy attribute with a resource to prevent its
--- status from reaching create complete until AWS CloudFormation receives a
--- specified number of success signals or the timeout period is exceeded. To
--- signal a resource, you can use the cfn-signal helper script or
--- SignalResource API. AWS CloudFormation publishes valid signals to the stack
--- events so that you track the number of signals sent. The creation policy is
--- invoked only when AWS CloudFormation creates the associated resource.
--- Currently, the only AWS CloudFormation resources that support creation
--- policies are AWS::AutoScaling::AutoScalingGroup, AWS::EC2::Instance, and
--- AWS::CloudFormation::WaitCondition. The CreationPolicy attribute is helpful
--- when you want to wait on resource configuration actions before stack
--- creation proceeds. For example, if you install and configure software
--- applications on an Amazon EC2 instance, you might want those applications
--- up and running before proceeding. In such cases, you can add a
--- CreationPolicy attribute to the instance and then send a success signal to
--- the instance after the applications are installed and configured. For a
--- detailed example, see Deploying Applications on Amazon EC2 with AWS
--- CloudFormation.
-
-module Stratosphere.ResourceAttributes.CreationPolicy where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceAttributes.ResourceSignal
-
--- | Full data type definition for CreationPolicy. See 'creationPolicy' for a
--- more convenient constructor.
-data CreationPolicy =
-  CreationPolicy
-  { _creationPolicyResourceSignal :: ResourceSignal
-  } deriving (Show, Generic)
-
-instance ToJSON CreationPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
-
-instance FromJSON CreationPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
-
--- | Constructor for 'CreationPolicy' containing required fields as arguments.
-creationPolicy
-  :: ResourceSignal -- ^ 'cpResourceSignal'
-  -> CreationPolicy
-creationPolicy resourceSignalarg =
-  CreationPolicy
-  { _creationPolicyResourceSignal = resourceSignalarg
-  }
-
--- |
-cpResourceSignal :: Lens' CreationPolicy ResourceSignal
-cpResourceSignal = lens _creationPolicyResourceSignal (\s a -> s { _creationPolicyResourceSignal = a })
diff --git a/library-gen/Stratosphere/ResourceAttributes/ResourceSignal.hs b/library-gen/Stratosphere/ResourceAttributes/ResourceSignal.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceAttributes/ResourceSignal.hs
+++ /dev/null
@@ -1,58 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- |
-
-module Stratosphere.ResourceAttributes.ResourceSignal where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for ResourceSignal. See 'resourceSignal' for a
--- more convenient constructor.
-data ResourceSignal =
-  ResourceSignal
-  { _resourceSignalCount :: Maybe (Val Integer')
-  , _resourceSignalTimeout :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON ResourceSignal where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
-
-instance FromJSON ResourceSignal where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
-
--- | Constructor for 'ResourceSignal' containing required fields as arguments.
-resourceSignal
-  :: ResourceSignal
-resourceSignal  =
-  ResourceSignal
-  { _resourceSignalCount = Nothing
-  , _resourceSignalTimeout = Nothing
-  }
-
--- | The number of success signals AWS CloudFormation must receive before it
--- sets the resource status as CREATE_COMPLETE. If the resource receives a
--- failure signal or doesn't receive the specified number of signals before
--- the timeout period expires, the resource creation fails and AWS
--- CloudFormation rolls the stack back.
-rsCount :: Lens' ResourceSignal (Maybe (Val Integer'))
-rsCount = lens _resourceSignalCount (\s a -> s { _resourceSignalCount = a })
-
--- | The length of time that AWS CloudFormation waits for the number of
--- signals that was specified in the Count property. The timeout period starts
--- after AWS CloudFormation starts creating the resource, and the timeout
--- expires no sooner than the time you specify but can occur shortly
--- thereafter. The maximum time that you can specify is 12 hours. The value
--- must be in ISO8601 duration format, in the form: "PT#H#M#S", where each #
--- is the number of hours, minutes, and seconds, respectively. For best
--- results, specify a period of time that gives your instances plenty of time
--- to get up and running. A shorter timeout can cause a rollback.
-rsTimeout :: Lens' ResourceSignal (Maybe (Val Text))
-rsTimeout = lens _resourceSignalTimeout (\s a -> s { _resourceSignalTimeout = a })
diff --git a/library-gen/Stratosphere/ResourceAttributes/UpdatePolicy.hs b/library-gen/Stratosphere/ResourceAttributes/UpdatePolicy.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceAttributes/UpdatePolicy.hs
+++ /dev/null
@@ -1,58 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Use the UpdatePolicy attribute to specify how AWS CloudFormation handles
--- updates to the AWS::AutoScaling::AutoScalingGroup resource. AWS
--- CloudFormation invokes one of three update policies depending on the type
--- of change you make or on whether a scheduled action is associated with the
--- Auto Scaling group.
-
-module Stratosphere.ResourceAttributes.UpdatePolicy where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceAttributes.AutoScalingReplacingUpdate
-import Stratosphere.ResourceAttributes.AutoScalingRollingUpdate
-import Stratosphere.ResourceAttributes.AutoScalingScheduledAction
-
--- | Full data type definition for UpdatePolicy. See 'updatePolicy' for a more
--- convenient constructor.
-data UpdatePolicy =
-  UpdatePolicy
-  { _updatePolicyAutoScalingReplacingUpdate :: Maybe AutoScalingReplacingUpdate
-  , _updatePolicyAutoScalingRollingUpdate :: Maybe AutoScalingRollingUpdate
-  , _updatePolicyAutoScalingScheduledAction :: Maybe AutoScalingScheduledAction
-  } deriving (Show, Generic)
-
-instance ToJSON UpdatePolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
-
-instance FromJSON UpdatePolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
-
--- | Constructor for 'UpdatePolicy' containing required fields as arguments.
-updatePolicy
-  :: UpdatePolicy
-updatePolicy  =
-  UpdatePolicy
-  { _updatePolicyAutoScalingReplacingUpdate = Nothing
-  , _updatePolicyAutoScalingRollingUpdate = Nothing
-  , _updatePolicyAutoScalingScheduledAction = Nothing
-  }
-
--- |
-upAutoScalingReplacingUpdate :: Lens' UpdatePolicy (Maybe AutoScalingReplacingUpdate)
-upAutoScalingReplacingUpdate = lens _updatePolicyAutoScalingReplacingUpdate (\s a -> s { _updatePolicyAutoScalingReplacingUpdate = a })
-
--- |
-upAutoScalingRollingUpdate :: Lens' UpdatePolicy (Maybe AutoScalingRollingUpdate)
-upAutoScalingRollingUpdate = lens _updatePolicyAutoScalingRollingUpdate (\s a -> s { _updatePolicyAutoScalingRollingUpdate = a })
-
--- |
-upAutoScalingScheduledAction :: Lens' UpdatePolicy (Maybe AutoScalingScheduledAction)
-upAutoScalingScheduledAction = lens _updatePolicyAutoScalingScheduledAction (\s a -> s { _updatePolicyAutoScalingScheduledAction = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/APIGatewayDeploymentStageDescription.hs b/library-gen/Stratosphere/ResourceProperties/APIGatewayDeploymentStageDescription.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/APIGatewayDeploymentStageDescription.hs
+++ /dev/null
@@ -1,143 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | StageDescription is a property of the AWS::ApiGateway::Deployment
--- resource that configures an Amazon API Gateway (API Gateway) deployment
--- stage.
-
-module Stratosphere.ResourceProperties.APIGatewayDeploymentStageDescription where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.APIGatewayDeploymentStageDescriptionMethodSetting
-
--- | Full data type definition for APIGatewayDeploymentStageDescription. See
--- 'apiGatewayDeploymentStageDescription' for a more convenient constructor.
-data APIGatewayDeploymentStageDescription =
-  APIGatewayDeploymentStageDescription
-  { _aPIGatewayDeploymentStageDescriptionCacheClusterEnabled :: Maybe (Val Bool')
-  , _aPIGatewayDeploymentStageDescriptionCacheClusterSize :: Maybe (Val Text)
-  , _aPIGatewayDeploymentStageDescriptionCacheDataEncrypted :: Maybe (Val Bool')
-  , _aPIGatewayDeploymentStageDescriptionCacheTtlInSeconds :: Maybe (Val Integer')
-  , _aPIGatewayDeploymentStageDescriptionCachingEnabled :: Maybe (Val Bool')
-  , _aPIGatewayDeploymentStageDescriptionClientCertificateId :: Maybe (Val Text)
-  , _aPIGatewayDeploymentStageDescriptionDataTraceEnabled :: Maybe (Val Bool')
-  , _aPIGatewayDeploymentStageDescriptionDescription :: Maybe (Val Text)
-  , _aPIGatewayDeploymentStageDescriptionLoggingLevel :: Maybe (Val Text)
-  , _aPIGatewayDeploymentStageDescriptionMethodSettings :: Maybe APIGatewayDeploymentStageDescriptionMethodSetting
-  , _aPIGatewayDeploymentStageDescriptionMetricsEnabled :: Maybe (Val Bool')
-  , _aPIGatewayDeploymentStageDescriptionStageName :: Maybe (Val Text)
-  , _aPIGatewayDeploymentStageDescriptionThrottlingBurstLimit :: Maybe (Val Integer')
-  , _aPIGatewayDeploymentStageDescriptionThrottlingRateLimit :: Maybe Double'
-  , _aPIGatewayDeploymentStageDescriptionVariables :: Maybe Object
-  } deriving (Show, Generic)
-
-instance ToJSON APIGatewayDeploymentStageDescription where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
-
-instance FromJSON APIGatewayDeploymentStageDescription where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
-
--- | Constructor for 'APIGatewayDeploymentStageDescription' containing
--- required fields as arguments.
-apiGatewayDeploymentStageDescription
-  :: APIGatewayDeploymentStageDescription
-apiGatewayDeploymentStageDescription  =
-  APIGatewayDeploymentStageDescription
-  { _aPIGatewayDeploymentStageDescriptionCacheClusterEnabled = Nothing
-  , _aPIGatewayDeploymentStageDescriptionCacheClusterSize = Nothing
-  , _aPIGatewayDeploymentStageDescriptionCacheDataEncrypted = Nothing
-  , _aPIGatewayDeploymentStageDescriptionCacheTtlInSeconds = Nothing
-  , _aPIGatewayDeploymentStageDescriptionCachingEnabled = Nothing
-  , _aPIGatewayDeploymentStageDescriptionClientCertificateId = Nothing
-  , _aPIGatewayDeploymentStageDescriptionDataTraceEnabled = Nothing
-  , _aPIGatewayDeploymentStageDescriptionDescription = Nothing
-  , _aPIGatewayDeploymentStageDescriptionLoggingLevel = Nothing
-  , _aPIGatewayDeploymentStageDescriptionMethodSettings = Nothing
-  , _aPIGatewayDeploymentStageDescriptionMetricsEnabled = Nothing
-  , _aPIGatewayDeploymentStageDescriptionStageName = Nothing
-  , _aPIGatewayDeploymentStageDescriptionThrottlingBurstLimit = Nothing
-  , _aPIGatewayDeploymentStageDescriptionThrottlingRateLimit = Nothing
-  , _aPIGatewayDeploymentStageDescriptionVariables = Nothing
-  }
-
--- | Indicates whether cache clustering is enabled for the stage.
-apigdsdCacheClusterEnabled :: Lens' APIGatewayDeploymentStageDescription (Maybe (Val Bool'))
-apigdsdCacheClusterEnabled = lens _aPIGatewayDeploymentStageDescriptionCacheClusterEnabled (\s a -> s { _aPIGatewayDeploymentStageDescriptionCacheClusterEnabled = a })
-
--- | The size of the stage's cache cluster.
-apigdsdCacheClusterSize :: Lens' APIGatewayDeploymentStageDescription (Maybe (Val Text))
-apigdsdCacheClusterSize = lens _aPIGatewayDeploymentStageDescriptionCacheClusterSize (\s a -> s { _aPIGatewayDeploymentStageDescriptionCacheClusterSize = a })
-
--- | Indicates whether the cached responses are encrypted.
-apigdsdCacheDataEncrypted :: Lens' APIGatewayDeploymentStageDescription (Maybe (Val Bool'))
-apigdsdCacheDataEncrypted = lens _aPIGatewayDeploymentStageDescriptionCacheDataEncrypted (\s a -> s { _aPIGatewayDeploymentStageDescriptionCacheDataEncrypted = a })
-
--- | The time-to-live (TTL) period, in seconds, that specifies how long API
--- Gateway caches responses.
-apigdsdCacheTtlInSeconds :: Lens' APIGatewayDeploymentStageDescription (Maybe (Val Integer'))
-apigdsdCacheTtlInSeconds = lens _aPIGatewayDeploymentStageDescriptionCacheTtlInSeconds (\s a -> s { _aPIGatewayDeploymentStageDescriptionCacheTtlInSeconds = a })
-
--- | Indicates whether responses are cached and returned for requests. You
--- must enable a cache cluster on the stage to cache responses. For more
--- information, see Enable API Gateway Caching in a Stage to Enhance API
--- Performance in the API Gateway Developer Guide.
-apigdsdCachingEnabled :: Lens' APIGatewayDeploymentStageDescription (Maybe (Val Bool'))
-apigdsdCachingEnabled = lens _aPIGatewayDeploymentStageDescriptionCachingEnabled (\s a -> s { _aPIGatewayDeploymentStageDescriptionCachingEnabled = a })
-
--- | The identifier of the client certificate that API Gateway uses to call
--- your integration endpoints in the stage.
-apigdsdClientCertificateId :: Lens' APIGatewayDeploymentStageDescription (Maybe (Val Text))
-apigdsdClientCertificateId = lens _aPIGatewayDeploymentStageDescriptionClientCertificateId (\s a -> s { _aPIGatewayDeploymentStageDescriptionClientCertificateId = a })
-
--- | Indicates whether data trace logging is enabled for methods in the stage.
--- API Gateway pushes these logs to Amazon CloudWatch Logs.
-apigdsdDataTraceEnabled :: Lens' APIGatewayDeploymentStageDescription (Maybe (Val Bool'))
-apigdsdDataTraceEnabled = lens _aPIGatewayDeploymentStageDescriptionDataTraceEnabled (\s a -> s { _aPIGatewayDeploymentStageDescriptionDataTraceEnabled = a })
-
--- | A description of the purpose of the stage.
-apigdsdDescription :: Lens' APIGatewayDeploymentStageDescription (Maybe (Val Text))
-apigdsdDescription = lens _aPIGatewayDeploymentStageDescriptionDescription (\s a -> s { _aPIGatewayDeploymentStageDescriptionDescription = a })
-
--- | The logging level for this method. For valid values, see the loggingLevel
--- property of the Stage resource in the Amazon API Gateway API Reference.
-apigdsdLoggingLevel :: Lens' APIGatewayDeploymentStageDescription (Maybe (Val Text))
-apigdsdLoggingLevel = lens _aPIGatewayDeploymentStageDescriptionLoggingLevel (\s a -> s { _aPIGatewayDeploymentStageDescriptionLoggingLevel = a })
-
--- | Configures settings for all of the stage's methods.
-apigdsdMethodSettings :: Lens' APIGatewayDeploymentStageDescription (Maybe APIGatewayDeploymentStageDescriptionMethodSetting)
-apigdsdMethodSettings = lens _aPIGatewayDeploymentStageDescriptionMethodSettings (\s a -> s { _aPIGatewayDeploymentStageDescriptionMethodSettings = a })
-
--- | Indicates whether Amazon CloudWatch metrics are enabled for methods in
--- the stage.
-apigdsdMetricsEnabled :: Lens' APIGatewayDeploymentStageDescription (Maybe (Val Bool'))
-apigdsdMetricsEnabled = lens _aPIGatewayDeploymentStageDescriptionMetricsEnabled (\s a -> s { _aPIGatewayDeploymentStageDescriptionMetricsEnabled = a })
-
--- | The name of the stage, which API Gateway uses as the first path segment
--- in the invoke Uniform Resource Identifier (URI).
-apigdsdStageName :: Lens' APIGatewayDeploymentStageDescription (Maybe (Val Text))
-apigdsdStageName = lens _aPIGatewayDeploymentStageDescriptionStageName (\s a -> s { _aPIGatewayDeploymentStageDescriptionStageName = a })
-
--- | The number of burst requests per second that API Gateway permits across
--- all APIs, stages, and methods in your AWS account. For more information,
--- see Manage API Request Throttling in the API Gateway Developer Guide.
-apigdsdThrottlingBurstLimit :: Lens' APIGatewayDeploymentStageDescription (Maybe (Val Integer'))
-apigdsdThrottlingBurstLimit = lens _aPIGatewayDeploymentStageDescriptionThrottlingBurstLimit (\s a -> s { _aPIGatewayDeploymentStageDescriptionThrottlingBurstLimit = a })
-
--- | The number of steady-state requests per second that API Gateway permits
--- across all APIs, stages, and methods in your AWS account. For more
--- information, see Manage API Request Throttling in the API Gateway Developer
--- Guide.
-apigdsdThrottlingRateLimit :: Lens' APIGatewayDeploymentStageDescription (Maybe Double')
-apigdsdThrottlingRateLimit = lens _aPIGatewayDeploymentStageDescriptionThrottlingRateLimit (\s a -> s { _aPIGatewayDeploymentStageDescriptionThrottlingRateLimit = a })
-
--- | A map that defines the stage variables. Variable names must consist of
--- alphanumeric characters, and the values must match the following regular
--- expression: [A-Za-z0-9-._~:/?#&amp;=,]+.
-apigdsdVariables :: Lens' APIGatewayDeploymentStageDescription (Maybe Object)
-apigdsdVariables = lens _aPIGatewayDeploymentStageDescriptionVariables (\s a -> s { _aPIGatewayDeploymentStageDescriptionVariables = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/APIGatewayDeploymentStageDescriptionMethodSetting.hs b/library-gen/Stratosphere/ResourceProperties/APIGatewayDeploymentStageDescriptionMethodSetting.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/APIGatewayDeploymentStageDescriptionMethodSetting.hs
+++ /dev/null
@@ -1,114 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | MethodSetting is a property of the Amazon API Gateway Deployment
--- StageDescription property that configures settings for all methods in an
--- Amazon API Gateway (API Gateway) stage.
-
-module Stratosphere.ResourceProperties.APIGatewayDeploymentStageDescriptionMethodSetting where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.Types
-
--- | Full data type definition for
--- APIGatewayDeploymentStageDescriptionMethodSetting. See
--- 'apiGatewayDeploymentStageDescriptionMethodSetting' for a more convenient
--- constructor.
-data APIGatewayDeploymentStageDescriptionMethodSetting =
-  APIGatewayDeploymentStageDescriptionMethodSetting
-  { _aPIGatewayDeploymentStageDescriptionMethodSettingCacheDataEncrypted :: Maybe (Val Bool')
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingCacheTtlInSeconds :: Maybe (Val Integer')
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingCachingEnabled :: Maybe (Val Bool')
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingDataTraceEnabled :: Maybe (Val Bool')
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingHttpMethod :: Maybe HttpMethod
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingLoggingLevel :: Maybe LoggingLevel
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingMetricsEnabled :: Maybe (Val Bool')
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingResourcePath :: Maybe (Val Text)
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingThrottlingBurstLimit :: Maybe (Val Integer')
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingThrottlingRateLimit :: Maybe Double'
-  } deriving (Show, Generic)
-
-instance ToJSON APIGatewayDeploymentStageDescriptionMethodSetting where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 50, omitNothingFields = True }
-
-instance FromJSON APIGatewayDeploymentStageDescriptionMethodSetting where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 50, omitNothingFields = True }
-
--- | Constructor for 'APIGatewayDeploymentStageDescriptionMethodSetting'
--- containing required fields as arguments.
-apiGatewayDeploymentStageDescriptionMethodSetting
-  :: APIGatewayDeploymentStageDescriptionMethodSetting
-apiGatewayDeploymentStageDescriptionMethodSetting  =
-  APIGatewayDeploymentStageDescriptionMethodSetting
-  { _aPIGatewayDeploymentStageDescriptionMethodSettingCacheDataEncrypted = Nothing
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingCacheTtlInSeconds = Nothing
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingCachingEnabled = Nothing
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingDataTraceEnabled = Nothing
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingHttpMethod = Nothing
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingLoggingLevel = Nothing
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingMetricsEnabled = Nothing
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingResourcePath = Nothing
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingThrottlingBurstLimit = Nothing
-  , _aPIGatewayDeploymentStageDescriptionMethodSettingThrottlingRateLimit = Nothing
-  }
-
--- | Indicates whether the cached responses are encrypted.
-apigdsdmsCacheDataEncrypted :: Lens' APIGatewayDeploymentStageDescriptionMethodSetting (Maybe (Val Bool'))
-apigdsdmsCacheDataEncrypted = lens _aPIGatewayDeploymentStageDescriptionMethodSettingCacheDataEncrypted (\s a -> s { _aPIGatewayDeploymentStageDescriptionMethodSettingCacheDataEncrypted = a })
-
--- | The time-to-live (TTL) period, in seconds, that specifies how long API
--- Gateway caches responses.
-apigdsdmsCacheTtlInSeconds :: Lens' APIGatewayDeploymentStageDescriptionMethodSetting (Maybe (Val Integer'))
-apigdsdmsCacheTtlInSeconds = lens _aPIGatewayDeploymentStageDescriptionMethodSettingCacheTtlInSeconds (\s a -> s { _aPIGatewayDeploymentStageDescriptionMethodSettingCacheTtlInSeconds = a })
-
--- | Indicates whether responses are cached and returned for requests. You
--- must enable a cache cluster on the stage to cache responses. For more
--- information, see Enable API Gateway Caching in a Stage to Enhance API
--- Performance in the API Gateway Developer Guide.
-apigdsdmsCachingEnabled :: Lens' APIGatewayDeploymentStageDescriptionMethodSetting (Maybe (Val Bool'))
-apigdsdmsCachingEnabled = lens _aPIGatewayDeploymentStageDescriptionMethodSettingCachingEnabled (\s a -> s { _aPIGatewayDeploymentStageDescriptionMethodSettingCachingEnabled = a })
-
--- | Indicates whether data trace logging is enabled for methods in the stage.
--- API Gateway pushes these logs to Amazon CloudWatch Logs.
-apigdsdmsDataTraceEnabled :: Lens' APIGatewayDeploymentStageDescriptionMethodSetting (Maybe (Val Bool'))
-apigdsdmsDataTraceEnabled = lens _aPIGatewayDeploymentStageDescriptionMethodSettingDataTraceEnabled (\s a -> s { _aPIGatewayDeploymentStageDescriptionMethodSettingDataTraceEnabled = a })
-
--- | The HTTP method.
-apigdsdmsHttpMethod :: Lens' APIGatewayDeploymentStageDescriptionMethodSetting (Maybe HttpMethod)
-apigdsdmsHttpMethod = lens _aPIGatewayDeploymentStageDescriptionMethodSettingHttpMethod (\s a -> s { _aPIGatewayDeploymentStageDescriptionMethodSettingHttpMethod = a })
-
--- | The logging level for this method. For valid values, see the loggingLevel
--- property of the Stage resource in the Amazon API Gateway API Reference.
-apigdsdmsLoggingLevel :: Lens' APIGatewayDeploymentStageDescriptionMethodSetting (Maybe LoggingLevel)
-apigdsdmsLoggingLevel = lens _aPIGatewayDeploymentStageDescriptionMethodSettingLoggingLevel (\s a -> s { _aPIGatewayDeploymentStageDescriptionMethodSettingLoggingLevel = a })
-
--- | Indicates whether Amazon CloudWatch metrics are enabled for methods in
--- the stage.
-apigdsdmsMetricsEnabled :: Lens' APIGatewayDeploymentStageDescriptionMethodSetting (Maybe (Val Bool'))
-apigdsdmsMetricsEnabled = lens _aPIGatewayDeploymentStageDescriptionMethodSettingMetricsEnabled (\s a -> s { _aPIGatewayDeploymentStageDescriptionMethodSettingMetricsEnabled = a })
-
--- | The resource path for this method. Forward slashes (/) are encoded as ~1
--- and the initial slash must include a forward slash. For example, the path
--- value /resource/subresource must be encoded as /~1resource~1subresource. To
--- specify the root path, use only a slash (/).
-apigdsdmsResourcePath :: Lens' APIGatewayDeploymentStageDescriptionMethodSetting (Maybe (Val Text))
-apigdsdmsResourcePath = lens _aPIGatewayDeploymentStageDescriptionMethodSettingResourcePath (\s a -> s { _aPIGatewayDeploymentStageDescriptionMethodSettingResourcePath = a })
-
--- | The number of burst requests per second that API Gateway permits across
--- all APIs, stages, and methods in your AWS account. For more information,
--- see Manage API Request Throttling in the API Gateway Developer Guide.
-apigdsdmsThrottlingBurstLimit :: Lens' APIGatewayDeploymentStageDescriptionMethodSetting (Maybe (Val Integer'))
-apigdsdmsThrottlingBurstLimit = lens _aPIGatewayDeploymentStageDescriptionMethodSettingThrottlingBurstLimit (\s a -> s { _aPIGatewayDeploymentStageDescriptionMethodSettingThrottlingBurstLimit = a })
-
--- | The number of steady-state requests per second that API Gateway permits
--- across all APIs, stages, and methods in your AWS account. For more
--- information, see Manage API Request Throttling in the API Gateway Developer
--- Guide.
-apigdsdmsThrottlingRateLimit :: Lens' APIGatewayDeploymentStageDescriptionMethodSetting (Maybe Double')
-apigdsdmsThrottlingRateLimit = lens _aPIGatewayDeploymentStageDescriptionMethodSettingThrottlingRateLimit (\s a -> s { _aPIGatewayDeploymentStageDescriptionMethodSettingThrottlingRateLimit = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AccessLoggingPolicy.hs b/library-gen/Stratosphere/ResourceProperties/AccessLoggingPolicy.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/AccessLoggingPolicy.hs
+++ /dev/null
@@ -1,65 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AccessLoggingPolicy property describes where and how access logs are
--- stored for the AWS::ElasticLoadBalancing::LoadBalancer resource.
-
-module Stratosphere.ResourceProperties.AccessLoggingPolicy where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for AccessLoggingPolicy. See
--- 'accessLoggingPolicy' for a more convenient constructor.
-data AccessLoggingPolicy =
-  AccessLoggingPolicy
-  { _accessLoggingPolicyEmitInterval :: Maybe (Val Integer')
-  , _accessLoggingPolicyEnabled :: Val Bool'
-  , _accessLoggingPolicyS3BucketName :: Val Text
-  , _accessLoggingPolicyS3BucketPrefix :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON AccessLoggingPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
-
-instance FromJSON AccessLoggingPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
-
--- | Constructor for 'AccessLoggingPolicy' containing required fields as
--- arguments.
-accessLoggingPolicy
-  :: Val Bool' -- ^ 'alpEnabled'
-  -> Val Text -- ^ 'alpS3BucketName'
-  -> AccessLoggingPolicy
-accessLoggingPolicy enabledarg s3BucketNamearg =
-  AccessLoggingPolicy
-  { _accessLoggingPolicyEmitInterval = Nothing
-  , _accessLoggingPolicyEnabled = enabledarg
-  , _accessLoggingPolicyS3BucketName = s3BucketNamearg
-  , _accessLoggingPolicyS3BucketPrefix = Nothing
-  }
-
--- | The interval for publishing access logs in minutes. You can specify an
--- interval of either 5 minutes or 60 minutes.
-alpEmitInterval :: Lens' AccessLoggingPolicy (Maybe (Val Integer'))
-alpEmitInterval = lens _accessLoggingPolicyEmitInterval (\s a -> s { _accessLoggingPolicyEmitInterval = a })
-
--- | Whether logging is enabled for the load balancer.
-alpEnabled :: Lens' AccessLoggingPolicy (Val Bool')
-alpEnabled = lens _accessLoggingPolicyEnabled (\s a -> s { _accessLoggingPolicyEnabled = a })
-
--- | The name of an Amazon S3 bucket where access log files are stored.
-alpS3BucketName :: Lens' AccessLoggingPolicy (Val Text)
-alpS3BucketName = lens _accessLoggingPolicyS3BucketName (\s a -> s { _accessLoggingPolicyS3BucketName = a })
-
--- | A prefix for the all log object keys, such as my-load-balancer-logs/prod.
--- If you store log files from multiple sources in a single bucket, you can
--- use a prefix to distinguish each log file and its source.
-alpS3BucketPrefix :: Lens' AccessLoggingPolicy (Maybe (Val Text))
-alpS3BucketPrefix = lens _accessLoggingPolicyS3BucketPrefix (\s a -> s { _accessLoggingPolicyS3BucketPrefix = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AliasTarget.hs b/library-gen/Stratosphere/ResourceProperties/AliasTarget.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/AliasTarget.hs
+++ /dev/null
@@ -1,66 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | AliasTarget is a property of the AWS::Route53::RecordSet resource. For
--- more information about alias resource record sets, see Creating Alias
--- Resource Record Sets in the Amazon Route 53 Developer Guide.
-
-module Stratosphere.ResourceProperties.AliasTarget where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for AliasTarget. See 'aliasTarget' for a more
--- convenient constructor.
-data AliasTarget =
-  AliasTarget
-  { _aliasTargetDNSName :: Val Text
-  , _aliasTargetEvaluateTargetHealth :: Maybe (Val Bool')
-  , _aliasTargetHostedZoneId :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON AliasTarget where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
-
-instance FromJSON AliasTarget where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
-
--- | Constructor for 'AliasTarget' containing required fields as arguments.
-aliasTarget
-  :: Val Text -- ^ 'atDNSName'
-  -> Val Text -- ^ 'atHostedZoneId'
-  -> AliasTarget
-aliasTarget dNSNamearg hostedZoneIdarg =
-  AliasTarget
-  { _aliasTargetDNSName = dNSNamearg
-  , _aliasTargetEvaluateTargetHealth = Nothing
-  , _aliasTargetHostedZoneId = hostedZoneIdarg
-  }
-
--- | The DNS name of the load balancer, the domain name of the CloudFront
--- distribution, the website endpoint of the Amazon S3 bucket, or another
--- record set in the same hosted zone that is the target of the alias. Type:
--- String
-atDNSName :: Lens' AliasTarget (Val Text)
-atDNSName = lens _aliasTargetDNSName (\s a -> s { _aliasTargetDNSName = a })
-
--- | Whether Amazon Route 53 checks the health of the resource record sets in
--- the alias target when responding to DNS queries. For more information about
--- using this property, see EvaluateTargetHealth in the Amazon Route 53 API
--- Reference. Type: Boolean
-atEvaluateTargetHealth :: Lens' AliasTarget (Maybe (Val Bool'))
-atEvaluateTargetHealth = lens _aliasTargetEvaluateTargetHealth (\s a -> s { _aliasTargetEvaluateTargetHealth = a })
-
--- | The hosted zone ID. For load balancers, use the canonical hosted zone ID
--- of the load balancer. For Amazon S3, use the hosted zone ID for your
--- bucket's website endpoint. For CloudFront, use Z2FDTNDATAQYW2. For
--- examples, see Example: Creating Alias Resource Record Sets in the Amazon
--- Route 53 API Reference. Type: String
-atHostedZoneId :: Lens' AliasTarget (Val Text)
-atHostedZoneId = lens _aliasTargetHostedZoneId (\s a -> s { _aliasTargetHostedZoneId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayApiKeyStageKey.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayApiKeyStageKey.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayApiKeyStageKey.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-apikey-stagekey.html
+
+module Stratosphere.ResourceProperties.ApiGatewayApiKeyStageKey where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ApiGatewayApiKeyStageKey. See
+-- | 'apiGatewayApiKeyStageKey' for a more convenient constructor.
+data ApiGatewayApiKeyStageKey =
+  ApiGatewayApiKeyStageKey
+  { _apiGatewayApiKeyStageKeyRestApiId :: Maybe (Val Text)
+  , _apiGatewayApiKeyStageKeyStageName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ApiGatewayApiKeyStageKey where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+instance FromJSON ApiGatewayApiKeyStageKey where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+-- | Constructor for 'ApiGatewayApiKeyStageKey' containing required fields as
+-- | arguments.
+apiGatewayApiKeyStageKey
+  :: ApiGatewayApiKeyStageKey
+apiGatewayApiKeyStageKey  =
+  ApiGatewayApiKeyStageKey
+  { _apiGatewayApiKeyStageKeyRestApiId = Nothing
+  , _apiGatewayApiKeyStageKeyStageName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-apikey-stagekey.html#cfn-apigateway-apikey-stagekey-restapiid
+agakskRestApiId :: Lens' ApiGatewayApiKeyStageKey (Maybe (Val Text))
+agakskRestApiId = lens _apiGatewayApiKeyStageKeyRestApiId (\s a -> s { _apiGatewayApiKeyStageKeyRestApiId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-apikey-stagekey.html#cfn-apigateway-apikey-stagekey-stagename
+agakskStageName :: Lens' ApiGatewayApiKeyStageKey (Maybe (Val Text))
+agakskStageName = lens _apiGatewayApiKeyStageKeyStageName (\s a -> s { _apiGatewayApiKeyStageKeyStageName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayDeploymentMethodSetting.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayDeploymentMethodSetting.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayDeploymentMethodSetting.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription-methodsetting.html
+
+module Stratosphere.ResourceProperties.ApiGatewayDeploymentMethodSetting where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.Types
+
+-- | Full data type definition for ApiGatewayDeploymentMethodSetting. See
+-- | 'apiGatewayDeploymentMethodSetting' for a more convenient constructor.
+data ApiGatewayDeploymentMethodSetting =
+  ApiGatewayDeploymentMethodSetting
+  { _apiGatewayDeploymentMethodSettingCacheDataEncrypted :: Maybe (Val Bool')
+  , _apiGatewayDeploymentMethodSettingCacheTtlInSeconds :: Maybe (Val Integer')
+  , _apiGatewayDeploymentMethodSettingCachingEnabled :: Maybe (Val Bool')
+  , _apiGatewayDeploymentMethodSettingDataTraceEnabled :: Maybe (Val Bool')
+  , _apiGatewayDeploymentMethodSettingHttpMethod :: Maybe (Val HttpMethod)
+  , _apiGatewayDeploymentMethodSettingLoggingLevel :: Maybe (Val LoggingLevel)
+  , _apiGatewayDeploymentMethodSettingMetricsEnabled :: Maybe (Val Bool')
+  , _apiGatewayDeploymentMethodSettingResourcePath :: Maybe (Val Text)
+  , _apiGatewayDeploymentMethodSettingThrottlingBurstLimit :: Maybe (Val Integer')
+  , _apiGatewayDeploymentMethodSettingThrottlingRateLimit :: Maybe (Val Double')
+  } deriving (Show, Generic)
+
+instance ToJSON ApiGatewayDeploymentMethodSetting where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON ApiGatewayDeploymentMethodSetting where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'ApiGatewayDeploymentMethodSetting' containing required
+-- | fields as arguments.
+apiGatewayDeploymentMethodSetting
+  :: ApiGatewayDeploymentMethodSetting
+apiGatewayDeploymentMethodSetting  =
+  ApiGatewayDeploymentMethodSetting
+  { _apiGatewayDeploymentMethodSettingCacheDataEncrypted = Nothing
+  , _apiGatewayDeploymentMethodSettingCacheTtlInSeconds = Nothing
+  , _apiGatewayDeploymentMethodSettingCachingEnabled = Nothing
+  , _apiGatewayDeploymentMethodSettingDataTraceEnabled = Nothing
+  , _apiGatewayDeploymentMethodSettingHttpMethod = Nothing
+  , _apiGatewayDeploymentMethodSettingLoggingLevel = Nothing
+  , _apiGatewayDeploymentMethodSettingMetricsEnabled = Nothing
+  , _apiGatewayDeploymentMethodSettingResourcePath = Nothing
+  , _apiGatewayDeploymentMethodSettingThrottlingBurstLimit = Nothing
+  , _apiGatewayDeploymentMethodSettingThrottlingRateLimit = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription-methodsetting.html#cfn-apigateway-deployment-stagedescription-methodsetting-cachedataencrypted
+agdmsCacheDataEncrypted :: Lens' ApiGatewayDeploymentMethodSetting (Maybe (Val Bool'))
+agdmsCacheDataEncrypted = lens _apiGatewayDeploymentMethodSettingCacheDataEncrypted (\s a -> s { _apiGatewayDeploymentMethodSettingCacheDataEncrypted = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription-methodsetting.html#cfn-apigateway-deployment-stagedescription-methodsetting-cachettlinseconds
+agdmsCacheTtlInSeconds :: Lens' ApiGatewayDeploymentMethodSetting (Maybe (Val Integer'))
+agdmsCacheTtlInSeconds = lens _apiGatewayDeploymentMethodSettingCacheTtlInSeconds (\s a -> s { _apiGatewayDeploymentMethodSettingCacheTtlInSeconds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription-methodsetting.html#cfn-apigateway-deployment-stagedescription-methodsetting-cachingenabled
+agdmsCachingEnabled :: Lens' ApiGatewayDeploymentMethodSetting (Maybe (Val Bool'))
+agdmsCachingEnabled = lens _apiGatewayDeploymentMethodSettingCachingEnabled (\s a -> s { _apiGatewayDeploymentMethodSettingCachingEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription-methodsetting.html#cfn-apigateway-deployment-stagedescription-methodsetting-datatraceenabled
+agdmsDataTraceEnabled :: Lens' ApiGatewayDeploymentMethodSetting (Maybe (Val Bool'))
+agdmsDataTraceEnabled = lens _apiGatewayDeploymentMethodSettingDataTraceEnabled (\s a -> s { _apiGatewayDeploymentMethodSettingDataTraceEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription-methodsetting.html#cfn-apigateway-deployment-stagedescription-methodsetting-httpmethod
+agdmsHttpMethod :: Lens' ApiGatewayDeploymentMethodSetting (Maybe (Val HttpMethod))
+agdmsHttpMethod = lens _apiGatewayDeploymentMethodSettingHttpMethod (\s a -> s { _apiGatewayDeploymentMethodSettingHttpMethod = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription-methodsetting.html#cfn-apigateway-deployment-stagedescription-methodsetting-logginglevel
+agdmsLoggingLevel :: Lens' ApiGatewayDeploymentMethodSetting (Maybe (Val LoggingLevel))
+agdmsLoggingLevel = lens _apiGatewayDeploymentMethodSettingLoggingLevel (\s a -> s { _apiGatewayDeploymentMethodSettingLoggingLevel = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription-methodsetting.html#cfn-apigateway-deployment-stagedescription-methodsetting-metricsenabled
+agdmsMetricsEnabled :: Lens' ApiGatewayDeploymentMethodSetting (Maybe (Val Bool'))
+agdmsMetricsEnabled = lens _apiGatewayDeploymentMethodSettingMetricsEnabled (\s a -> s { _apiGatewayDeploymentMethodSettingMetricsEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription-methodsetting.html#cfn-apigateway-deployment-stagedescription-methodsetting-resourcepath
+agdmsResourcePath :: Lens' ApiGatewayDeploymentMethodSetting (Maybe (Val Text))
+agdmsResourcePath = lens _apiGatewayDeploymentMethodSettingResourcePath (\s a -> s { _apiGatewayDeploymentMethodSettingResourcePath = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription-methodsetting.html#cfn-apigateway-deployment-stagedescription-methodsetting-throttlingburstlimit
+agdmsThrottlingBurstLimit :: Lens' ApiGatewayDeploymentMethodSetting (Maybe (Val Integer'))
+agdmsThrottlingBurstLimit = lens _apiGatewayDeploymentMethodSettingThrottlingBurstLimit (\s a -> s { _apiGatewayDeploymentMethodSettingThrottlingBurstLimit = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription-methodsetting.html#cfn-apigateway-deployment-stagedescription-methodsetting-throttlingratelimit
+agdmsThrottlingRateLimit :: Lens' ApiGatewayDeploymentMethodSetting (Maybe (Val Double'))
+agdmsThrottlingRateLimit = lens _apiGatewayDeploymentMethodSettingThrottlingRateLimit (\s a -> s { _apiGatewayDeploymentMethodSettingThrottlingRateLimit = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayDeploymentStageDescription.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayDeploymentStageDescription.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayDeploymentStageDescription.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html
+
+module Stratosphere.ResourceProperties.ApiGatewayDeploymentStageDescription where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.Types
+import Stratosphere.ResourceProperties.ApiGatewayDeploymentMethodSetting
+
+-- | Full data type definition for ApiGatewayDeploymentStageDescription. See
+-- | 'apiGatewayDeploymentStageDescription' for a more convenient constructor.
+data ApiGatewayDeploymentStageDescription =
+  ApiGatewayDeploymentStageDescription
+  { _apiGatewayDeploymentStageDescriptionCacheClusterEnabled :: Maybe (Val Bool')
+  , _apiGatewayDeploymentStageDescriptionCacheClusterSize :: Maybe (Val Text)
+  , _apiGatewayDeploymentStageDescriptionCacheDataEncrypted :: Maybe (Val Bool')
+  , _apiGatewayDeploymentStageDescriptionCacheTtlInSeconds :: Maybe (Val Integer')
+  , _apiGatewayDeploymentStageDescriptionCachingEnabled :: Maybe (Val Bool')
+  , _apiGatewayDeploymentStageDescriptionClientCertificateId :: Maybe (Val Text)
+  , _apiGatewayDeploymentStageDescriptionDataTraceEnabled :: Maybe (Val Bool')
+  , _apiGatewayDeploymentStageDescriptionDescription :: Maybe (Val Text)
+  , _apiGatewayDeploymentStageDescriptionLoggingLevel :: Maybe (Val LoggingLevel)
+  , _apiGatewayDeploymentStageDescriptionMethodSettings :: Maybe [ApiGatewayDeploymentMethodSetting]
+  , _apiGatewayDeploymentStageDescriptionMetricsEnabled :: Maybe (Val Bool')
+  , _apiGatewayDeploymentStageDescriptionStageName :: Maybe (Val Text)
+  , _apiGatewayDeploymentStageDescriptionThrottlingBurstLimit :: Maybe (Val Integer')
+  , _apiGatewayDeploymentStageDescriptionThrottlingRateLimit :: Maybe (Val Double')
+  , _apiGatewayDeploymentStageDescriptionVariables :: Maybe Object
+  } deriving (Show, Generic)
+
+instance ToJSON ApiGatewayDeploymentStageDescription where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+instance FromJSON ApiGatewayDeploymentStageDescription where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+-- | Constructor for 'ApiGatewayDeploymentStageDescription' containing
+-- | required fields as arguments.
+apiGatewayDeploymentStageDescription
+  :: ApiGatewayDeploymentStageDescription
+apiGatewayDeploymentStageDescription  =
+  ApiGatewayDeploymentStageDescription
+  { _apiGatewayDeploymentStageDescriptionCacheClusterEnabled = Nothing
+  , _apiGatewayDeploymentStageDescriptionCacheClusterSize = Nothing
+  , _apiGatewayDeploymentStageDescriptionCacheDataEncrypted = Nothing
+  , _apiGatewayDeploymentStageDescriptionCacheTtlInSeconds = Nothing
+  , _apiGatewayDeploymentStageDescriptionCachingEnabled = Nothing
+  , _apiGatewayDeploymentStageDescriptionClientCertificateId = Nothing
+  , _apiGatewayDeploymentStageDescriptionDataTraceEnabled = Nothing
+  , _apiGatewayDeploymentStageDescriptionDescription = Nothing
+  , _apiGatewayDeploymentStageDescriptionLoggingLevel = Nothing
+  , _apiGatewayDeploymentStageDescriptionMethodSettings = Nothing
+  , _apiGatewayDeploymentStageDescriptionMetricsEnabled = Nothing
+  , _apiGatewayDeploymentStageDescriptionStageName = Nothing
+  , _apiGatewayDeploymentStageDescriptionThrottlingBurstLimit = Nothing
+  , _apiGatewayDeploymentStageDescriptionThrottlingRateLimit = Nothing
+  , _apiGatewayDeploymentStageDescriptionVariables = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-cacheclusterenabled
+agdsdCacheClusterEnabled :: Lens' ApiGatewayDeploymentStageDescription (Maybe (Val Bool'))
+agdsdCacheClusterEnabled = lens _apiGatewayDeploymentStageDescriptionCacheClusterEnabled (\s a -> s { _apiGatewayDeploymentStageDescriptionCacheClusterEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-cacheclustersize
+agdsdCacheClusterSize :: Lens' ApiGatewayDeploymentStageDescription (Maybe (Val Text))
+agdsdCacheClusterSize = lens _apiGatewayDeploymentStageDescriptionCacheClusterSize (\s a -> s { _apiGatewayDeploymentStageDescriptionCacheClusterSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-cachedataencrypted
+agdsdCacheDataEncrypted :: Lens' ApiGatewayDeploymentStageDescription (Maybe (Val Bool'))
+agdsdCacheDataEncrypted = lens _apiGatewayDeploymentStageDescriptionCacheDataEncrypted (\s a -> s { _apiGatewayDeploymentStageDescriptionCacheDataEncrypted = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-cachettlinseconds
+agdsdCacheTtlInSeconds :: Lens' ApiGatewayDeploymentStageDescription (Maybe (Val Integer'))
+agdsdCacheTtlInSeconds = lens _apiGatewayDeploymentStageDescriptionCacheTtlInSeconds (\s a -> s { _apiGatewayDeploymentStageDescriptionCacheTtlInSeconds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-cachingenabled
+agdsdCachingEnabled :: Lens' ApiGatewayDeploymentStageDescription (Maybe (Val Bool'))
+agdsdCachingEnabled = lens _apiGatewayDeploymentStageDescriptionCachingEnabled (\s a -> s { _apiGatewayDeploymentStageDescriptionCachingEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-clientcertificateid
+agdsdClientCertificateId :: Lens' ApiGatewayDeploymentStageDescription (Maybe (Val Text))
+agdsdClientCertificateId = lens _apiGatewayDeploymentStageDescriptionClientCertificateId (\s a -> s { _apiGatewayDeploymentStageDescriptionClientCertificateId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-datatraceenabled
+agdsdDataTraceEnabled :: Lens' ApiGatewayDeploymentStageDescription (Maybe (Val Bool'))
+agdsdDataTraceEnabled = lens _apiGatewayDeploymentStageDescriptionDataTraceEnabled (\s a -> s { _apiGatewayDeploymentStageDescriptionDataTraceEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-description
+agdsdDescription :: Lens' ApiGatewayDeploymentStageDescription (Maybe (Val Text))
+agdsdDescription = lens _apiGatewayDeploymentStageDescriptionDescription (\s a -> s { _apiGatewayDeploymentStageDescriptionDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-logginglevel
+agdsdLoggingLevel :: Lens' ApiGatewayDeploymentStageDescription (Maybe (Val LoggingLevel))
+agdsdLoggingLevel = lens _apiGatewayDeploymentStageDescriptionLoggingLevel (\s a -> s { _apiGatewayDeploymentStageDescriptionLoggingLevel = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-methodsettings
+agdsdMethodSettings :: Lens' ApiGatewayDeploymentStageDescription (Maybe [ApiGatewayDeploymentMethodSetting])
+agdsdMethodSettings = lens _apiGatewayDeploymentStageDescriptionMethodSettings (\s a -> s { _apiGatewayDeploymentStageDescriptionMethodSettings = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-metricsenabled
+agdsdMetricsEnabled :: Lens' ApiGatewayDeploymentStageDescription (Maybe (Val Bool'))
+agdsdMetricsEnabled = lens _apiGatewayDeploymentStageDescriptionMetricsEnabled (\s a -> s { _apiGatewayDeploymentStageDescriptionMetricsEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-stagename
+agdsdStageName :: Lens' ApiGatewayDeploymentStageDescription (Maybe (Val Text))
+agdsdStageName = lens _apiGatewayDeploymentStageDescriptionStageName (\s a -> s { _apiGatewayDeploymentStageDescriptionStageName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-throttlingburstlimit
+agdsdThrottlingBurstLimit :: Lens' ApiGatewayDeploymentStageDescription (Maybe (Val Integer'))
+agdsdThrottlingBurstLimit = lens _apiGatewayDeploymentStageDescriptionThrottlingBurstLimit (\s a -> s { _apiGatewayDeploymentStageDescriptionThrottlingBurstLimit = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-throttlingratelimit
+agdsdThrottlingRateLimit :: Lens' ApiGatewayDeploymentStageDescription (Maybe (Val Double'))
+agdsdThrottlingRateLimit = lens _apiGatewayDeploymentStageDescriptionThrottlingRateLimit (\s a -> s { _apiGatewayDeploymentStageDescriptionThrottlingRateLimit = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-variables
+agdsdVariables :: Lens' ApiGatewayDeploymentStageDescription (Maybe Object)
+agdsdVariables = lens _apiGatewayDeploymentStageDescriptionVariables (\s a -> s { _apiGatewayDeploymentStageDescriptionVariables = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayIntegration.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayIntegration.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayIntegration.hs
+++ /dev/null
@@ -1,137 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Integration is a property of the AWS::ApiGateway::Method resource that
--- specifies information about the target back end that an Amazon API Gateway
--- (API Gateway) method calls.
-
-module Stratosphere.ResourceProperties.ApiGatewayIntegration where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.ApiGatewayIntegrationResponse
-import Stratosphere.Types
-
--- | Full data type definition for ApiGatewayIntegration. See
--- 'apiGatewayIntegration' for a more convenient constructor.
-data ApiGatewayIntegration =
-  ApiGatewayIntegration
-  { _apiGatewayIntegrationCacheKeyParameters :: Maybe [Val Text]
-  , _apiGatewayIntegrationCacheNamespace :: Maybe (Val Text)
-  , _apiGatewayIntegrationCredentials :: Maybe (Val Text)
-  , _apiGatewayIntegrationIntegrationHttpMethod :: Maybe HttpMethod
-  , _apiGatewayIntegrationIntegrationResponses :: Maybe [ApiGatewayIntegrationResponse]
-  , _apiGatewayIntegrationPassthroughBehavior :: Maybe PassthroughBehavior
-  , _apiGatewayIntegrationRequestParameters :: Maybe Object
-  , _apiGatewayIntegrationRequestTemplates :: Maybe Object
-  , _apiGatewayIntegrationType :: ApiBackendType
-  , _apiGatewayIntegrationUri :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON ApiGatewayIntegration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
-
-instance FromJSON ApiGatewayIntegration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
-
--- | Constructor for 'ApiGatewayIntegration' containing required fields as
--- arguments.
-apiGatewayIntegration
-  :: ApiBackendType -- ^ 'agiType'
-  -> ApiGatewayIntegration
-apiGatewayIntegration typearg =
-  ApiGatewayIntegration
-  { _apiGatewayIntegrationCacheKeyParameters = Nothing
-  , _apiGatewayIntegrationCacheNamespace = Nothing
-  , _apiGatewayIntegrationCredentials = Nothing
-  , _apiGatewayIntegrationIntegrationHttpMethod = Nothing
-  , _apiGatewayIntegrationIntegrationResponses = Nothing
-  , _apiGatewayIntegrationPassthroughBehavior = Nothing
-  , _apiGatewayIntegrationRequestParameters = Nothing
-  , _apiGatewayIntegrationRequestTemplates = Nothing
-  , _apiGatewayIntegrationType = typearg
-  , _apiGatewayIntegrationUri = Nothing
-  }
-
--- | A list of request parameters whose values API Gateway will cache.
-agiCacheKeyParameters :: Lens' ApiGatewayIntegration (Maybe [Val Text])
-agiCacheKeyParameters = lens _apiGatewayIntegrationCacheKeyParameters (\s a -> s { _apiGatewayIntegrationCacheKeyParameters = a })
-
--- | An API-specific tag group of related cached parameters.
-agiCacheNamespace :: Lens' ApiGatewayIntegration (Maybe (Val Text))
-agiCacheNamespace = lens _apiGatewayIntegrationCacheNamespace (\s a -> s { _apiGatewayIntegrationCacheNamespace = a })
-
--- | The credentials required for the integration. To specify an AWS Identity
--- and Access Management (IAM) role that API Gateway assumes, specify the
--- role's Amazon Resource Name (ARN). To require that the caller's identity be
--- passed through from the request, specify arn:aws:iam::*:user/*. To use
--- resource-based permissions on the AWS Lambda (Lambda) function, don't
--- specify this property. Use the AWS::Lambda::Permission resource to permit
--- API Gateway to call the function. For more information, see Allow Amazon
--- API Gateway to Invoke a Lambda Function in the AWS Lambda Developer Guide.
-agiCredentials :: Lens' ApiGatewayIntegration (Maybe (Val Text))
-agiCredentials = lens _apiGatewayIntegrationCredentials (\s a -> s { _apiGatewayIntegrationCredentials = a })
-
--- | The integration's HTTP method type.
-agiIntegrationHttpMethod :: Lens' ApiGatewayIntegration (Maybe HttpMethod)
-agiIntegrationHttpMethod = lens _apiGatewayIntegrationIntegrationHttpMethod (\s a -> s { _apiGatewayIntegrationIntegrationHttpMethod = a })
-
--- | The response that API Gateway provides after a method's back end
--- completes processing a request. API Gateway intercepts the back end's
--- response so that you can control how API Gateway surfaces back-end
--- responses. For example, you can map the back-end status codes to codes that
--- you define.
-agiIntegrationResponses :: Lens' ApiGatewayIntegration (Maybe [ApiGatewayIntegrationResponse])
-agiIntegrationResponses = lens _apiGatewayIntegrationIntegrationResponses (\s a -> s { _apiGatewayIntegrationIntegrationResponses = a })
-
--- | Indicates when API Gateway passes requests to the targeted back end. This
--- behavior depends on the request's Content-Type header and whether you
--- defined a mapping template for it. For more information and valid values,
--- see the passthroughBehavior field in the API Gateway API Reference.
-agiPassthroughBehavior :: Lens' ApiGatewayIntegration (Maybe PassthroughBehavior)
-agiPassthroughBehavior = lens _apiGatewayIntegrationPassthroughBehavior (\s a -> s { _apiGatewayIntegrationPassthroughBehavior = a })
-
--- | The request parameters that API Gateway sends with the back-end request.
--- Specify request parameters as key-value pairs (string-to-string maps), with
--- a destination as the key and a source as the value. Specify the destination
--- using the following pattern integration.request.location.name, where
--- location is querystring, path, or header, and name is a valid, unique
--- parameter name. The source must be an existing method request parameter or
--- a static value. Static values must be enclosed in single quotation marks
--- and pre-encoded based on their destination in the request.
-agiRequestParameters :: Lens' ApiGatewayIntegration (Maybe Object)
-agiRequestParameters = lens _apiGatewayIntegrationRequestParameters (\s a -> s { _apiGatewayIntegrationRequestParameters = a })
-
--- | A map of Apache Velocity templates that are applied on the request
--- payload. The template that API Gateway uses is based on the value of the
--- Content-Type header sent by the client. The content type value is the key,
--- and the template is the value (specified as a string), such as the
--- following snippet: For more information about templates, see API Gateway
--- API Request and Response Payload-Mapping Template Reference in the API
--- Gateway Developer Guide.
-agiRequestTemplates :: Lens' ApiGatewayIntegration (Maybe Object)
-agiRequestTemplates = lens _apiGatewayIntegrationRequestTemplates (\s a -> s { _apiGatewayIntegrationRequestTemplates = a })
-
--- | The type of back end your method is running, such as HTTP, AWS, or MOCK.
--- For valid values, see the type property in the Amazon API Gateway REST API
--- Reference.
-agiType :: Lens' ApiGatewayIntegration ApiBackendType
-agiType = lens _apiGatewayIntegrationType (\s a -> s { _apiGatewayIntegrationType = a })
-
--- | The integration's Uniform Resource Identifier (URI). If you specify HTTP
--- for the Type property, specify the API endpoint URL. If you specify MOCK
--- for the Type property, don't specify this property. If you specify AWS for
--- the Type property, specify an AWS service that follows the form:
--- arn:aws:apigateway:region:subdomain.service|service:path|action/service_api.
--- For example, a Lambda function URI follows the form:
--- arn:aws:apigateway:region:lambda:path/path. The path is usually in the form
--- /2015-03-31/functions/LambdaFunctionARN/invocations. For more information,
--- see the uri property of the Integration resource in the Amazon API Gateway
--- REST API Reference.
-agiUri :: Lens' ApiGatewayIntegration (Maybe (Val Text))
-agiUri = lens _apiGatewayIntegrationUri (\s a -> s { _apiGatewayIntegrationUri = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayIntegrationResponse.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayIntegrationResponse.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayIntegrationResponse.hs
+++ /dev/null
@@ -1,76 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | IntegrationResponse is a property of the Amazon API Gateway Method
--- Integration property that specifies the response that Amazon API Gateway
--- (API Gateway) sends after a method's back end finishes processing a
--- request.
-
-module Stratosphere.ResourceProperties.ApiGatewayIntegrationResponse where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for ApiGatewayIntegrationResponse. See
--- 'apiGatewayIntegrationResponse' for a more convenient constructor.
-data ApiGatewayIntegrationResponse =
-  ApiGatewayIntegrationResponse
-  { _apiGatewayIntegrationResponseResponseParameters :: Maybe Object
-  , _apiGatewayIntegrationResponseResponseTemplates :: Maybe Object
-  , _apiGatewayIntegrationResponseSelectionPattern :: Maybe (Val Text)
-  , _apiGatewayIntegrationResponseStatusCode :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON ApiGatewayIntegrationResponse where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
-
-instance FromJSON ApiGatewayIntegrationResponse where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
-
--- | Constructor for 'ApiGatewayIntegrationResponse' containing required
--- fields as arguments.
-apiGatewayIntegrationResponse
-  :: ApiGatewayIntegrationResponse
-apiGatewayIntegrationResponse  =
-  ApiGatewayIntegrationResponse
-  { _apiGatewayIntegrationResponseResponseParameters = Nothing
-  , _apiGatewayIntegrationResponseResponseTemplates = Nothing
-  , _apiGatewayIntegrationResponseSelectionPattern = Nothing
-  , _apiGatewayIntegrationResponseStatusCode = Nothing
-  }
-
--- | The response parameters from the back-end response that API Gateway sends
--- to the method response. Specify response parameters as key-value pairs
--- (string-to-string maps), with a destination as the key and a source as the
--- value. For more information, see API Gateway API Request and Response
--- Parameter-Mapping Reference in the API Gateway Developer Guide. The
--- destination must be an existing response parameter in the MethodResponse
--- property. The source must be an existing method request parameter or a
--- static value. Static values must be enclosed in single quotation marks and
--- pre-encoded based on their destination in the request.
-agirResponseParameters :: Lens' ApiGatewayIntegrationResponse (Maybe Object)
-agirResponseParameters = lens _apiGatewayIntegrationResponseResponseParameters (\s a -> s { _apiGatewayIntegrationResponseResponseParameters = a })
-
--- | The templates used to transform the integration response body. Specify
--- templates as key-value pairs (string-to-string maps), with a content type
--- as the key and a template as the value. For more information, see API
--- Gateway API Request and Response Payload-Mapping Template Reference in the
--- API Gateway Developer Guide.
-agirResponseTemplates :: Lens' ApiGatewayIntegrationResponse (Maybe Object)
-agirResponseTemplates = lens _apiGatewayIntegrationResponseResponseTemplates (\s a -> s { _apiGatewayIntegrationResponseResponseTemplates = a })
-
--- | A regular expression that specifies which error strings or status codes
--- from the back end map to the integration response.
-agirSelectionPattern :: Lens' ApiGatewayIntegrationResponse (Maybe (Val Text))
-agirSelectionPattern = lens _apiGatewayIntegrationResponseSelectionPattern (\s a -> s { _apiGatewayIntegrationResponseSelectionPattern = a })
-
--- | The status code that API Gateway uses to map the integration response to
--- a MethodResponse status code.
-agirStatusCode :: Lens' ApiGatewayIntegrationResponse (Maybe (Val Text))
-agirStatusCode = lens _apiGatewayIntegrationResponseStatusCode (\s a -> s { _apiGatewayIntegrationResponseStatusCode = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodIntegration.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodIntegration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodIntegration.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration.html
+
+module Stratosphere.ResourceProperties.ApiGatewayMethodIntegration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.Types
+import Stratosphere.ResourceProperties.ApiGatewayMethodIntegrationResponse
+
+-- | Full data type definition for ApiGatewayMethodIntegration. See
+-- | 'apiGatewayMethodIntegration' for a more convenient constructor.
+data ApiGatewayMethodIntegration =
+  ApiGatewayMethodIntegration
+  { _apiGatewayMethodIntegrationCacheKeyParameters :: Maybe [Val Text]
+  , _apiGatewayMethodIntegrationCacheNamespace :: Maybe (Val Text)
+  , _apiGatewayMethodIntegrationCredentials :: Maybe (Val Text)
+  , _apiGatewayMethodIntegrationIntegrationHttpMethod :: Maybe (Val HttpMethod)
+  , _apiGatewayMethodIntegrationIntegrationResponses :: Maybe [ApiGatewayMethodIntegrationResponse]
+  , _apiGatewayMethodIntegrationPassthroughBehavior :: Maybe (Val PassthroughBehavior)
+  , _apiGatewayMethodIntegrationRequestParameters :: Maybe Object
+  , _apiGatewayMethodIntegrationRequestTemplates :: Maybe Object
+  , _apiGatewayMethodIntegrationType :: Maybe (Val ApiBackendType)
+  , _apiGatewayMethodIntegrationUri :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ApiGatewayMethodIntegration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON ApiGatewayMethodIntegration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'ApiGatewayMethodIntegration' containing required fields
+-- | as arguments.
+apiGatewayMethodIntegration
+  :: ApiGatewayMethodIntegration
+apiGatewayMethodIntegration  =
+  ApiGatewayMethodIntegration
+  { _apiGatewayMethodIntegrationCacheKeyParameters = Nothing
+  , _apiGatewayMethodIntegrationCacheNamespace = Nothing
+  , _apiGatewayMethodIntegrationCredentials = Nothing
+  , _apiGatewayMethodIntegrationIntegrationHttpMethod = Nothing
+  , _apiGatewayMethodIntegrationIntegrationResponses = Nothing
+  , _apiGatewayMethodIntegrationPassthroughBehavior = Nothing
+  , _apiGatewayMethodIntegrationRequestParameters = Nothing
+  , _apiGatewayMethodIntegrationRequestTemplates = Nothing
+  , _apiGatewayMethodIntegrationType = Nothing
+  , _apiGatewayMethodIntegrationUri = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration.html#cfn-apigateway-method-integration-cachekeyparameters
+agmiCacheKeyParameters :: Lens' ApiGatewayMethodIntegration (Maybe [Val Text])
+agmiCacheKeyParameters = lens _apiGatewayMethodIntegrationCacheKeyParameters (\s a -> s { _apiGatewayMethodIntegrationCacheKeyParameters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration.html#cfn-apigateway-method-integration-cachenamespace
+agmiCacheNamespace :: Lens' ApiGatewayMethodIntegration (Maybe (Val Text))
+agmiCacheNamespace = lens _apiGatewayMethodIntegrationCacheNamespace (\s a -> s { _apiGatewayMethodIntegrationCacheNamespace = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration.html#cfn-apigateway-method-integration-credentials
+agmiCredentials :: Lens' ApiGatewayMethodIntegration (Maybe (Val Text))
+agmiCredentials = lens _apiGatewayMethodIntegrationCredentials (\s a -> s { _apiGatewayMethodIntegrationCredentials = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration.html#cfn-apigateway-method-integration-integrationhttpmethod
+agmiIntegrationHttpMethod :: Lens' ApiGatewayMethodIntegration (Maybe (Val HttpMethod))
+agmiIntegrationHttpMethod = lens _apiGatewayMethodIntegrationIntegrationHttpMethod (\s a -> s { _apiGatewayMethodIntegrationIntegrationHttpMethod = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration.html#cfn-apigateway-method-integration-integrationresponses
+agmiIntegrationResponses :: Lens' ApiGatewayMethodIntegration (Maybe [ApiGatewayMethodIntegrationResponse])
+agmiIntegrationResponses = lens _apiGatewayMethodIntegrationIntegrationResponses (\s a -> s { _apiGatewayMethodIntegrationIntegrationResponses = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration.html#cfn-apigateway-method-integration-passthroughbehavior
+agmiPassthroughBehavior :: Lens' ApiGatewayMethodIntegration (Maybe (Val PassthroughBehavior))
+agmiPassthroughBehavior = lens _apiGatewayMethodIntegrationPassthroughBehavior (\s a -> s { _apiGatewayMethodIntegrationPassthroughBehavior = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration.html#cfn-apigateway-method-integration-requestparameters
+agmiRequestParameters :: Lens' ApiGatewayMethodIntegration (Maybe Object)
+agmiRequestParameters = lens _apiGatewayMethodIntegrationRequestParameters (\s a -> s { _apiGatewayMethodIntegrationRequestParameters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration.html#cfn-apigateway-method-integration-requesttemplates
+agmiRequestTemplates :: Lens' ApiGatewayMethodIntegration (Maybe Object)
+agmiRequestTemplates = lens _apiGatewayMethodIntegrationRequestTemplates (\s a -> s { _apiGatewayMethodIntegrationRequestTemplates = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration.html#cfn-apigateway-method-integration-type
+agmiType :: Lens' ApiGatewayMethodIntegration (Maybe (Val ApiBackendType))
+agmiType = lens _apiGatewayMethodIntegrationType (\s a -> s { _apiGatewayMethodIntegrationType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration.html#cfn-apigateway-method-integration-uri
+agmiUri :: Lens' ApiGatewayMethodIntegration (Maybe (Val Text))
+agmiUri = lens _apiGatewayMethodIntegrationUri (\s a -> s { _apiGatewayMethodIntegrationUri = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodIntegrationResponse.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodIntegrationResponse.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodIntegrationResponse.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration-integrationresponse.html
+
+module Stratosphere.ResourceProperties.ApiGatewayMethodIntegrationResponse where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ApiGatewayMethodIntegrationResponse. See
+-- | 'apiGatewayMethodIntegrationResponse' for a more convenient constructor.
+data ApiGatewayMethodIntegrationResponse =
+  ApiGatewayMethodIntegrationResponse
+  { _apiGatewayMethodIntegrationResponseResponseParameters :: Maybe Object
+  , _apiGatewayMethodIntegrationResponseResponseTemplates :: Maybe Object
+  , _apiGatewayMethodIntegrationResponseSelectionPattern :: Maybe (Val Text)
+  , _apiGatewayMethodIntegrationResponseStatusCode :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ApiGatewayMethodIntegrationResponse where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+instance FromJSON ApiGatewayMethodIntegrationResponse where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+-- | Constructor for 'ApiGatewayMethodIntegrationResponse' containing required
+-- | fields as arguments.
+apiGatewayMethodIntegrationResponse
+  :: ApiGatewayMethodIntegrationResponse
+apiGatewayMethodIntegrationResponse  =
+  ApiGatewayMethodIntegrationResponse
+  { _apiGatewayMethodIntegrationResponseResponseParameters = Nothing
+  , _apiGatewayMethodIntegrationResponseResponseTemplates = Nothing
+  , _apiGatewayMethodIntegrationResponseSelectionPattern = Nothing
+  , _apiGatewayMethodIntegrationResponseStatusCode = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration-integrationresponse.html#cfn-apigateway-method-integration-integrationresponse-responseparameters
+agmirResponseParameters :: Lens' ApiGatewayMethodIntegrationResponse (Maybe Object)
+agmirResponseParameters = lens _apiGatewayMethodIntegrationResponseResponseParameters (\s a -> s { _apiGatewayMethodIntegrationResponseResponseParameters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration-integrationresponse.html#cfn-apigateway-method-integration-integrationresponse-responsetemplates
+agmirResponseTemplates :: Lens' ApiGatewayMethodIntegrationResponse (Maybe Object)
+agmirResponseTemplates = lens _apiGatewayMethodIntegrationResponseResponseTemplates (\s a -> s { _apiGatewayMethodIntegrationResponseResponseTemplates = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration-integrationresponse.html#cfn-apigateway-method-integration-integrationresponse-selectionpattern
+agmirSelectionPattern :: Lens' ApiGatewayMethodIntegrationResponse (Maybe (Val Text))
+agmirSelectionPattern = lens _apiGatewayMethodIntegrationResponseSelectionPattern (\s a -> s { _apiGatewayMethodIntegrationResponseSelectionPattern = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration-integrationresponse.html#cfn-apigateway-method-integration-integrationresponse-statuscode
+agmirStatusCode :: Lens' ApiGatewayMethodIntegrationResponse (Maybe (Val Text))
+agmirStatusCode = lens _apiGatewayMethodIntegrationResponseStatusCode (\s a -> s { _apiGatewayMethodIntegrationResponseStatusCode = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodMethodResponse.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodMethodResponse.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodMethodResponse.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-methodresponse.html
+
+module Stratosphere.ResourceProperties.ApiGatewayMethodMethodResponse where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ApiGatewayMethodMethodResponse. See
+-- | 'apiGatewayMethodMethodResponse' for a more convenient constructor.
+data ApiGatewayMethodMethodResponse =
+  ApiGatewayMethodMethodResponse
+  { _apiGatewayMethodMethodResponseResponseModels :: Maybe Object
+  , _apiGatewayMethodMethodResponseResponseParameters :: Maybe Object
+  , _apiGatewayMethodMethodResponseStatusCode :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ApiGatewayMethodMethodResponse where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+instance FromJSON ApiGatewayMethodMethodResponse where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+-- | Constructor for 'ApiGatewayMethodMethodResponse' containing required
+-- | fields as arguments.
+apiGatewayMethodMethodResponse
+  :: ApiGatewayMethodMethodResponse
+apiGatewayMethodMethodResponse  =
+  ApiGatewayMethodMethodResponse
+  { _apiGatewayMethodMethodResponseResponseModels = Nothing
+  , _apiGatewayMethodMethodResponseResponseParameters = Nothing
+  , _apiGatewayMethodMethodResponseStatusCode = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-methodresponse.html#cfn-apigateway-method-methodresponse-responsemodels
+agmmrResponseModels :: Lens' ApiGatewayMethodMethodResponse (Maybe Object)
+agmmrResponseModels = lens _apiGatewayMethodMethodResponseResponseModels (\s a -> s { _apiGatewayMethodMethodResponseResponseModels = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-methodresponse.html#cfn-apigateway-method-methodresponse-responseparameters
+agmmrResponseParameters :: Lens' ApiGatewayMethodMethodResponse (Maybe Object)
+agmmrResponseParameters = lens _apiGatewayMethodMethodResponseResponseParameters (\s a -> s { _apiGatewayMethodMethodResponseResponseParameters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-methodresponse.html#cfn-apigateway-method-methodresponse-statuscode
+agmmrStatusCode :: Lens' ApiGatewayMethodMethodResponse (Maybe (Val Text))
+agmmrStatusCode = lens _apiGatewayMethodMethodResponseStatusCode (\s a -> s { _apiGatewayMethodMethodResponseStatusCode = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodResponse.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodResponse.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayMethodResponse.hs
+++ /dev/null
@@ -1,64 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | MethodResponse is a property of the AWS::ApiGateway::Method resource that
--- defines the responses that can be sent to the client who calls an Amazon
--- API Gateway (API Gateway) method.
-
-module Stratosphere.ResourceProperties.ApiGatewayMethodResponse where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for ApiGatewayMethodResponse. See
--- 'apiGatewayMethodResponse' for a more convenient constructor.
-data ApiGatewayMethodResponse =
-  ApiGatewayMethodResponse
-  { _apiGatewayMethodResponseResponseModels :: Maybe Object
-  , _apiGatewayMethodResponseResponseParameters :: Maybe Object
-  , _apiGatewayMethodResponseStatusCode :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON ApiGatewayMethodResponse where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
-
-instance FromJSON ApiGatewayMethodResponse where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
-
--- | Constructor for 'ApiGatewayMethodResponse' containing required fields as
--- arguments.
-apiGatewayMethodResponse
-  :: Val Text -- ^ 'agmrStatusCode'
-  -> ApiGatewayMethodResponse
-apiGatewayMethodResponse statusCodearg =
-  ApiGatewayMethodResponse
-  { _apiGatewayMethodResponseResponseModels = Nothing
-  , _apiGatewayMethodResponseResponseParameters = Nothing
-  , _apiGatewayMethodResponseStatusCode = statusCodearg
-  }
-
--- | The resources used for the response's content type. Specify response
--- models as key-value pairs (string-to-string maps), with a content type as
--- the key and a Model resource name as the value.
-agmrResponseModels :: Lens' ApiGatewayMethodResponse (Maybe Object)
-agmrResponseModels = lens _apiGatewayMethodResponseResponseModels (\s a -> s { _apiGatewayMethodResponseResponseModels = a })
-
--- | Response parameters that API Gateway sends to the client that called a
--- method. Specify response parameters as key-value pairs (string-to-Boolean
--- maps), with a destination as the key and a Boolean as the value. Specify
--- the destination using the following pattern: method.response.header.name,
--- where the name is a valid, unique header name. The Boolean specifies
--- whether a parameter is required.
-agmrResponseParameters :: Lens' ApiGatewayMethodResponse (Maybe Object)
-agmrResponseParameters = lens _apiGatewayMethodResponseResponseParameters (\s a -> s { _apiGatewayMethodResponseResponseParameters = a })
-
--- | The method response's status code, which you map to an
--- IntegrationResponse.
-agmrStatusCode :: Lens' ApiGatewayMethodResponse (Val Text)
-agmrStatusCode = lens _apiGatewayMethodResponseStatusCode (\s a -> s { _apiGatewayMethodResponseStatusCode = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayRestApiS3Location.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayRestApiS3Location.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayRestApiS3Location.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayRestApiS3Location.hs
@@ -1,10 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | S3Location is a property of the AWS::ApiGateway::RestApi resource that
--- specifies the Amazon Simple Storage Service (Amazon S3) location of a
--- Swagger file that defines a set of RESTful APIs in JSON or YAML for an
--- Amazon API Gateway (API Gateway) RestApi.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-restapi-bodys3location.html
 
 module Stratosphere.ResourceProperties.ApiGatewayRestApiS3Location where
 
@@ -18,7 +15,7 @@
 
 
 -- | Full data type definition for ApiGatewayRestApiS3Location. See
--- 'apiGatewayRestApiS3Location' for a more convenient constructor.
+-- | 'apiGatewayRestApiS3Location' for a more convenient constructor.
 data ApiGatewayRestApiS3Location =
   ApiGatewayRestApiS3Location
   { _apiGatewayRestApiS3LocationBucket :: Maybe (Val Text)
@@ -34,7 +31,7 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
 
 -- | Constructor for 'ApiGatewayRestApiS3Location' containing required fields
--- as arguments.
+-- | as arguments.
 apiGatewayRestApiS3Location
   :: ApiGatewayRestApiS3Location
 apiGatewayRestApiS3Location  =
@@ -45,19 +42,18 @@
   , _apiGatewayRestApiS3LocationVersion = Nothing
   }
 
--- | The name of the S3 bucket where the Swagger file is stored.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-restapi-bodys3location.html#cfn-apigateway-restapi-s3location-bucket
 agraslBucket :: Lens' ApiGatewayRestApiS3Location (Maybe (Val Text))
 agraslBucket = lens _apiGatewayRestApiS3LocationBucket (\s a -> s { _apiGatewayRestApiS3LocationBucket = a })
 
--- | The Amazon S3 ETag (a file checksum) of the Swagger file. If you don't
--- specify a value, API Gateway skips ETag validation of your Swagger file.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-restapi-bodys3location.html#cfn-apigateway-restapi-s3location-etag
 agraslETag :: Lens' ApiGatewayRestApiS3Location (Maybe (Val Text))
 agraslETag = lens _apiGatewayRestApiS3LocationETag (\s a -> s { _apiGatewayRestApiS3LocationETag = a })
 
--- | The file name of the Swagger file (Amazon S3 object name).
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-restapi-bodys3location.html#cfn-apigateway-restapi-s3location-key
 agraslKey :: Lens' ApiGatewayRestApiS3Location (Maybe (Val Text))
 agraslKey = lens _apiGatewayRestApiS3LocationKey (\s a -> s { _apiGatewayRestApiS3LocationKey = a })
 
--- | For versioning-enabled buckets, a specific version of the Swagger file.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-restapi-bodys3location.html#cfn-apigateway-restapi-s3location-version
 agraslVersion :: Lens' ApiGatewayRestApiS3Location (Maybe (Val Text))
 agraslVersion = lens _apiGatewayRestApiS3LocationVersion (\s a -> s { _apiGatewayRestApiS3LocationVersion = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayStageMethodSetting.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayStageMethodSetting.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayStageMethodSetting.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayStageMethodSetting.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | MethodSetting is a property of the AWS::ApiGateway::Stage resource that
--- configures settings for all methods in an Amazon API Gateway (API Gateway)
--- stage.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-stage-methodsetting.html
 
 module Stratosphere.ResourceProperties.ApiGatewayStageMethodSetting where
 
@@ -17,19 +15,19 @@
 import Stratosphere.Types
 
 -- | Full data type definition for ApiGatewayStageMethodSetting. See
--- 'apiGatewayStageMethodSetting' for a more convenient constructor.
+-- | 'apiGatewayStageMethodSetting' for a more convenient constructor.
 data ApiGatewayStageMethodSetting =
   ApiGatewayStageMethodSetting
   { _apiGatewayStageMethodSettingCacheDataEncrypted :: Maybe (Val Bool')
   , _apiGatewayStageMethodSettingCacheTtlInSeconds :: Maybe (Val Integer')
   , _apiGatewayStageMethodSettingCachingEnabled :: Maybe (Val Bool')
   , _apiGatewayStageMethodSettingDataTraceEnabled :: Maybe (Val Bool')
-  , _apiGatewayStageMethodSettingHttpMethod :: HttpMethod
-  , _apiGatewayStageMethodSettingLoggingLevel :: Maybe LoggingLevel
+  , _apiGatewayStageMethodSettingHttpMethod :: Maybe (Val HttpMethod)
+  , _apiGatewayStageMethodSettingLoggingLevel :: Maybe (Val LoggingLevel)
   , _apiGatewayStageMethodSettingMetricsEnabled :: Maybe (Val Bool')
-  , _apiGatewayStageMethodSettingResourcePath :: Val Text
+  , _apiGatewayStageMethodSettingResourcePath :: Maybe (Val Text)
   , _apiGatewayStageMethodSettingThrottlingBurstLimit :: Maybe (Val Integer')
-  , _apiGatewayStageMethodSettingThrottlingRateLimit :: Maybe Double'
+  , _apiGatewayStageMethodSettingThrottlingRateLimit :: Maybe (Val Double')
   } deriving (Show, Generic)
 
 instance ToJSON ApiGatewayStageMethodSetting where
@@ -39,74 +37,59 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
 
 -- | Constructor for 'ApiGatewayStageMethodSetting' containing required fields
--- as arguments.
+-- | as arguments.
 apiGatewayStageMethodSetting
-  :: HttpMethod -- ^ 'agsmsHttpMethod'
-  -> Val Text -- ^ 'agsmsResourcePath'
-  -> ApiGatewayStageMethodSetting
-apiGatewayStageMethodSetting httpMethodarg resourcePatharg =
+  :: ApiGatewayStageMethodSetting
+apiGatewayStageMethodSetting  =
   ApiGatewayStageMethodSetting
   { _apiGatewayStageMethodSettingCacheDataEncrypted = Nothing
   , _apiGatewayStageMethodSettingCacheTtlInSeconds = Nothing
   , _apiGatewayStageMethodSettingCachingEnabled = Nothing
   , _apiGatewayStageMethodSettingDataTraceEnabled = Nothing
-  , _apiGatewayStageMethodSettingHttpMethod = httpMethodarg
+  , _apiGatewayStageMethodSettingHttpMethod = Nothing
   , _apiGatewayStageMethodSettingLoggingLevel = Nothing
   , _apiGatewayStageMethodSettingMetricsEnabled = Nothing
-  , _apiGatewayStageMethodSettingResourcePath = resourcePatharg
+  , _apiGatewayStageMethodSettingResourcePath = Nothing
   , _apiGatewayStageMethodSettingThrottlingBurstLimit = Nothing
   , _apiGatewayStageMethodSettingThrottlingRateLimit = Nothing
   }
 
--- | Indicates whether the cached responses are encrypted.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-cachedataencrypted
 agsmsCacheDataEncrypted :: Lens' ApiGatewayStageMethodSetting (Maybe (Val Bool'))
 agsmsCacheDataEncrypted = lens _apiGatewayStageMethodSettingCacheDataEncrypted (\s a -> s { _apiGatewayStageMethodSettingCacheDataEncrypted = a })
 
--- | The time-to-live (TTL) period, in seconds, that specifies how long API
--- Gateway caches responses.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-cachettlinseconds
 agsmsCacheTtlInSeconds :: Lens' ApiGatewayStageMethodSetting (Maybe (Val Integer'))
 agsmsCacheTtlInSeconds = lens _apiGatewayStageMethodSettingCacheTtlInSeconds (\s a -> s { _apiGatewayStageMethodSettingCacheTtlInSeconds = a })
 
--- | Indicates whether responses are cached and returned for requests. You
--- must enable a cache cluster on the stage to cache responses.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-cachingenabled
 agsmsCachingEnabled :: Lens' ApiGatewayStageMethodSetting (Maybe (Val Bool'))
 agsmsCachingEnabled = lens _apiGatewayStageMethodSettingCachingEnabled (\s a -> s { _apiGatewayStageMethodSettingCachingEnabled = a })
 
--- | Indicates whether data trace logging is enabled for methods in the stage.
--- API Gateway pushes these logs to Amazon CloudWatch Logs.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-datatraceenabled
 agsmsDataTraceEnabled :: Lens' ApiGatewayStageMethodSetting (Maybe (Val Bool'))
 agsmsDataTraceEnabled = lens _apiGatewayStageMethodSettingDataTraceEnabled (\s a -> s { _apiGatewayStageMethodSettingDataTraceEnabled = a })
 
--- | The HTTP method.
-agsmsHttpMethod :: Lens' ApiGatewayStageMethodSetting HttpMethod
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-httpmethod
+agsmsHttpMethod :: Lens' ApiGatewayStageMethodSetting (Maybe (Val HttpMethod))
 agsmsHttpMethod = lens _apiGatewayStageMethodSettingHttpMethod (\s a -> s { _apiGatewayStageMethodSettingHttpMethod = a })
 
--- | The logging level for this method. For valid values, see the loggingLevel
--- property of the Stage resource in the Amazon API Gateway API Reference.
-agsmsLoggingLevel :: Lens' ApiGatewayStageMethodSetting (Maybe LoggingLevel)
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-logginglevel
+agsmsLoggingLevel :: Lens' ApiGatewayStageMethodSetting (Maybe (Val LoggingLevel))
 agsmsLoggingLevel = lens _apiGatewayStageMethodSettingLoggingLevel (\s a -> s { _apiGatewayStageMethodSettingLoggingLevel = a })
 
--- | Indicates whether Amazon CloudWatch metrics are enabled for methods in
--- the stage.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-metricsenabled
 agsmsMetricsEnabled :: Lens' ApiGatewayStageMethodSetting (Maybe (Val Bool'))
 agsmsMetricsEnabled = lens _apiGatewayStageMethodSettingMetricsEnabled (\s a -> s { _apiGatewayStageMethodSettingMetricsEnabled = a })
 
--- | The resource path for this method. Forward slashes (/) are encoded as ~1
--- and the initial slash must include a forward slash. For example, the path
--- value /resource/subresource must be encoded as /~1resource~1subresource. To
--- specify the root path, use only a slash (/).
-agsmsResourcePath :: Lens' ApiGatewayStageMethodSetting (Val Text)
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-resourcepath
+agsmsResourcePath :: Lens' ApiGatewayStageMethodSetting (Maybe (Val Text))
 agsmsResourcePath = lens _apiGatewayStageMethodSettingResourcePath (\s a -> s { _apiGatewayStageMethodSettingResourcePath = a })
 
--- | The number of burst requests per second that API Gateway permits across
--- all APIs, stages, and methods in your AWS account. For more information,
--- see Manage API Request Throttling in the API Gateway Developer Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-throttlingburstlimit
 agsmsThrottlingBurstLimit :: Lens' ApiGatewayStageMethodSetting (Maybe (Val Integer'))
 agsmsThrottlingBurstLimit = lens _apiGatewayStageMethodSettingThrottlingBurstLimit (\s a -> s { _apiGatewayStageMethodSettingThrottlingBurstLimit = a })
 
--- | The number of steady-state requests per second that API Gateway permits
--- across all APIs, stages, and methods in your AWS account. For more
--- information, see Manage API Request Throttling in the API Gateway Developer
--- Guide.
-agsmsThrottlingRateLimit :: Lens' ApiGatewayStageMethodSetting (Maybe Double')
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-throttlingratelimit
+agsmsThrottlingRateLimit :: Lens' ApiGatewayStageMethodSetting (Maybe (Val Double'))
 agsmsThrottlingRateLimit = lens _apiGatewayStageMethodSettingThrottlingRateLimit (\s a -> s { _apiGatewayStageMethodSettingThrottlingRateLimit = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanApiStage.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanApiStage.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanApiStage.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanApiStage.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | ApiStage is a property of the AWS::ApiGateway::UsagePlan resource that
--- specifies which Amazon API Gateway (API Gateway) stages and APIs to
--- associate with a usage plan.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-apistage.html
 
 module Stratosphere.ResourceProperties.ApiGatewayUsagePlanApiStage where
 
@@ -17,7 +15,7 @@
 
 
 -- | Full data type definition for ApiGatewayUsagePlanApiStage. See
--- 'apiGatewayUsagePlanApiStage' for a more convenient constructor.
+-- | 'apiGatewayUsagePlanApiStage' for a more convenient constructor.
 data ApiGatewayUsagePlanApiStage =
   ApiGatewayUsagePlanApiStage
   { _apiGatewayUsagePlanApiStageApiId :: Maybe (Val Text)
@@ -31,7 +29,7 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
 
 -- | Constructor for 'ApiGatewayUsagePlanApiStage' containing required fields
--- as arguments.
+-- | as arguments.
 apiGatewayUsagePlanApiStage
   :: ApiGatewayUsagePlanApiStage
 apiGatewayUsagePlanApiStage  =
@@ -40,11 +38,10 @@
   , _apiGatewayUsagePlanApiStageStage = Nothing
   }
 
--- | The ID of an API that is in the specified Stage property that you want to
--- associate with the usage plan.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-apistage.html#cfn-apigateway-usageplan-apistage-apiid
 agupasApiId :: Lens' ApiGatewayUsagePlanApiStage (Maybe (Val Text))
 agupasApiId = lens _apiGatewayUsagePlanApiStageApiId (\s a -> s { _apiGatewayUsagePlanApiStageApiId = a })
 
--- | The name of an API Gateway stage to associate with the usage plan.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-apistage.html#cfn-apigateway-usageplan-apistage-stage
 agupasStage :: Lens' ApiGatewayUsagePlanApiStage (Maybe (Val Text))
 agupasStage = lens _apiGatewayUsagePlanApiStageStage (\s a -> s { _apiGatewayUsagePlanApiStageStage = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanQuotaSettings.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanQuotaSettings.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanQuotaSettings.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanQuotaSettings.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | QuotaSettings is a property of the AWS::ApiGateway::UsagePlan resource
--- that specifies the maximum number of requests users can make to your Amazon
--- API Gateway (API Gateway) APIs.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-quotasettings.html
 
 module Stratosphere.ResourceProperties.ApiGatewayUsagePlanQuotaSettings where
 
@@ -17,12 +15,12 @@
 import Stratosphere.Types
 
 -- | Full data type definition for ApiGatewayUsagePlanQuotaSettings. See
--- 'apiGatewayUsagePlanQuotaSettings' for a more convenient constructor.
+-- | 'apiGatewayUsagePlanQuotaSettings' for a more convenient constructor.
 data ApiGatewayUsagePlanQuotaSettings =
   ApiGatewayUsagePlanQuotaSettings
   { _apiGatewayUsagePlanQuotaSettingsLimit :: Maybe (Val Integer')
   , _apiGatewayUsagePlanQuotaSettingsOffset :: Maybe (Val Integer')
-  , _apiGatewayUsagePlanQuotaSettingsPeriod :: Maybe Period
+  , _apiGatewayUsagePlanQuotaSettingsPeriod :: Maybe (Val Period)
   } deriving (Show, Generic)
 
 instance ToJSON ApiGatewayUsagePlanQuotaSettings where
@@ -32,7 +30,7 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
 
 -- | Constructor for 'ApiGatewayUsagePlanQuotaSettings' containing required
--- fields as arguments.
+-- | fields as arguments.
 apiGatewayUsagePlanQuotaSettings
   :: ApiGatewayUsagePlanQuotaSettings
 apiGatewayUsagePlanQuotaSettings  =
@@ -42,20 +40,14 @@
   , _apiGatewayUsagePlanQuotaSettingsPeriod = Nothing
   }
 
--- | The maximum number of requests that users can make within the specified
--- time period.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-quotasettings.html#cfn-apigateway-usageplan-quotasettings-limit
 agupqsLimit :: Lens' ApiGatewayUsagePlanQuotaSettings (Maybe (Val Integer'))
 agupqsLimit = lens _apiGatewayUsagePlanQuotaSettingsLimit (\s a -> s { _apiGatewayUsagePlanQuotaSettingsLimit = a })
 
--- | For the initial time period, the number of requests to subtract from the
--- specified limit. When you first implement a usage plan, the plan might
--- start in the middle of the week or month. With this property, you can
--- decrease the limit for this initial time period.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-quotasettings.html#cfn-apigateway-usageplan-quotasettings-offset
 agupqsOffset :: Lens' ApiGatewayUsagePlanQuotaSettings (Maybe (Val Integer'))
 agupqsOffset = lens _apiGatewayUsagePlanQuotaSettingsOffset (\s a -> s { _apiGatewayUsagePlanQuotaSettingsOffset = a })
 
--- | The time period for which the maximum limit of requests applies, such as
--- DAY or WEEK. For valid values, see the period property for the UsagePlan
--- resource in the Amazon API Gateway REST API Reference.
-agupqsPeriod :: Lens' ApiGatewayUsagePlanQuotaSettings (Maybe Period)
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-quotasettings.html#cfn-apigateway-usageplan-quotasettings-period
+agupqsPeriod :: Lens' ApiGatewayUsagePlanQuotaSettings (Maybe (Val Period))
 agupqsPeriod = lens _apiGatewayUsagePlanQuotaSettingsPeriod (\s a -> s { _apiGatewayUsagePlanQuotaSettingsPeriod = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanThrottleSettings.hs b/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanThrottleSettings.hs
--- a/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanThrottleSettings.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanThrottleSettings.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | ThrottleSettings is a property of the AWS::ApiGateway::UsagePlan resource
--- that specifies the overall request rate (average requests per second) and
--- burst capacity when users call your Amazon API Gateway (API Gateway) APIs.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-throttlesettings.html
 
 module Stratosphere.ResourceProperties.ApiGatewayUsagePlanThrottleSettings where
 
@@ -17,11 +15,11 @@
 
 
 -- | Full data type definition for ApiGatewayUsagePlanThrottleSettings. See
--- 'apiGatewayUsagePlanThrottleSettings' for a more convenient constructor.
+-- | 'apiGatewayUsagePlanThrottleSettings' for a more convenient constructor.
 data ApiGatewayUsagePlanThrottleSettings =
   ApiGatewayUsagePlanThrottleSettings
   { _apiGatewayUsagePlanThrottleSettingsBurstLimit :: Maybe (Val Integer')
-  , _apiGatewayUsagePlanThrottleSettingsRateLimit :: Maybe Double'
+  , _apiGatewayUsagePlanThrottleSettingsRateLimit :: Maybe (Val Double')
   } deriving (Show, Generic)
 
 instance ToJSON ApiGatewayUsagePlanThrottleSettings where
@@ -31,7 +29,7 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
 
 -- | Constructor for 'ApiGatewayUsagePlanThrottleSettings' containing required
--- fields as arguments.
+-- | fields as arguments.
 apiGatewayUsagePlanThrottleSettings
   :: ApiGatewayUsagePlanThrottleSettings
 apiGatewayUsagePlanThrottleSettings  =
@@ -40,16 +38,10 @@
   , _apiGatewayUsagePlanThrottleSettingsRateLimit = Nothing
   }
 
--- | The maximum API request rate limit over a time ranging from one to a few
--- seconds. The maximum API request rate limit depends on whether the
--- underlying token bucket is at its full capacity. For more information about
--- request throttling, see Manage API Request Throttling in the API Gateway
--- Developer Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-throttlesettings.html#cfn-apigateway-usageplan-throttlesettings-burstlimit
 aguptsBurstLimit :: Lens' ApiGatewayUsagePlanThrottleSettings (Maybe (Val Integer'))
 aguptsBurstLimit = lens _apiGatewayUsagePlanThrottleSettingsBurstLimit (\s a -> s { _apiGatewayUsagePlanThrottleSettingsBurstLimit = a })
 
--- | The API request steady-state rate limit (average requests per second over
--- an extended period of time). For more information about request throttling,
--- see Manage API Request Throttling in the API Gateway Developer Guide.
-aguptsRateLimit :: Lens' ApiGatewayUsagePlanThrottleSettings (Maybe Double')
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-throttlesettings.html#cfn-apigateway-usageplan-throttlesettings-ratelimit
+aguptsRateLimit :: Lens' ApiGatewayUsagePlanThrottleSettings (Maybe (Val Double'))
 aguptsRateLimit = lens _apiGatewayUsagePlanThrottleSettingsRateLimit (\s a -> s { _apiGatewayUsagePlanThrottleSettingsRateLimit = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppCookieStickinessPolicy.hs b/library-gen/Stratosphere/ResourceProperties/AppCookieStickinessPolicy.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/AppCookieStickinessPolicy.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AppCookieStickinessPolicy type is an embedded property of the
--- AWS::ElasticLoadBalancing::LoadBalancer type.
-
-module Stratosphere.ResourceProperties.AppCookieStickinessPolicy where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for AppCookieStickinessPolicy. See
--- 'appCookieStickinessPolicy' for a more convenient constructor.
-data AppCookieStickinessPolicy =
-  AppCookieStickinessPolicy
-  { _appCookieStickinessPolicyCookieName :: Val Text
-  , _appCookieStickinessPolicyPolicyName :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON AppCookieStickinessPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
-
-instance FromJSON AppCookieStickinessPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
-
--- | Constructor for 'AppCookieStickinessPolicy' containing required fields as
--- arguments.
-appCookieStickinessPolicy
-  :: Val Text -- ^ 'acspCookieName'
-  -> Val Text -- ^ 'acspPolicyName'
-  -> AppCookieStickinessPolicy
-appCookieStickinessPolicy cookieNamearg policyNamearg =
-  AppCookieStickinessPolicy
-  { _appCookieStickinessPolicyCookieName = cookieNamearg
-  , _appCookieStickinessPolicyPolicyName = policyNamearg
-  }
-
--- | Name of the application cookie used for stickiness.
-acspCookieName :: Lens' AppCookieStickinessPolicy (Val Text)
-acspCookieName = lens _appCookieStickinessPolicyCookieName (\s a -> s { _appCookieStickinessPolicyCookieName = a })
-
--- | The name of the policy being created. The name must be unique within the
--- set of policies for this Load Balancer. Note To associate this policy with
--- a listener, include the policy name in the listener's PolicyNames property.
-acspPolicyName :: Lens' AppCookieStickinessPolicy (Val Text)
-acspPolicyName = lens _appCookieStickinessPolicyPolicyName (\s a -> s { _appCookieStickinessPolicyPolicyName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyStepAdjustment.hs b/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyStepAdjustment.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyStepAdjustment.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration-stepadjustment.html
+
+module Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepAdjustment where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ApplicationAutoScalingScalingPolicyStepAdjustment. See
+-- | 'applicationAutoScalingScalingPolicyStepAdjustment' for a more convenient
+-- | constructor.
+data ApplicationAutoScalingScalingPolicyStepAdjustment =
+  ApplicationAutoScalingScalingPolicyStepAdjustment
+  { _applicationAutoScalingScalingPolicyStepAdjustmentMetricIntervalLowerBound :: Maybe (Val Double')
+  , _applicationAutoScalingScalingPolicyStepAdjustmentMetricIntervalUpperBound :: Maybe (Val Double')
+  , _applicationAutoScalingScalingPolicyStepAdjustmentScalingAdjustment :: Val Integer'
+  } deriving (Show, Generic)
+
+instance ToJSON ApplicationAutoScalingScalingPolicyStepAdjustment where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 50, omitNothingFields = True }
+
+instance FromJSON ApplicationAutoScalingScalingPolicyStepAdjustment where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 50, omitNothingFields = True }
+
+-- | Constructor for 'ApplicationAutoScalingScalingPolicyStepAdjustment'
+-- | containing required fields as arguments.
+applicationAutoScalingScalingPolicyStepAdjustment
+  :: Val Integer' -- ^ 'aasspsaScalingAdjustment'
+  -> ApplicationAutoScalingScalingPolicyStepAdjustment
+applicationAutoScalingScalingPolicyStepAdjustment scalingAdjustmentarg =
+  ApplicationAutoScalingScalingPolicyStepAdjustment
+  { _applicationAutoScalingScalingPolicyStepAdjustmentMetricIntervalLowerBound = Nothing
+  , _applicationAutoScalingScalingPolicyStepAdjustmentMetricIntervalUpperBound = Nothing
+  , _applicationAutoScalingScalingPolicyStepAdjustmentScalingAdjustment = scalingAdjustmentarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration-stepadjustment.html#cfn-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration-stepadjustment-metricintervallowerbound
+aasspsaMetricIntervalLowerBound :: Lens' ApplicationAutoScalingScalingPolicyStepAdjustment (Maybe (Val Double'))
+aasspsaMetricIntervalLowerBound = lens _applicationAutoScalingScalingPolicyStepAdjustmentMetricIntervalLowerBound (\s a -> s { _applicationAutoScalingScalingPolicyStepAdjustmentMetricIntervalLowerBound = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration-stepadjustment.html#cfn-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration-stepadjustment-metricintervalupperbound
+aasspsaMetricIntervalUpperBound :: Lens' ApplicationAutoScalingScalingPolicyStepAdjustment (Maybe (Val Double'))
+aasspsaMetricIntervalUpperBound = lens _applicationAutoScalingScalingPolicyStepAdjustmentMetricIntervalUpperBound (\s a -> s { _applicationAutoScalingScalingPolicyStepAdjustmentMetricIntervalUpperBound = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration-stepadjustment.html#cfn-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration-stepadjustment-scalingadjustment
+aasspsaScalingAdjustment :: Lens' ApplicationAutoScalingScalingPolicyStepAdjustment (Val Integer')
+aasspsaScalingAdjustment = lens _applicationAutoScalingScalingPolicyStepAdjustmentScalingAdjustment (\s a -> s { _applicationAutoScalingScalingPolicyStepAdjustmentScalingAdjustment = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration.html
+
+module Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepAdjustment
+
+-- | Full data type definition for
+-- | ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration. See
+-- | 'applicationAutoScalingScalingPolicyStepScalingPolicyConfiguration' for a
+-- | more convenient constructor.
+data ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration =
+  ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration
+  { _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationAdjustmentType :: Maybe (Val Text)
+  , _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationCooldown :: Maybe (Val Integer')
+  , _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationMetricAggregationType :: Maybe (Val Text)
+  , _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationMinAdjustmentMagnitude :: Maybe (Val Integer')
+  , _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationStepAdjustments :: Maybe [ApplicationAutoScalingScalingPolicyStepAdjustment]
+  } deriving (Show, Generic)
+
+instance ToJSON ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 66, omitNothingFields = True }
+
+instance FromJSON ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 66, omitNothingFields = True }
+
+-- | Constructor for
+-- | 'ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration'
+-- | containing required fields as arguments.
+applicationAutoScalingScalingPolicyStepScalingPolicyConfiguration
+  :: ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration
+applicationAutoScalingScalingPolicyStepScalingPolicyConfiguration  =
+  ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration
+  { _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationAdjustmentType = Nothing
+  , _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationCooldown = Nothing
+  , _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationMetricAggregationType = Nothing
+  , _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationMinAdjustmentMagnitude = Nothing
+  , _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationStepAdjustments = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration.html#cfn-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration-adjustmenttype
+aasspsspcAdjustmentType :: Lens' ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration (Maybe (Val Text))
+aasspsspcAdjustmentType = lens _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationAdjustmentType (\s a -> s { _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationAdjustmentType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration.html#cfn-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration-cooldown
+aasspsspcCooldown :: Lens' ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration (Maybe (Val Integer'))
+aasspsspcCooldown = lens _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationCooldown (\s a -> s { _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationCooldown = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration.html#cfn-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration-metricaggregationtype
+aasspsspcMetricAggregationType :: Lens' ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration (Maybe (Val Text))
+aasspsspcMetricAggregationType = lens _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationMetricAggregationType (\s a -> s { _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationMetricAggregationType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration.html#cfn-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration-minadjustmentmagnitude
+aasspsspcMinAdjustmentMagnitude :: Lens' ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration (Maybe (Val Integer'))
+aasspsspcMinAdjustmentMagnitude = lens _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationMinAdjustmentMagnitude (\s a -> s { _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationMinAdjustmentMagnitude = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration.html#cfn-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration-stepadjustments
+aasspsspcStepAdjustments :: Lens' ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration (Maybe [ApplicationAutoScalingScalingPolicyStepAdjustment])
+aasspsspcStepAdjustments = lens _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationStepAdjustments (\s a -> s { _applicationAutoScalingScalingPolicyStepScalingPolicyConfigurationStepAdjustments = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupMetricsCollection.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupMetricsCollection.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupMetricsCollection.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-metricscollection.html
+
+module Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupMetricsCollection where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | AutoScalingAutoScalingGroupMetricsCollection. See
+-- | 'autoScalingAutoScalingGroupMetricsCollection' for a more convenient
+-- | constructor.
+data AutoScalingAutoScalingGroupMetricsCollection =
+  AutoScalingAutoScalingGroupMetricsCollection
+  { _autoScalingAutoScalingGroupMetricsCollectionGranularity :: Val Text
+  , _autoScalingAutoScalingGroupMetricsCollectionMetrics :: Maybe [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON AutoScalingAutoScalingGroupMetricsCollection where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 45, omitNothingFields = True }
+
+instance FromJSON AutoScalingAutoScalingGroupMetricsCollection where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 45, omitNothingFields = True }
+
+-- | Constructor for 'AutoScalingAutoScalingGroupMetricsCollection' containing
+-- | required fields as arguments.
+autoScalingAutoScalingGroupMetricsCollection
+  :: Val Text -- ^ 'asasgmcGranularity'
+  -> AutoScalingAutoScalingGroupMetricsCollection
+autoScalingAutoScalingGroupMetricsCollection granularityarg =
+  AutoScalingAutoScalingGroupMetricsCollection
+  { _autoScalingAutoScalingGroupMetricsCollectionGranularity = granularityarg
+  , _autoScalingAutoScalingGroupMetricsCollectionMetrics = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-metricscollection.html#cfn-as-metricscollection-granularity
+asasgmcGranularity :: Lens' AutoScalingAutoScalingGroupMetricsCollection (Val Text)
+asasgmcGranularity = lens _autoScalingAutoScalingGroupMetricsCollectionGranularity (\s a -> s { _autoScalingAutoScalingGroupMetricsCollectionGranularity = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-metricscollection.html#cfn-as-metricscollection-metrics
+asasgmcMetrics :: Lens' AutoScalingAutoScalingGroupMetricsCollection (Maybe [Val Text])
+asasgmcMetrics = lens _autoScalingAutoScalingGroupMetricsCollectionMetrics (\s a -> s { _autoScalingAutoScalingGroupMetricsCollectionMetrics = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupNotificationConfigurations.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupNotificationConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupNotificationConfigurations.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-notificationconfigurations.html
+
+module Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupNotificationConfigurations where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | AutoScalingAutoScalingGroupNotificationConfigurations. See
+-- | 'autoScalingAutoScalingGroupNotificationConfigurations' for a more
+-- | convenient constructor.
+data AutoScalingAutoScalingGroupNotificationConfigurations =
+  AutoScalingAutoScalingGroupNotificationConfigurations
+  { _autoScalingAutoScalingGroupNotificationConfigurationsNotificationTypes :: Maybe [Val Text]
+  , _autoScalingAutoScalingGroupNotificationConfigurationsTopicARN :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON AutoScalingAutoScalingGroupNotificationConfigurations where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 54, omitNothingFields = True }
+
+instance FromJSON AutoScalingAutoScalingGroupNotificationConfigurations where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 54, omitNothingFields = True }
+
+-- | Constructor for 'AutoScalingAutoScalingGroupNotificationConfigurations'
+-- | containing required fields as arguments.
+autoScalingAutoScalingGroupNotificationConfigurations
+  :: Val Text -- ^ 'asasgncTopicARN'
+  -> AutoScalingAutoScalingGroupNotificationConfigurations
+autoScalingAutoScalingGroupNotificationConfigurations topicARNarg =
+  AutoScalingAutoScalingGroupNotificationConfigurations
+  { _autoScalingAutoScalingGroupNotificationConfigurationsNotificationTypes = Nothing
+  , _autoScalingAutoScalingGroupNotificationConfigurationsTopicARN = topicARNarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-notificationconfigurations.html#cfn-as-group-notificationconfigurations-notificationtypes
+asasgncNotificationTypes :: Lens' AutoScalingAutoScalingGroupNotificationConfigurations (Maybe [Val Text])
+asasgncNotificationTypes = lens _autoScalingAutoScalingGroupNotificationConfigurationsNotificationTypes (\s a -> s { _autoScalingAutoScalingGroupNotificationConfigurationsNotificationTypes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-notificationconfigurations.html#cfn-autoscaling-autoscalinggroup-notificationconfigurations-topicarn
+asasgncTopicARN :: Lens' AutoScalingAutoScalingGroupNotificationConfigurations (Val Text)
+asasgncTopicARN = lens _autoScalingAutoScalingGroupNotificationConfigurationsTopicARN (\s a -> s { _autoScalingAutoScalingGroupNotificationConfigurationsTopicARN = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupTagProperty.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupTagProperty.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupTagProperty.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-tags.html
+
+module Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupTagProperty where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for AutoScalingAutoScalingGroupTagProperty. See
+-- | 'autoScalingAutoScalingGroupTagProperty' for a more convenient
+-- | constructor.
+data AutoScalingAutoScalingGroupTagProperty =
+  AutoScalingAutoScalingGroupTagProperty
+  { _autoScalingAutoScalingGroupTagPropertyKey :: Val Text
+  , _autoScalingAutoScalingGroupTagPropertyPropagateAtLaunch :: Val Bool'
+  , _autoScalingAutoScalingGroupTagPropertyValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON AutoScalingAutoScalingGroupTagProperty where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+instance FromJSON AutoScalingAutoScalingGroupTagProperty where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+-- | Constructor for 'AutoScalingAutoScalingGroupTagProperty' containing
+-- | required fields as arguments.
+autoScalingAutoScalingGroupTagProperty
+  :: Val Text -- ^ 'asasgtpKey'
+  -> Val Bool' -- ^ 'asasgtpPropagateAtLaunch'
+  -> Val Text -- ^ 'asasgtpValue'
+  -> AutoScalingAutoScalingGroupTagProperty
+autoScalingAutoScalingGroupTagProperty keyarg propagateAtLauncharg valuearg =
+  AutoScalingAutoScalingGroupTagProperty
+  { _autoScalingAutoScalingGroupTagPropertyKey = keyarg
+  , _autoScalingAutoScalingGroupTagPropertyPropagateAtLaunch = propagateAtLauncharg
+  , _autoScalingAutoScalingGroupTagPropertyValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-tags.html#cfn-as-tags-Key
+asasgtpKey :: Lens' AutoScalingAutoScalingGroupTagProperty (Val Text)
+asasgtpKey = lens _autoScalingAutoScalingGroupTagPropertyKey (\s a -> s { _autoScalingAutoScalingGroupTagPropertyKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-tags.html#cfn-as-tags-PropagateAtLaunch
+asasgtpPropagateAtLaunch :: Lens' AutoScalingAutoScalingGroupTagProperty (Val Bool')
+asasgtpPropagateAtLaunch = lens _autoScalingAutoScalingGroupTagPropertyPropagateAtLaunch (\s a -> s { _autoScalingAutoScalingGroupTagPropertyPropagateAtLaunch = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-tags.html#cfn-as-tags-Value
+asasgtpValue :: Lens' AutoScalingAutoScalingGroupTagProperty (Val Text)
+asasgtpValue = lens _autoScalingAutoScalingGroupTagPropertyValue (\s a -> s { _autoScalingAutoScalingGroupTagPropertyValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingBlockDeviceMapping.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingBlockDeviceMapping.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/AutoScalingBlockDeviceMapping.hs
+++ /dev/null
@@ -1,64 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AutoScaling Block Device Mapping type is an embedded property of the
--- AWS::AutoScaling::LaunchConfiguration type.
-
-module Stratosphere.ResourceProperties.AutoScalingBlockDeviceMapping where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.AutoScalingEBSBlockDevice
-
--- | Full data type definition for AutoScalingBlockDeviceMapping. See
--- 'autoScalingBlockDeviceMapping' for a more convenient constructor.
-data AutoScalingBlockDeviceMapping =
-  AutoScalingBlockDeviceMapping
-  { _autoScalingBlockDeviceMappingDeviceName :: Val Text
-  , _autoScalingBlockDeviceMappingEbs :: Maybe AutoScalingEBSBlockDevice
-  , _autoScalingBlockDeviceMappingNoDevice :: Maybe (Val Bool')
-  , _autoScalingBlockDeviceMappingVirtualName :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON AutoScalingBlockDeviceMapping where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
-
-instance FromJSON AutoScalingBlockDeviceMapping where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
-
--- | Constructor for 'AutoScalingBlockDeviceMapping' containing required
--- fields as arguments.
-autoScalingBlockDeviceMapping
-  :: Val Text -- ^ 'asbdmDeviceName'
-  -> AutoScalingBlockDeviceMapping
-autoScalingBlockDeviceMapping deviceNamearg =
-  AutoScalingBlockDeviceMapping
-  { _autoScalingBlockDeviceMappingDeviceName = deviceNamearg
-  , _autoScalingBlockDeviceMappingEbs = Nothing
-  , _autoScalingBlockDeviceMappingNoDevice = Nothing
-  , _autoScalingBlockDeviceMappingVirtualName = Nothing
-  }
-
--- | The name of the device within Amazon EC2.
-asbdmDeviceName :: Lens' AutoScalingBlockDeviceMapping (Val Text)
-asbdmDeviceName = lens _autoScalingBlockDeviceMappingDeviceName (\s a -> s { _autoScalingBlockDeviceMappingDeviceName = a })
-
--- | The Amazon Elastic Block Store volume information.
-asbdmEbs :: Lens' AutoScalingBlockDeviceMapping (Maybe AutoScalingEBSBlockDevice)
-asbdmEbs = lens _autoScalingBlockDeviceMappingEbs (\s a -> s { _autoScalingBlockDeviceMappingEbs = a })
-
--- | Suppresses the device mapping. If NoDevice is set to true for the root
--- device, the instance might fail the Amazon EC2 health check. Auto Scaling
--- launches a replacement instance if the instance fails the health check.
-asbdmNoDevice :: Lens' AutoScalingBlockDeviceMapping (Maybe (Val Bool'))
-asbdmNoDevice = lens _autoScalingBlockDeviceMappingNoDevice (\s a -> s { _autoScalingBlockDeviceMappingNoDevice = a })
-
--- | The name of the virtual device. The name must be in the form ephemeralX
--- where X is a number starting from zero (0), for example, ephemeral0.
-asbdmVirtualName :: Lens' AutoScalingBlockDeviceMapping (Maybe (Val Text))
-asbdmVirtualName = lens _autoScalingBlockDeviceMappingVirtualName (\s a -> s { _autoScalingBlockDeviceMappingVirtualName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingEBSBlockDevice.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingEBSBlockDevice.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/AutoScalingEBSBlockDevice.hs
+++ /dev/null
@@ -1,82 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AutoScaling EBS Block Device type is an embedded property of the
--- AutoScaling Block Device Mapping type.
-
-module Stratosphere.ResourceProperties.AutoScalingEBSBlockDevice where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for AutoScalingEBSBlockDevice. See
--- 'autoScalingEBSBlockDevice' for a more convenient constructor.
-data AutoScalingEBSBlockDevice =
-  AutoScalingEBSBlockDevice
-  { _autoScalingEBSBlockDeviceDeleteOnTermination :: Maybe (Val Bool')
-  , _autoScalingEBSBlockDeviceEncrypted :: Maybe (Val Bool')
-  , _autoScalingEBSBlockDeviceIops :: Maybe (Val Integer')
-  , _autoScalingEBSBlockDeviceSnapshotId :: Maybe (Val Text)
-  , _autoScalingEBSBlockDeviceVolumeSize :: Maybe (Val Integer')
-  , _autoScalingEBSBlockDeviceVolumeType :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON AutoScalingEBSBlockDevice where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
-
-instance FromJSON AutoScalingEBSBlockDevice where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
-
--- | Constructor for 'AutoScalingEBSBlockDevice' containing required fields as
--- arguments.
-autoScalingEBSBlockDevice
-  :: AutoScalingEBSBlockDevice
-autoScalingEBSBlockDevice  =
-  AutoScalingEBSBlockDevice
-  { _autoScalingEBSBlockDeviceDeleteOnTermination = Nothing
-  , _autoScalingEBSBlockDeviceEncrypted = Nothing
-  , _autoScalingEBSBlockDeviceIops = Nothing
-  , _autoScalingEBSBlockDeviceSnapshotId = Nothing
-  , _autoScalingEBSBlockDeviceVolumeSize = Nothing
-  , _autoScalingEBSBlockDeviceVolumeType = Nothing
-  }
-
--- | Indicates whether to delete the volume when the instance is terminated.
--- By default, Auto Scaling uses true.
-asebsbdDeleteOnTermination :: Lens' AutoScalingEBSBlockDevice (Maybe (Val Bool'))
-asebsbdDeleteOnTermination = lens _autoScalingEBSBlockDeviceDeleteOnTermination (\s a -> s { _autoScalingEBSBlockDeviceDeleteOnTermination = a })
-
--- | Indicates whether the volume is encrypted. Encrypted EBS volumes must be
--- attached to instances that support Amazon EBS encryption. Volumes that you
--- create from encrypted snapshots are automatically encrypted. You cannot
--- create an encrypted volume from an unencrypted snapshot or an unencrypted
--- volume from an encrypted snapshot.
-asebsbdEncrypted :: Lens' AutoScalingEBSBlockDevice (Maybe (Val Bool'))
-asebsbdEncrypted = lens _autoScalingEBSBlockDeviceEncrypted (\s a -> s { _autoScalingEBSBlockDeviceEncrypted = a })
-
--- | The number of I/O operations per second (IOPS) that the volume supports.
--- The maximum ratio of IOPS to volume size is 30.
-asebsbdIops :: Lens' AutoScalingEBSBlockDevice (Maybe (Val Integer'))
-asebsbdIops = lens _autoScalingEBSBlockDeviceIops (\s a -> s { _autoScalingEBSBlockDeviceIops = a })
-
--- | The snapshot ID of the volume to use.
-asebsbdSnapshotId :: Lens' AutoScalingEBSBlockDevice (Maybe (Val Text))
-asebsbdSnapshotId = lens _autoScalingEBSBlockDeviceSnapshotId (\s a -> s { _autoScalingEBSBlockDeviceSnapshotId = a })
-
--- | The volume size, in Gibibytes (GiB). This can be a number from 1 – 1024.
--- If the volume type is EBS optimized, the minimum value is 10. For more
--- information about specifying the volume type, see EbsOptimized in
--- AWS::AutoScaling::LaunchConfiguration.
-asebsbdVolumeSize :: Lens' AutoScalingEBSBlockDevice (Maybe (Val Integer'))
-asebsbdVolumeSize = lens _autoScalingEBSBlockDeviceVolumeSize (\s a -> s { _autoScalingEBSBlockDeviceVolumeSize = a })
-
--- | The volume type. By default, Auto Scaling uses the standard volume type.
--- For more information, see Ebs in the Auto Scaling API Reference.
-asebsbdVolumeType :: Lens' AutoScalingEBSBlockDevice (Maybe (Val Text))
-asebsbdVolumeType = lens _autoScalingEBSBlockDeviceVolumeType (\s a -> s { _autoScalingEBSBlockDeviceVolumeType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingLaunchConfigurationBlockDevice.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingLaunchConfigurationBlockDevice.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AutoScalingLaunchConfigurationBlockDevice.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig-blockdev-template.html
+
+module Stratosphere.ResourceProperties.AutoScalingLaunchConfigurationBlockDevice where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for AutoScalingLaunchConfigurationBlockDevice.
+-- | See 'autoScalingLaunchConfigurationBlockDevice' for a more convenient
+-- | constructor.
+data AutoScalingLaunchConfigurationBlockDevice =
+  AutoScalingLaunchConfigurationBlockDevice
+  { _autoScalingLaunchConfigurationBlockDeviceDeleteOnTermination :: Maybe (Val Bool')
+  , _autoScalingLaunchConfigurationBlockDeviceEncrypted :: Maybe (Val Bool')
+  , _autoScalingLaunchConfigurationBlockDeviceIops :: Maybe (Val Integer')
+  , _autoScalingLaunchConfigurationBlockDeviceSnapshotId :: Maybe (Val Text)
+  , _autoScalingLaunchConfigurationBlockDeviceVolumeSize :: Maybe (Val Text)
+  , _autoScalingLaunchConfigurationBlockDeviceVolumeType :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON AutoScalingLaunchConfigurationBlockDevice where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+
+instance FromJSON AutoScalingLaunchConfigurationBlockDevice where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+
+-- | Constructor for 'AutoScalingLaunchConfigurationBlockDevice' containing
+-- | required fields as arguments.
+autoScalingLaunchConfigurationBlockDevice
+  :: AutoScalingLaunchConfigurationBlockDevice
+autoScalingLaunchConfigurationBlockDevice  =
+  AutoScalingLaunchConfigurationBlockDevice
+  { _autoScalingLaunchConfigurationBlockDeviceDeleteOnTermination = Nothing
+  , _autoScalingLaunchConfigurationBlockDeviceEncrypted = Nothing
+  , _autoScalingLaunchConfigurationBlockDeviceIops = Nothing
+  , _autoScalingLaunchConfigurationBlockDeviceSnapshotId = Nothing
+  , _autoScalingLaunchConfigurationBlockDeviceVolumeSize = Nothing
+  , _autoScalingLaunchConfigurationBlockDeviceVolumeType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig-blockdev-template.html#cfn-as-launchconfig-blockdev-template-deleteonterm
+aslcbdDeleteOnTermination :: Lens' AutoScalingLaunchConfigurationBlockDevice (Maybe (Val Bool'))
+aslcbdDeleteOnTermination = lens _autoScalingLaunchConfigurationBlockDeviceDeleteOnTermination (\s a -> s { _autoScalingLaunchConfigurationBlockDeviceDeleteOnTermination = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig-blockdev-template.html#cfn-as-launchconfig-blockdev-template-encrypted
+aslcbdEncrypted :: Lens' AutoScalingLaunchConfigurationBlockDevice (Maybe (Val Bool'))
+aslcbdEncrypted = lens _autoScalingLaunchConfigurationBlockDeviceEncrypted (\s a -> s { _autoScalingLaunchConfigurationBlockDeviceEncrypted = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig-blockdev-template.html#cfn-as-launchconfig-blockdev-template-iops
+aslcbdIops :: Lens' AutoScalingLaunchConfigurationBlockDevice (Maybe (Val Integer'))
+aslcbdIops = lens _autoScalingLaunchConfigurationBlockDeviceIops (\s a -> s { _autoScalingLaunchConfigurationBlockDeviceIops = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig-blockdev-template.html#cfn-as-launchconfig-blockdev-template-snapshotid
+aslcbdSnapshotId :: Lens' AutoScalingLaunchConfigurationBlockDevice (Maybe (Val Text))
+aslcbdSnapshotId = lens _autoScalingLaunchConfigurationBlockDeviceSnapshotId (\s a -> s { _autoScalingLaunchConfigurationBlockDeviceSnapshotId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig-blockdev-template.html#cfn-as-launchconfig-blockdev-template-volumesize
+aslcbdVolumeSize :: Lens' AutoScalingLaunchConfigurationBlockDevice (Maybe (Val Text))
+aslcbdVolumeSize = lens _autoScalingLaunchConfigurationBlockDeviceVolumeSize (\s a -> s { _autoScalingLaunchConfigurationBlockDeviceVolumeSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig-blockdev-template.html#cfn-as-launchconfig-blockdev-template-volumetype
+aslcbdVolumeType :: Lens' AutoScalingLaunchConfigurationBlockDevice (Maybe (Val Text))
+aslcbdVolumeType = lens _autoScalingLaunchConfigurationBlockDeviceVolumeType (\s a -> s { _autoScalingLaunchConfigurationBlockDeviceVolumeType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingLaunchConfigurationBlockDeviceMapping.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingLaunchConfigurationBlockDeviceMapping.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AutoScalingLaunchConfigurationBlockDeviceMapping.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig-blockdev-mapping.html
+
+module Stratosphere.ResourceProperties.AutoScalingLaunchConfigurationBlockDeviceMapping where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.AutoScalingLaunchConfigurationBlockDevice
+
+-- | Full data type definition for
+-- | AutoScalingLaunchConfigurationBlockDeviceMapping. See
+-- | 'autoScalingLaunchConfigurationBlockDeviceMapping' for a more convenient
+-- | constructor.
+data AutoScalingLaunchConfigurationBlockDeviceMapping =
+  AutoScalingLaunchConfigurationBlockDeviceMapping
+  { _autoScalingLaunchConfigurationBlockDeviceMappingDeviceName :: Val Text
+  , _autoScalingLaunchConfigurationBlockDeviceMappingEbs :: Maybe AutoScalingLaunchConfigurationBlockDevice
+  , _autoScalingLaunchConfigurationBlockDeviceMappingNoDevice :: Maybe (Val Bool')
+  , _autoScalingLaunchConfigurationBlockDeviceMappingVirtualName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON AutoScalingLaunchConfigurationBlockDeviceMapping where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 49, omitNothingFields = True }
+
+instance FromJSON AutoScalingLaunchConfigurationBlockDeviceMapping where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 49, omitNothingFields = True }
+
+-- | Constructor for 'AutoScalingLaunchConfigurationBlockDeviceMapping'
+-- | containing required fields as arguments.
+autoScalingLaunchConfigurationBlockDeviceMapping
+  :: Val Text -- ^ 'aslcbdmDeviceName'
+  -> AutoScalingLaunchConfigurationBlockDeviceMapping
+autoScalingLaunchConfigurationBlockDeviceMapping deviceNamearg =
+  AutoScalingLaunchConfigurationBlockDeviceMapping
+  { _autoScalingLaunchConfigurationBlockDeviceMappingDeviceName = deviceNamearg
+  , _autoScalingLaunchConfigurationBlockDeviceMappingEbs = Nothing
+  , _autoScalingLaunchConfigurationBlockDeviceMappingNoDevice = Nothing
+  , _autoScalingLaunchConfigurationBlockDeviceMappingVirtualName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig-blockdev-mapping.html#cfn-as-launchconfig-blockdev-mapping-devicename
+aslcbdmDeviceName :: Lens' AutoScalingLaunchConfigurationBlockDeviceMapping (Val Text)
+aslcbdmDeviceName = lens _autoScalingLaunchConfigurationBlockDeviceMappingDeviceName (\s a -> s { _autoScalingLaunchConfigurationBlockDeviceMappingDeviceName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig-blockdev-mapping.html#cfn-as-launchconfig-blockdev-mapping-ebs
+aslcbdmEbs :: Lens' AutoScalingLaunchConfigurationBlockDeviceMapping (Maybe AutoScalingLaunchConfigurationBlockDevice)
+aslcbdmEbs = lens _autoScalingLaunchConfigurationBlockDeviceMappingEbs (\s a -> s { _autoScalingLaunchConfigurationBlockDeviceMappingEbs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig-blockdev-mapping.html#cfn-as-launchconfig-blockdev-mapping-nodevice
+aslcbdmNoDevice :: Lens' AutoScalingLaunchConfigurationBlockDeviceMapping (Maybe (Val Bool'))
+aslcbdmNoDevice = lens _autoScalingLaunchConfigurationBlockDeviceMappingNoDevice (\s a -> s { _autoScalingLaunchConfigurationBlockDeviceMappingNoDevice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig-blockdev-mapping.html#cfn-as-launchconfig-blockdev-mapping-virtualname
+aslcbdmVirtualName :: Lens' AutoScalingLaunchConfigurationBlockDeviceMapping (Maybe (Val Text))
+aslcbdmVirtualName = lens _autoScalingLaunchConfigurationBlockDeviceMappingVirtualName (\s a -> s { _autoScalingLaunchConfigurationBlockDeviceMappingVirtualName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingMetricsCollection.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingMetricsCollection.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/AutoScalingMetricsCollection.hs
+++ /dev/null
@@ -1,55 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The MetricsCollection is a property of the
--- AWS::AutoScaling::AutoScalingGroup resource that describes the group
--- metrics that an Auto Scaling group sends to CloudWatch. These metrics
--- describe the group rather than any of its instances. For more information,
--- see EnableMetricsCollection in the Auto Scaling API Reference.
-
-module Stratosphere.ResourceProperties.AutoScalingMetricsCollection where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for AutoScalingMetricsCollection. See
--- 'autoScalingMetricsCollection' for a more convenient constructor.
-data AutoScalingMetricsCollection =
-  AutoScalingMetricsCollection
-  { _autoScalingMetricsCollectionGranularity :: Val Text
-  , _autoScalingMetricsCollectionMetrics :: Maybe [Val Text]
-  } deriving (Show, Generic)
-
-instance ToJSON AutoScalingMetricsCollection where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
-
-instance FromJSON AutoScalingMetricsCollection where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
-
--- | Constructor for 'AutoScalingMetricsCollection' containing required fields
--- as arguments.
-autoScalingMetricsCollection
-  :: Val Text -- ^ 'asmcGranularity'
-  -> AutoScalingMetricsCollection
-autoScalingMetricsCollection granularityarg =
-  AutoScalingMetricsCollection
-  { _autoScalingMetricsCollectionGranularity = granularityarg
-  , _autoScalingMetricsCollectionMetrics = Nothing
-  }
-
--- | The frequency at which Auto Scaling sends aggregated data to CloudWatch.
--- For example, you can specify 1Minute to send aggregated data to CloudWatch
--- every minute.
-asmcGranularity :: Lens' AutoScalingMetricsCollection (Val Text)
-asmcGranularity = lens _autoScalingMetricsCollectionGranularity (\s a -> s { _autoScalingMetricsCollectionGranularity = a })
-
--- | The list of metrics to collect. If you don't specify any metrics, all
--- metrics are enabled.
-asmcMetrics :: Lens' AutoScalingMetricsCollection (Maybe [Val Text])
-asmcMetrics = lens _autoScalingMetricsCollectionMetrics (\s a -> s { _autoScalingMetricsCollectionMetrics = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingNotificationConfigurations.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingNotificationConfigurations.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/AutoScalingNotificationConfigurations.hs
+++ /dev/null
@@ -1,57 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The NotificationConfigurations property is an embedded property of the
--- AWS::AutoScaling::AutoScalingGroup resource that specifies the events for
--- which the Auto Scaling group sends notifications.
-
-module Stratosphere.ResourceProperties.AutoScalingNotificationConfigurations where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for AutoScalingNotificationConfigurations. See
--- 'autoScalingNotificationConfigurations' for a more convenient constructor.
-data AutoScalingNotificationConfigurations =
-  AutoScalingNotificationConfigurations
-  { _autoScalingNotificationConfigurationsNotificationTypes :: [Val Text]
-  , _autoScalingNotificationConfigurationsTopicARN :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON AutoScalingNotificationConfigurations where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
-
-instance FromJSON AutoScalingNotificationConfigurations where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
-
--- | Constructor for 'AutoScalingNotificationConfigurations' containing
--- required fields as arguments.
-autoScalingNotificationConfigurations
-  :: [Val Text] -- ^ 'asncNotificationTypes'
-  -> Val Text -- ^ 'asncTopicARN'
-  -> AutoScalingNotificationConfigurations
-autoScalingNotificationConfigurations notificationTypesarg topicARNarg =
-  AutoScalingNotificationConfigurations
-  { _autoScalingNotificationConfigurationsNotificationTypes = notificationTypesarg
-  , _autoScalingNotificationConfigurationsTopicARN = topicARNarg
-  }
-
--- | A list of event types that trigger a notification. Event types can
--- include any of the following types: autoscaling:EC2_INSTANCE_LAUNCH,
--- autoscaling:EC2_INSTANCE_LAUNCH_ERROR, autoscaling:EC2_INSTANCE_TERMINATE,
--- autoscaling:EC2_INSTANCE_TERMINATE_ERROR, and
--- autoscaling:TEST_NOTIFICATION. For more information about event types, see
--- DescribeAutoScalingNotificationTypes in the Auto Scaling API Reference.
-asncNotificationTypes :: Lens' AutoScalingNotificationConfigurations [Val Text]
-asncNotificationTypes = lens _autoScalingNotificationConfigurationsNotificationTypes (\s a -> s { _autoScalingNotificationConfigurationsNotificationTypes = a })
-
--- | The Amazon Resource Name (ARN) of the Amazon Simple Notification Service
--- (SNS) topic.
-asncTopicARN :: Lens' AutoScalingNotificationConfigurations (Val Text)
-asncTopicARN = lens _autoScalingNotificationConfigurationsTopicARN (\s a -> s { _autoScalingNotificationConfigurationsTopicARN = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingScalingPolicyStepAdjustment.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingScalingPolicyStepAdjustment.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AutoScalingScalingPolicyStepAdjustment.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-stepadjustments.html
+
+module Stratosphere.ResourceProperties.AutoScalingScalingPolicyStepAdjustment where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for AutoScalingScalingPolicyStepAdjustment. See
+-- | 'autoScalingScalingPolicyStepAdjustment' for a more convenient
+-- | constructor.
+data AutoScalingScalingPolicyStepAdjustment =
+  AutoScalingScalingPolicyStepAdjustment
+  { _autoScalingScalingPolicyStepAdjustmentMetricIntervalLowerBound :: Maybe (Val Double')
+  , _autoScalingScalingPolicyStepAdjustmentMetricIntervalUpperBound :: Maybe (Val Double')
+  , _autoScalingScalingPolicyStepAdjustmentScalingAdjustment :: Val Integer'
+  } deriving (Show, Generic)
+
+instance ToJSON AutoScalingScalingPolicyStepAdjustment where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+instance FromJSON AutoScalingScalingPolicyStepAdjustment where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+-- | Constructor for 'AutoScalingScalingPolicyStepAdjustment' containing
+-- | required fields as arguments.
+autoScalingScalingPolicyStepAdjustment
+  :: Val Integer' -- ^ 'asspsaScalingAdjustment'
+  -> AutoScalingScalingPolicyStepAdjustment
+autoScalingScalingPolicyStepAdjustment scalingAdjustmentarg =
+  AutoScalingScalingPolicyStepAdjustment
+  { _autoScalingScalingPolicyStepAdjustmentMetricIntervalLowerBound = Nothing
+  , _autoScalingScalingPolicyStepAdjustmentMetricIntervalUpperBound = Nothing
+  , _autoScalingScalingPolicyStepAdjustmentScalingAdjustment = scalingAdjustmentarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-stepadjustments.html#cfn-autoscaling-scalingpolicy-stepadjustment-metricintervallowerbound
+asspsaMetricIntervalLowerBound :: Lens' AutoScalingScalingPolicyStepAdjustment (Maybe (Val Double'))
+asspsaMetricIntervalLowerBound = lens _autoScalingScalingPolicyStepAdjustmentMetricIntervalLowerBound (\s a -> s { _autoScalingScalingPolicyStepAdjustmentMetricIntervalLowerBound = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-stepadjustments.html#cfn-autoscaling-scalingpolicy-stepadjustment-metricintervalupperbound
+asspsaMetricIntervalUpperBound :: Lens' AutoScalingScalingPolicyStepAdjustment (Maybe (Val Double'))
+asspsaMetricIntervalUpperBound = lens _autoScalingScalingPolicyStepAdjustmentMetricIntervalUpperBound (\s a -> s { _autoScalingScalingPolicyStepAdjustmentMetricIntervalUpperBound = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-stepadjustments.html#cfn-autoscaling-scalingpolicy-stepadjustment-scalingadjustment
+asspsaScalingAdjustment :: Lens' AutoScalingScalingPolicyStepAdjustment (Val Integer')
+asspsaScalingAdjustment = lens _autoScalingScalingPolicyStepAdjustmentScalingAdjustment (\s a -> s { _autoScalingScalingPolicyStepAdjustmentScalingAdjustment = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingTags.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingTags.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/AutoScalingTags.hs
+++ /dev/null
@@ -1,63 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The Auto Scaling Tags property is an embedded property of the
--- AWS::AutoScaling::AutoScalingGroup type. For more information about tags,
--- go to Tagging Auto Scaling Groups and Amazon EC2 Instances in the Auto
--- Scaling User Guide. AWS CloudFormation adds the following tags to all Auto
--- Scaling groups and associated instances:
-
-module Stratosphere.ResourceProperties.AutoScalingTags where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for AutoScalingTags. See 'autoScalingTags' for
--- a more convenient constructor.
-data AutoScalingTags =
-  AutoScalingTags
-  { _autoScalingTagsKey :: Val Text
-  , _autoScalingTagsValue :: Val Text
-  , _autoScalingTagsPropagateAtLaunch :: Val Bool'
-  } deriving (Show, Generic)
-
-instance ToJSON AutoScalingTags where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
-
-instance FromJSON AutoScalingTags where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
-
--- | Constructor for 'AutoScalingTags' containing required fields as
--- arguments.
-autoScalingTags
-  :: Val Text -- ^ 'astKey'
-  -> Val Text -- ^ 'astValue'
-  -> Val Bool' -- ^ 'astPropagateAtLaunch'
-  -> AutoScalingTags
-autoScalingTags keyarg valuearg propagateAtLauncharg =
-  AutoScalingTags
-  { _autoScalingTagsKey = keyarg
-  , _autoScalingTagsValue = valuearg
-  , _autoScalingTagsPropagateAtLaunch = propagateAtLauncharg
-  }
-
--- | The key name of the tag.
-astKey :: Lens' AutoScalingTags (Val Text)
-astKey = lens _autoScalingTagsKey (\s a -> s { _autoScalingTagsKey = a })
-
--- | The value for the tag.
-astValue :: Lens' AutoScalingTags (Val Text)
-astValue = lens _autoScalingTagsValue (\s a -> s { _autoScalingTagsValue = a })
-
--- | Set to true if you want AWS CloudFormation to copy the tag to EC2
--- instances that are launched as part of the auto scaling group. Set to false
--- if you want the tag attached only to the auto scaling group and not copied
--- to any instances launched as part of the auto scaling group.
-astPropagateAtLaunch :: Lens' AutoScalingTags (Val Bool')
-astPropagateAtLaunch = lens _autoScalingTagsPropagateAtLaunch (\s a -> s { _autoScalingTagsPropagateAtLaunch = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CertificateManagerCertificateDomainValidationOption.hs b/library-gen/Stratosphere/ResourceProperties/CertificateManagerCertificateDomainValidationOption.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CertificateManagerCertificateDomainValidationOption.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-certificatemanager-certificate-domainvalidationoption.html
+
+module Stratosphere.ResourceProperties.CertificateManagerCertificateDomainValidationOption where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | CertificateManagerCertificateDomainValidationOption. See
+-- | 'certificateManagerCertificateDomainValidationOption' for a more
+-- | convenient constructor.
+data CertificateManagerCertificateDomainValidationOption =
+  CertificateManagerCertificateDomainValidationOption
+  { _certificateManagerCertificateDomainValidationOptionDomainName :: Val Text
+  , _certificateManagerCertificateDomainValidationOptionValidationDomain :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CertificateManagerCertificateDomainValidationOption where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 52, omitNothingFields = True }
+
+instance FromJSON CertificateManagerCertificateDomainValidationOption where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 52, omitNothingFields = True }
+
+-- | Constructor for 'CertificateManagerCertificateDomainValidationOption'
+-- | containing required fields as arguments.
+certificateManagerCertificateDomainValidationOption
+  :: Val Text -- ^ 'cmcdvoDomainName'
+  -> Val Text -- ^ 'cmcdvoValidationDomain'
+  -> CertificateManagerCertificateDomainValidationOption
+certificateManagerCertificateDomainValidationOption domainNamearg validationDomainarg =
+  CertificateManagerCertificateDomainValidationOption
+  { _certificateManagerCertificateDomainValidationOptionDomainName = domainNamearg
+  , _certificateManagerCertificateDomainValidationOptionValidationDomain = validationDomainarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-certificatemanager-certificate-domainvalidationoption.html#cfn-certificatemanager-certificate-domainvalidationoptions-domainname
+cmcdvoDomainName :: Lens' CertificateManagerCertificateDomainValidationOption (Val Text)
+cmcdvoDomainName = lens _certificateManagerCertificateDomainValidationOptionDomainName (\s a -> s { _certificateManagerCertificateDomainValidationOptionDomainName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-certificatemanager-certificate-domainvalidationoption.html#cfn-certificatemanager-certificate-domainvalidationoption-validationdomain
+cmcdvoValidationDomain :: Lens' CertificateManagerCertificateDomainValidationOption (Val Text)
+cmcdvoValidationDomain = lens _certificateManagerCertificateDomainValidationOptionValidationDomain (\s a -> s { _certificateManagerCertificateDomainValidationOptionValidationDomain = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCacheBehavior.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCacheBehavior.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCacheBehavior.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachebehavior.html
+
+module Stratosphere.ResourceProperties.CloudFrontDistributionCacheBehavior where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CloudFrontDistributionForwardedValues
+
+-- | Full data type definition for CloudFrontDistributionCacheBehavior. See
+-- | 'cloudFrontDistributionCacheBehavior' for a more convenient constructor.
+data CloudFrontDistributionCacheBehavior =
+  CloudFrontDistributionCacheBehavior
+  { _cloudFrontDistributionCacheBehaviorAllowedMethods :: Maybe [Val Text]
+  , _cloudFrontDistributionCacheBehaviorCachedMethods :: Maybe [Val Text]
+  , _cloudFrontDistributionCacheBehaviorCompress :: Maybe (Val Bool')
+  , _cloudFrontDistributionCacheBehaviorDefaultTTL :: Maybe (Val Integer')
+  , _cloudFrontDistributionCacheBehaviorForwardedValues :: CloudFrontDistributionForwardedValues
+  , _cloudFrontDistributionCacheBehaviorMaxTTL :: Maybe (Val Integer')
+  , _cloudFrontDistributionCacheBehaviorMinTTL :: Maybe (Val Integer')
+  , _cloudFrontDistributionCacheBehaviorPathPattern :: Val Text
+  , _cloudFrontDistributionCacheBehaviorSmoothStreaming :: Maybe (Val Bool')
+  , _cloudFrontDistributionCacheBehaviorTargetOriginId :: Val Text
+  , _cloudFrontDistributionCacheBehaviorTrustedSigners :: Maybe [Val Text]
+  , _cloudFrontDistributionCacheBehaviorViewerProtocolPolicy :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFrontDistributionCacheBehavior where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+instance FromJSON CloudFrontDistributionCacheBehavior where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+-- | Constructor for 'CloudFrontDistributionCacheBehavior' containing required
+-- | fields as arguments.
+cloudFrontDistributionCacheBehavior
+  :: CloudFrontDistributionForwardedValues -- ^ 'cfdcbForwardedValues'
+  -> Val Text -- ^ 'cfdcbPathPattern'
+  -> Val Text -- ^ 'cfdcbTargetOriginId'
+  -> Val Text -- ^ 'cfdcbViewerProtocolPolicy'
+  -> CloudFrontDistributionCacheBehavior
+cloudFrontDistributionCacheBehavior forwardedValuesarg pathPatternarg targetOriginIdarg viewerProtocolPolicyarg =
+  CloudFrontDistributionCacheBehavior
+  { _cloudFrontDistributionCacheBehaviorAllowedMethods = Nothing
+  , _cloudFrontDistributionCacheBehaviorCachedMethods = Nothing
+  , _cloudFrontDistributionCacheBehaviorCompress = Nothing
+  , _cloudFrontDistributionCacheBehaviorDefaultTTL = Nothing
+  , _cloudFrontDistributionCacheBehaviorForwardedValues = forwardedValuesarg
+  , _cloudFrontDistributionCacheBehaviorMaxTTL = Nothing
+  , _cloudFrontDistributionCacheBehaviorMinTTL = Nothing
+  , _cloudFrontDistributionCacheBehaviorPathPattern = pathPatternarg
+  , _cloudFrontDistributionCacheBehaviorSmoothStreaming = Nothing
+  , _cloudFrontDistributionCacheBehaviorTargetOriginId = targetOriginIdarg
+  , _cloudFrontDistributionCacheBehaviorTrustedSigners = Nothing
+  , _cloudFrontDistributionCacheBehaviorViewerProtocolPolicy = viewerProtocolPolicyarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachebehavior.html#cfn-cloudfront-cachebehavior-allowedmethods
+cfdcbAllowedMethods :: Lens' CloudFrontDistributionCacheBehavior (Maybe [Val Text])
+cfdcbAllowedMethods = lens _cloudFrontDistributionCacheBehaviorAllowedMethods (\s a -> s { _cloudFrontDistributionCacheBehaviorAllowedMethods = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachebehavior.html#cfn-cloudfront-cachebehavior-cachedmethods
+cfdcbCachedMethods :: Lens' CloudFrontDistributionCacheBehavior (Maybe [Val Text])
+cfdcbCachedMethods = lens _cloudFrontDistributionCacheBehaviorCachedMethods (\s a -> s { _cloudFrontDistributionCacheBehaviorCachedMethods = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachebehavior.html#cfn-cloudfront-cachebehavior-compress
+cfdcbCompress :: Lens' CloudFrontDistributionCacheBehavior (Maybe (Val Bool'))
+cfdcbCompress = lens _cloudFrontDistributionCacheBehaviorCompress (\s a -> s { _cloudFrontDistributionCacheBehaviorCompress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachebehavior.html#cfn-cloudfront-cachebehavior-defaultttl
+cfdcbDefaultTTL :: Lens' CloudFrontDistributionCacheBehavior (Maybe (Val Integer'))
+cfdcbDefaultTTL = lens _cloudFrontDistributionCacheBehaviorDefaultTTL (\s a -> s { _cloudFrontDistributionCacheBehaviorDefaultTTL = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachebehavior.html#cfn-cloudfront-cachebehavior-forwardedvalues
+cfdcbForwardedValues :: Lens' CloudFrontDistributionCacheBehavior CloudFrontDistributionForwardedValues
+cfdcbForwardedValues = lens _cloudFrontDistributionCacheBehaviorForwardedValues (\s a -> s { _cloudFrontDistributionCacheBehaviorForwardedValues = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachebehavior.html#cfn-cloudfront-cachebehavior-maxttl
+cfdcbMaxTTL :: Lens' CloudFrontDistributionCacheBehavior (Maybe (Val Integer'))
+cfdcbMaxTTL = lens _cloudFrontDistributionCacheBehaviorMaxTTL (\s a -> s { _cloudFrontDistributionCacheBehaviorMaxTTL = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachebehavior.html#cfn-cloudfront-cachebehavior-minttl
+cfdcbMinTTL :: Lens' CloudFrontDistributionCacheBehavior (Maybe (Val Integer'))
+cfdcbMinTTL = lens _cloudFrontDistributionCacheBehaviorMinTTL (\s a -> s { _cloudFrontDistributionCacheBehaviorMinTTL = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachebehavior.html#cfn-cloudfront-cachebehavior-pathpattern
+cfdcbPathPattern :: Lens' CloudFrontDistributionCacheBehavior (Val Text)
+cfdcbPathPattern = lens _cloudFrontDistributionCacheBehaviorPathPattern (\s a -> s { _cloudFrontDistributionCacheBehaviorPathPattern = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachebehavior.html#cfn-cloudfront-cachebehavior-smoothstreaming
+cfdcbSmoothStreaming :: Lens' CloudFrontDistributionCacheBehavior (Maybe (Val Bool'))
+cfdcbSmoothStreaming = lens _cloudFrontDistributionCacheBehaviorSmoothStreaming (\s a -> s { _cloudFrontDistributionCacheBehaviorSmoothStreaming = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachebehavior.html#cfn-cloudfront-cachebehavior-targetoriginid
+cfdcbTargetOriginId :: Lens' CloudFrontDistributionCacheBehavior (Val Text)
+cfdcbTargetOriginId = lens _cloudFrontDistributionCacheBehaviorTargetOriginId (\s a -> s { _cloudFrontDistributionCacheBehaviorTargetOriginId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachebehavior.html#cfn-cloudfront-cachebehavior-trustedsigners
+cfdcbTrustedSigners :: Lens' CloudFrontDistributionCacheBehavior (Maybe [Val Text])
+cfdcbTrustedSigners = lens _cloudFrontDistributionCacheBehaviorTrustedSigners (\s a -> s { _cloudFrontDistributionCacheBehaviorTrustedSigners = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachebehavior.html#cfn-cloudfront-cachebehavior-viewerprotocolpolicy
+cfdcbViewerProtocolPolicy :: Lens' CloudFrontDistributionCacheBehavior (Val Text)
+cfdcbViewerProtocolPolicy = lens _cloudFrontDistributionCacheBehaviorViewerProtocolPolicy (\s a -> s { _cloudFrontDistributionCacheBehaviorViewerProtocolPolicy = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCookies.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCookies.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCookies.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-forwardedvalues-cookies.html
+
+module Stratosphere.ResourceProperties.CloudFrontDistributionCookies where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CloudFrontDistributionCookies. See
+-- | 'cloudFrontDistributionCookies' for a more convenient constructor.
+data CloudFrontDistributionCookies =
+  CloudFrontDistributionCookies
+  { _cloudFrontDistributionCookiesForward :: Val Text
+  , _cloudFrontDistributionCookiesWhitelistedNames :: Maybe [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFrontDistributionCookies where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+instance FromJSON CloudFrontDistributionCookies where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+-- | Constructor for 'CloudFrontDistributionCookies' containing required
+-- | fields as arguments.
+cloudFrontDistributionCookies
+  :: Val Text -- ^ 'cfdcForward'
+  -> CloudFrontDistributionCookies
+cloudFrontDistributionCookies forwardarg =
+  CloudFrontDistributionCookies
+  { _cloudFrontDistributionCookiesForward = forwardarg
+  , _cloudFrontDistributionCookiesWhitelistedNames = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-forwardedvalues-cookies.html#cfn-cloudfront-forwardedvalues-cookies-forward
+cfdcForward :: Lens' CloudFrontDistributionCookies (Val Text)
+cfdcForward = lens _cloudFrontDistributionCookiesForward (\s a -> s { _cloudFrontDistributionCookiesForward = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-forwardedvalues-cookies.html#cfn-cloudfront-forwardedvalues-cookies-whitelistednames
+cfdcWhitelistedNames :: Lens' CloudFrontDistributionCookies (Maybe [Val Text])
+cfdcWhitelistedNames = lens _cloudFrontDistributionCookiesWhitelistedNames (\s a -> s { _cloudFrontDistributionCookiesWhitelistedNames = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCustomErrorResponse.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCustomErrorResponse.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCustomErrorResponse.hs
@@ -0,0 +1,61 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-customerrorresponse.html
+
+module Stratosphere.ResourceProperties.CloudFrontDistributionCustomErrorResponse where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CloudFrontDistributionCustomErrorResponse.
+-- | See 'cloudFrontDistributionCustomErrorResponse' for a more convenient
+-- | constructor.
+data CloudFrontDistributionCustomErrorResponse =
+  CloudFrontDistributionCustomErrorResponse
+  { _cloudFrontDistributionCustomErrorResponseErrorCachingMinTTL :: Maybe (Val Integer')
+  , _cloudFrontDistributionCustomErrorResponseErrorCode :: Val Integer'
+  , _cloudFrontDistributionCustomErrorResponseResponseCode :: Maybe (Val Integer')
+  , _cloudFrontDistributionCustomErrorResponseResponsePagePath :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFrontDistributionCustomErrorResponse where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+
+instance FromJSON CloudFrontDistributionCustomErrorResponse where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+
+-- | Constructor for 'CloudFrontDistributionCustomErrorResponse' containing
+-- | required fields as arguments.
+cloudFrontDistributionCustomErrorResponse
+  :: Val Integer' -- ^ 'cfdcerErrorCode'
+  -> CloudFrontDistributionCustomErrorResponse
+cloudFrontDistributionCustomErrorResponse errorCodearg =
+  CloudFrontDistributionCustomErrorResponse
+  { _cloudFrontDistributionCustomErrorResponseErrorCachingMinTTL = Nothing
+  , _cloudFrontDistributionCustomErrorResponseErrorCode = errorCodearg
+  , _cloudFrontDistributionCustomErrorResponseResponseCode = Nothing
+  , _cloudFrontDistributionCustomErrorResponseResponsePagePath = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-customerrorresponse.html#cfn-cloudfront-distributionconfig-customerrorresponse-errorcachingminttl
+cfdcerErrorCachingMinTTL :: Lens' CloudFrontDistributionCustomErrorResponse (Maybe (Val Integer'))
+cfdcerErrorCachingMinTTL = lens _cloudFrontDistributionCustomErrorResponseErrorCachingMinTTL (\s a -> s { _cloudFrontDistributionCustomErrorResponseErrorCachingMinTTL = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-customerrorresponse.html#cfn-cloudfront-distributionconfig-customerrorresponse-errorcode
+cfdcerErrorCode :: Lens' CloudFrontDistributionCustomErrorResponse (Val Integer')
+cfdcerErrorCode = lens _cloudFrontDistributionCustomErrorResponseErrorCode (\s a -> s { _cloudFrontDistributionCustomErrorResponseErrorCode = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-customerrorresponse.html#cfn-cloudfront-distributionconfig-customerrorresponse-responsecode
+cfdcerResponseCode :: Lens' CloudFrontDistributionCustomErrorResponse (Maybe (Val Integer'))
+cfdcerResponseCode = lens _cloudFrontDistributionCustomErrorResponseResponseCode (\s a -> s { _cloudFrontDistributionCustomErrorResponseResponseCode = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-customerrorresponse.html#cfn-cloudfront-distributionconfig-customerrorresponse-responsepagepath
+cfdcerResponsePagePath :: Lens' CloudFrontDistributionCustomErrorResponse (Maybe (Val Text))
+cfdcerResponsePagePath = lens _cloudFrontDistributionCustomErrorResponseResponsePagePath (\s a -> s { _cloudFrontDistributionCustomErrorResponseResponsePagePath = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCustomOriginConfig.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCustomOriginConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionCustomOriginConfig.hs
@@ -0,0 +1,61 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-customorigin.html
+
+module Stratosphere.ResourceProperties.CloudFrontDistributionCustomOriginConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CloudFrontDistributionCustomOriginConfig.
+-- | See 'cloudFrontDistributionCustomOriginConfig' for a more convenient
+-- | constructor.
+data CloudFrontDistributionCustomOriginConfig =
+  CloudFrontDistributionCustomOriginConfig
+  { _cloudFrontDistributionCustomOriginConfigHTTPPort :: Maybe (Val Integer')
+  , _cloudFrontDistributionCustomOriginConfigHTTPSPort :: Maybe (Val Integer')
+  , _cloudFrontDistributionCustomOriginConfigOriginProtocolPolicy :: Val Text
+  , _cloudFrontDistributionCustomOriginConfigOriginSSLProtocols :: Maybe [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFrontDistributionCustomOriginConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+instance FromJSON CloudFrontDistributionCustomOriginConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+-- | Constructor for 'CloudFrontDistributionCustomOriginConfig' containing
+-- | required fields as arguments.
+cloudFrontDistributionCustomOriginConfig
+  :: Val Text -- ^ 'cfdcocOriginProtocolPolicy'
+  -> CloudFrontDistributionCustomOriginConfig
+cloudFrontDistributionCustomOriginConfig originProtocolPolicyarg =
+  CloudFrontDistributionCustomOriginConfig
+  { _cloudFrontDistributionCustomOriginConfigHTTPPort = Nothing
+  , _cloudFrontDistributionCustomOriginConfigHTTPSPort = Nothing
+  , _cloudFrontDistributionCustomOriginConfigOriginProtocolPolicy = originProtocolPolicyarg
+  , _cloudFrontDistributionCustomOriginConfigOriginSSLProtocols = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-customorigin.html#cfn-cloudfront-customorigin-httpport
+cfdcocHTTPPort :: Lens' CloudFrontDistributionCustomOriginConfig (Maybe (Val Integer'))
+cfdcocHTTPPort = lens _cloudFrontDistributionCustomOriginConfigHTTPPort (\s a -> s { _cloudFrontDistributionCustomOriginConfigHTTPPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-customorigin.html#cfn-cloudfront-customorigin-httpsport
+cfdcocHTTPSPort :: Lens' CloudFrontDistributionCustomOriginConfig (Maybe (Val Integer'))
+cfdcocHTTPSPort = lens _cloudFrontDistributionCustomOriginConfigHTTPSPort (\s a -> s { _cloudFrontDistributionCustomOriginConfigHTTPSPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-customorigin.html#cfn-cloudfront-customorigin-originprotocolpolicy
+cfdcocOriginProtocolPolicy :: Lens' CloudFrontDistributionCustomOriginConfig (Val Text)
+cfdcocOriginProtocolPolicy = lens _cloudFrontDistributionCustomOriginConfigOriginProtocolPolicy (\s a -> s { _cloudFrontDistributionCustomOriginConfigOriginProtocolPolicy = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-customorigin.html#cfn-cloudfront-customorigin-originsslprotocols
+cfdcocOriginSSLProtocols :: Lens' CloudFrontDistributionCustomOriginConfig (Maybe [Val Text])
+cfdcocOriginSSLProtocols = lens _cloudFrontDistributionCustomOriginConfigOriginSSLProtocols (\s a -> s { _cloudFrontDistributionCustomOriginConfigOriginSSLProtocols = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionDefaultCacheBehavior.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionDefaultCacheBehavior.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionDefaultCacheBehavior.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-defaultcachebehavior.html
+
+module Stratosphere.ResourceProperties.CloudFrontDistributionDefaultCacheBehavior where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CloudFrontDistributionForwardedValues
+
+-- | Full data type definition for CloudFrontDistributionDefaultCacheBehavior.
+-- | See 'cloudFrontDistributionDefaultCacheBehavior' for a more convenient
+-- | constructor.
+data CloudFrontDistributionDefaultCacheBehavior =
+  CloudFrontDistributionDefaultCacheBehavior
+  { _cloudFrontDistributionDefaultCacheBehaviorAllowedMethods :: Maybe [Val Text]
+  , _cloudFrontDistributionDefaultCacheBehaviorCachedMethods :: Maybe [Val Text]
+  , _cloudFrontDistributionDefaultCacheBehaviorCompress :: Maybe (Val Bool')
+  , _cloudFrontDistributionDefaultCacheBehaviorDefaultTTL :: Maybe (Val Integer')
+  , _cloudFrontDistributionDefaultCacheBehaviorForwardedValues :: CloudFrontDistributionForwardedValues
+  , _cloudFrontDistributionDefaultCacheBehaviorMaxTTL :: Maybe (Val Integer')
+  , _cloudFrontDistributionDefaultCacheBehaviorMinTTL :: Maybe (Val Integer')
+  , _cloudFrontDistributionDefaultCacheBehaviorSmoothStreaming :: Maybe (Val Bool')
+  , _cloudFrontDistributionDefaultCacheBehaviorTargetOriginId :: Val Text
+  , _cloudFrontDistributionDefaultCacheBehaviorTrustedSigners :: Maybe [Val Text]
+  , _cloudFrontDistributionDefaultCacheBehaviorViewerProtocolPolicy :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFrontDistributionDefaultCacheBehavior where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 43, omitNothingFields = True }
+
+instance FromJSON CloudFrontDistributionDefaultCacheBehavior where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 43, omitNothingFields = True }
+
+-- | Constructor for 'CloudFrontDistributionDefaultCacheBehavior' containing
+-- | required fields as arguments.
+cloudFrontDistributionDefaultCacheBehavior
+  :: CloudFrontDistributionForwardedValues -- ^ 'cfddcbForwardedValues'
+  -> Val Text -- ^ 'cfddcbTargetOriginId'
+  -> Val Text -- ^ 'cfddcbViewerProtocolPolicy'
+  -> CloudFrontDistributionDefaultCacheBehavior
+cloudFrontDistributionDefaultCacheBehavior forwardedValuesarg targetOriginIdarg viewerProtocolPolicyarg =
+  CloudFrontDistributionDefaultCacheBehavior
+  { _cloudFrontDistributionDefaultCacheBehaviorAllowedMethods = Nothing
+  , _cloudFrontDistributionDefaultCacheBehaviorCachedMethods = Nothing
+  , _cloudFrontDistributionDefaultCacheBehaviorCompress = Nothing
+  , _cloudFrontDistributionDefaultCacheBehaviorDefaultTTL = Nothing
+  , _cloudFrontDistributionDefaultCacheBehaviorForwardedValues = forwardedValuesarg
+  , _cloudFrontDistributionDefaultCacheBehaviorMaxTTL = Nothing
+  , _cloudFrontDistributionDefaultCacheBehaviorMinTTL = Nothing
+  , _cloudFrontDistributionDefaultCacheBehaviorSmoothStreaming = Nothing
+  , _cloudFrontDistributionDefaultCacheBehaviorTargetOriginId = targetOriginIdarg
+  , _cloudFrontDistributionDefaultCacheBehaviorTrustedSigners = Nothing
+  , _cloudFrontDistributionDefaultCacheBehaviorViewerProtocolPolicy = viewerProtocolPolicyarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-defaultcachebehavior.html#cfn-cloudfront-defaultcachebehavior-allowedmethods
+cfddcbAllowedMethods :: Lens' CloudFrontDistributionDefaultCacheBehavior (Maybe [Val Text])
+cfddcbAllowedMethods = lens _cloudFrontDistributionDefaultCacheBehaviorAllowedMethods (\s a -> s { _cloudFrontDistributionDefaultCacheBehaviorAllowedMethods = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-defaultcachebehavior.html#cfn-cloudfront-defaultcachebehavior-cachedmethods
+cfddcbCachedMethods :: Lens' CloudFrontDistributionDefaultCacheBehavior (Maybe [Val Text])
+cfddcbCachedMethods = lens _cloudFrontDistributionDefaultCacheBehaviorCachedMethods (\s a -> s { _cloudFrontDistributionDefaultCacheBehaviorCachedMethods = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-defaultcachebehavior.html#cfn-cloudfront-defaultcachebehavior-compress
+cfddcbCompress :: Lens' CloudFrontDistributionDefaultCacheBehavior (Maybe (Val Bool'))
+cfddcbCompress = lens _cloudFrontDistributionDefaultCacheBehaviorCompress (\s a -> s { _cloudFrontDistributionDefaultCacheBehaviorCompress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-defaultcachebehavior.html#cfn-cloudfront-defaultcachebehavior-defaultttl
+cfddcbDefaultTTL :: Lens' CloudFrontDistributionDefaultCacheBehavior (Maybe (Val Integer'))
+cfddcbDefaultTTL = lens _cloudFrontDistributionDefaultCacheBehaviorDefaultTTL (\s a -> s { _cloudFrontDistributionDefaultCacheBehaviorDefaultTTL = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-defaultcachebehavior.html#cfn-cloudfront-defaultcachebehavior-forwardedvalues
+cfddcbForwardedValues :: Lens' CloudFrontDistributionDefaultCacheBehavior CloudFrontDistributionForwardedValues
+cfddcbForwardedValues = lens _cloudFrontDistributionDefaultCacheBehaviorForwardedValues (\s a -> s { _cloudFrontDistributionDefaultCacheBehaviorForwardedValues = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-defaultcachebehavior.html#cfn-cloudfront-defaultcachebehavior-maxttl
+cfddcbMaxTTL :: Lens' CloudFrontDistributionDefaultCacheBehavior (Maybe (Val Integer'))
+cfddcbMaxTTL = lens _cloudFrontDistributionDefaultCacheBehaviorMaxTTL (\s a -> s { _cloudFrontDistributionDefaultCacheBehaviorMaxTTL = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-defaultcachebehavior.html#cfn-cloudfront-defaultcachebehavior-minttl
+cfddcbMinTTL :: Lens' CloudFrontDistributionDefaultCacheBehavior (Maybe (Val Integer'))
+cfddcbMinTTL = lens _cloudFrontDistributionDefaultCacheBehaviorMinTTL (\s a -> s { _cloudFrontDistributionDefaultCacheBehaviorMinTTL = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-defaultcachebehavior.html#cfn-cloudfront-defaultcachebehavior-smoothstreaming
+cfddcbSmoothStreaming :: Lens' CloudFrontDistributionDefaultCacheBehavior (Maybe (Val Bool'))
+cfddcbSmoothStreaming = lens _cloudFrontDistributionDefaultCacheBehaviorSmoothStreaming (\s a -> s { _cloudFrontDistributionDefaultCacheBehaviorSmoothStreaming = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-defaultcachebehavior.html#cfn-cloudfront-defaultcachebehavior-targetoriginid
+cfddcbTargetOriginId :: Lens' CloudFrontDistributionDefaultCacheBehavior (Val Text)
+cfddcbTargetOriginId = lens _cloudFrontDistributionDefaultCacheBehaviorTargetOriginId (\s a -> s { _cloudFrontDistributionDefaultCacheBehaviorTargetOriginId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-defaultcachebehavior.html#cfn-cloudfront-defaultcachebehavior-trustedsigners
+cfddcbTrustedSigners :: Lens' CloudFrontDistributionDefaultCacheBehavior (Maybe [Val Text])
+cfddcbTrustedSigners = lens _cloudFrontDistributionDefaultCacheBehaviorTrustedSigners (\s a -> s { _cloudFrontDistributionDefaultCacheBehaviorTrustedSigners = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-defaultcachebehavior.html#cfn-cloudfront-defaultcachebehavior-viewerprotocolpolicy
+cfddcbViewerProtocolPolicy :: Lens' CloudFrontDistributionDefaultCacheBehavior (Val Text)
+cfddcbViewerProtocolPolicy = lens _cloudFrontDistributionDefaultCacheBehaviorViewerProtocolPolicy (\s a -> s { _cloudFrontDistributionDefaultCacheBehaviorViewerProtocolPolicy = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionDistributionConfig.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionDistributionConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionDistributionConfig.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig.html
+
+module Stratosphere.ResourceProperties.CloudFrontDistributionDistributionConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CloudFrontDistributionCacheBehavior
+import Stratosphere.ResourceProperties.CloudFrontDistributionCustomErrorResponse
+import Stratosphere.ResourceProperties.CloudFrontDistributionDefaultCacheBehavior
+import Stratosphere.ResourceProperties.CloudFrontDistributionLogging
+import Stratosphere.ResourceProperties.CloudFrontDistributionOrigin
+import Stratosphere.ResourceProperties.CloudFrontDistributionRestrictions
+import Stratosphere.ResourceProperties.CloudFrontDistributionViewerCertificate
+
+-- | Full data type definition for CloudFrontDistributionDistributionConfig.
+-- | See 'cloudFrontDistributionDistributionConfig' for a more convenient
+-- | constructor.
+data CloudFrontDistributionDistributionConfig =
+  CloudFrontDistributionDistributionConfig
+  { _cloudFrontDistributionDistributionConfigAliases :: Maybe [Val Text]
+  , _cloudFrontDistributionDistributionConfigCacheBehaviors :: Maybe [CloudFrontDistributionCacheBehavior]
+  , _cloudFrontDistributionDistributionConfigComment :: Maybe (Val Text)
+  , _cloudFrontDistributionDistributionConfigCustomErrorResponses :: Maybe [CloudFrontDistributionCustomErrorResponse]
+  , _cloudFrontDistributionDistributionConfigDefaultCacheBehavior :: CloudFrontDistributionDefaultCacheBehavior
+  , _cloudFrontDistributionDistributionConfigDefaultRootObject :: Maybe (Val Text)
+  , _cloudFrontDistributionDistributionConfigEnabled :: Val Bool'
+  , _cloudFrontDistributionDistributionConfigHttpVersion :: Maybe (Val Text)
+  , _cloudFrontDistributionDistributionConfigLogging :: Maybe CloudFrontDistributionLogging
+  , _cloudFrontDistributionDistributionConfigOrigins :: [CloudFrontDistributionOrigin]
+  , _cloudFrontDistributionDistributionConfigPriceClass :: Maybe (Val Text)
+  , _cloudFrontDistributionDistributionConfigRestrictions :: Maybe CloudFrontDistributionRestrictions
+  , _cloudFrontDistributionDistributionConfigViewerCertificate :: Maybe CloudFrontDistributionViewerCertificate
+  , _cloudFrontDistributionDistributionConfigWebACLId :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFrontDistributionDistributionConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+instance FromJSON CloudFrontDistributionDistributionConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+-- | Constructor for 'CloudFrontDistributionDistributionConfig' containing
+-- | required fields as arguments.
+cloudFrontDistributionDistributionConfig
+  :: CloudFrontDistributionDefaultCacheBehavior -- ^ 'cfddcDefaultCacheBehavior'
+  -> Val Bool' -- ^ 'cfddcEnabled'
+  -> [CloudFrontDistributionOrigin] -- ^ 'cfddcOrigins'
+  -> CloudFrontDistributionDistributionConfig
+cloudFrontDistributionDistributionConfig defaultCacheBehaviorarg enabledarg originsarg =
+  CloudFrontDistributionDistributionConfig
+  { _cloudFrontDistributionDistributionConfigAliases = Nothing
+  , _cloudFrontDistributionDistributionConfigCacheBehaviors = Nothing
+  , _cloudFrontDistributionDistributionConfigComment = Nothing
+  , _cloudFrontDistributionDistributionConfigCustomErrorResponses = Nothing
+  , _cloudFrontDistributionDistributionConfigDefaultCacheBehavior = defaultCacheBehaviorarg
+  , _cloudFrontDistributionDistributionConfigDefaultRootObject = Nothing
+  , _cloudFrontDistributionDistributionConfigEnabled = enabledarg
+  , _cloudFrontDistributionDistributionConfigHttpVersion = Nothing
+  , _cloudFrontDistributionDistributionConfigLogging = Nothing
+  , _cloudFrontDistributionDistributionConfigOrigins = originsarg
+  , _cloudFrontDistributionDistributionConfigPriceClass = Nothing
+  , _cloudFrontDistributionDistributionConfigRestrictions = Nothing
+  , _cloudFrontDistributionDistributionConfigViewerCertificate = Nothing
+  , _cloudFrontDistributionDistributionConfigWebACLId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig.html#cfn-cloudfront-distributionconfig-aliases
+cfddcAliases :: Lens' CloudFrontDistributionDistributionConfig (Maybe [Val Text])
+cfddcAliases = lens _cloudFrontDistributionDistributionConfigAliases (\s a -> s { _cloudFrontDistributionDistributionConfigAliases = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig.html#cfn-cloudfront-distributionconfig-cachebehaviors
+cfddcCacheBehaviors :: Lens' CloudFrontDistributionDistributionConfig (Maybe [CloudFrontDistributionCacheBehavior])
+cfddcCacheBehaviors = lens _cloudFrontDistributionDistributionConfigCacheBehaviors (\s a -> s { _cloudFrontDistributionDistributionConfigCacheBehaviors = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig.html#cfn-cloudfront-distributionconfig-comment
+cfddcComment :: Lens' CloudFrontDistributionDistributionConfig (Maybe (Val Text))
+cfddcComment = lens _cloudFrontDistributionDistributionConfigComment (\s a -> s { _cloudFrontDistributionDistributionConfigComment = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig.html#cfn-cloudfront-distributionconfig-customerrorresponses
+cfddcCustomErrorResponses :: Lens' CloudFrontDistributionDistributionConfig (Maybe [CloudFrontDistributionCustomErrorResponse])
+cfddcCustomErrorResponses = lens _cloudFrontDistributionDistributionConfigCustomErrorResponses (\s a -> s { _cloudFrontDistributionDistributionConfigCustomErrorResponses = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig.html#cfn-cloudfront-distributionconfig-defaultcachebehavior
+cfddcDefaultCacheBehavior :: Lens' CloudFrontDistributionDistributionConfig CloudFrontDistributionDefaultCacheBehavior
+cfddcDefaultCacheBehavior = lens _cloudFrontDistributionDistributionConfigDefaultCacheBehavior (\s a -> s { _cloudFrontDistributionDistributionConfigDefaultCacheBehavior = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig.html#cfn-cloudfront-distributionconfig-defaultrootobject
+cfddcDefaultRootObject :: Lens' CloudFrontDistributionDistributionConfig (Maybe (Val Text))
+cfddcDefaultRootObject = lens _cloudFrontDistributionDistributionConfigDefaultRootObject (\s a -> s { _cloudFrontDistributionDistributionConfigDefaultRootObject = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig.html#cfn-cloudfront-distributionconfig-enabled
+cfddcEnabled :: Lens' CloudFrontDistributionDistributionConfig (Val Bool')
+cfddcEnabled = lens _cloudFrontDistributionDistributionConfigEnabled (\s a -> s { _cloudFrontDistributionDistributionConfigEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig.html#cfn-cloudfront-distributionconfig-httpversion
+cfddcHttpVersion :: Lens' CloudFrontDistributionDistributionConfig (Maybe (Val Text))
+cfddcHttpVersion = lens _cloudFrontDistributionDistributionConfigHttpVersion (\s a -> s { _cloudFrontDistributionDistributionConfigHttpVersion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig.html#cfn-cloudfront-distributionconfig-logging
+cfddcLogging :: Lens' CloudFrontDistributionDistributionConfig (Maybe CloudFrontDistributionLogging)
+cfddcLogging = lens _cloudFrontDistributionDistributionConfigLogging (\s a -> s { _cloudFrontDistributionDistributionConfigLogging = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig.html#cfn-cloudfront-distributionconfig-origins
+cfddcOrigins :: Lens' CloudFrontDistributionDistributionConfig [CloudFrontDistributionOrigin]
+cfddcOrigins = lens _cloudFrontDistributionDistributionConfigOrigins (\s a -> s { _cloudFrontDistributionDistributionConfigOrigins = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig.html#cfn-cloudfront-distributionconfig-priceclass
+cfddcPriceClass :: Lens' CloudFrontDistributionDistributionConfig (Maybe (Val Text))
+cfddcPriceClass = lens _cloudFrontDistributionDistributionConfigPriceClass (\s a -> s { _cloudFrontDistributionDistributionConfigPriceClass = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig.html#cfn-cloudfront-distributionconfig-restrictions
+cfddcRestrictions :: Lens' CloudFrontDistributionDistributionConfig (Maybe CloudFrontDistributionRestrictions)
+cfddcRestrictions = lens _cloudFrontDistributionDistributionConfigRestrictions (\s a -> s { _cloudFrontDistributionDistributionConfigRestrictions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig.html#cfn-cloudfront-distributionconfig-viewercertificate
+cfddcViewerCertificate :: Lens' CloudFrontDistributionDistributionConfig (Maybe CloudFrontDistributionViewerCertificate)
+cfddcViewerCertificate = lens _cloudFrontDistributionDistributionConfigViewerCertificate (\s a -> s { _cloudFrontDistributionDistributionConfigViewerCertificate = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig.html#cfn-cloudfront-distributionconfig-webaclid
+cfddcWebACLId :: Lens' CloudFrontDistributionDistributionConfig (Maybe (Val Text))
+cfddcWebACLId = lens _cloudFrontDistributionDistributionConfigWebACLId (\s a -> s { _cloudFrontDistributionDistributionConfigWebACLId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionForwardedValues.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionForwardedValues.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionForwardedValues.hs
@@ -0,0 +1,61 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-forwardedvalues.html
+
+module Stratosphere.ResourceProperties.CloudFrontDistributionForwardedValues where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CloudFrontDistributionCookies
+
+-- | Full data type definition for CloudFrontDistributionForwardedValues. See
+-- | 'cloudFrontDistributionForwardedValues' for a more convenient
+-- | constructor.
+data CloudFrontDistributionForwardedValues =
+  CloudFrontDistributionForwardedValues
+  { _cloudFrontDistributionForwardedValuesCookies :: Maybe CloudFrontDistributionCookies
+  , _cloudFrontDistributionForwardedValuesHeaders :: Maybe [Val Text]
+  , _cloudFrontDistributionForwardedValuesQueryString :: Val Bool'
+  , _cloudFrontDistributionForwardedValuesQueryStringCacheKeys :: Maybe [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFrontDistributionForwardedValues where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+
+instance FromJSON CloudFrontDistributionForwardedValues where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+
+-- | Constructor for 'CloudFrontDistributionForwardedValues' containing
+-- | required fields as arguments.
+cloudFrontDistributionForwardedValues
+  :: Val Bool' -- ^ 'cfdfvQueryString'
+  -> CloudFrontDistributionForwardedValues
+cloudFrontDistributionForwardedValues queryStringarg =
+  CloudFrontDistributionForwardedValues
+  { _cloudFrontDistributionForwardedValuesCookies = Nothing
+  , _cloudFrontDistributionForwardedValuesHeaders = Nothing
+  , _cloudFrontDistributionForwardedValuesQueryString = queryStringarg
+  , _cloudFrontDistributionForwardedValuesQueryStringCacheKeys = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-forwardedvalues.html#cfn-cloudfront-forwardedvalues-cookies
+cfdfvCookies :: Lens' CloudFrontDistributionForwardedValues (Maybe CloudFrontDistributionCookies)
+cfdfvCookies = lens _cloudFrontDistributionForwardedValuesCookies (\s a -> s { _cloudFrontDistributionForwardedValuesCookies = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-forwardedvalues.html#cfn-cloudfront-forwardedvalues-headers
+cfdfvHeaders :: Lens' CloudFrontDistributionForwardedValues (Maybe [Val Text])
+cfdfvHeaders = lens _cloudFrontDistributionForwardedValuesHeaders (\s a -> s { _cloudFrontDistributionForwardedValuesHeaders = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-forwardedvalues.html#cfn-cloudfront-forwardedvalues-querystring
+cfdfvQueryString :: Lens' CloudFrontDistributionForwardedValues (Val Bool')
+cfdfvQueryString = lens _cloudFrontDistributionForwardedValuesQueryString (\s a -> s { _cloudFrontDistributionForwardedValuesQueryString = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-forwardedvalues.html#cfn-cloudfront-forwardedvalues-querystringcachekeys
+cfdfvQueryStringCacheKeys :: Lens' CloudFrontDistributionForwardedValues (Maybe [Val Text])
+cfdfvQueryStringCacheKeys = lens _cloudFrontDistributionForwardedValuesQueryStringCacheKeys (\s a -> s { _cloudFrontDistributionForwardedValuesQueryStringCacheKeys = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionGeoRestriction.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionGeoRestriction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionGeoRestriction.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-restrictions-georestriction.html
+
+module Stratosphere.ResourceProperties.CloudFrontDistributionGeoRestriction where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CloudFrontDistributionGeoRestriction. See
+-- | 'cloudFrontDistributionGeoRestriction' for a more convenient constructor.
+data CloudFrontDistributionGeoRestriction =
+  CloudFrontDistributionGeoRestriction
+  { _cloudFrontDistributionGeoRestrictionLocations :: Maybe [Val Text]
+  , _cloudFrontDistributionGeoRestrictionRestrictionType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFrontDistributionGeoRestriction where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+instance FromJSON CloudFrontDistributionGeoRestriction where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+-- | Constructor for 'CloudFrontDistributionGeoRestriction' containing
+-- | required fields as arguments.
+cloudFrontDistributionGeoRestriction
+  :: Val Text -- ^ 'cfdgrRestrictionType'
+  -> CloudFrontDistributionGeoRestriction
+cloudFrontDistributionGeoRestriction restrictionTypearg =
+  CloudFrontDistributionGeoRestriction
+  { _cloudFrontDistributionGeoRestrictionLocations = Nothing
+  , _cloudFrontDistributionGeoRestrictionRestrictionType = restrictionTypearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-restrictions-georestriction.html#cfn-cloudfront-distributionconfig-restrictions-georestriction-locations
+cfdgrLocations :: Lens' CloudFrontDistributionGeoRestriction (Maybe [Val Text])
+cfdgrLocations = lens _cloudFrontDistributionGeoRestrictionLocations (\s a -> s { _cloudFrontDistributionGeoRestrictionLocations = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-restrictions-georestriction.html#cfn-cloudfront-distributionconfig-restrictions-georestriction-restrictiontype
+cfdgrRestrictionType :: Lens' CloudFrontDistributionGeoRestriction (Val Text)
+cfdgrRestrictionType = lens _cloudFrontDistributionGeoRestrictionRestrictionType (\s a -> s { _cloudFrontDistributionGeoRestrictionRestrictionType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionLogging.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionLogging.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionLogging.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-logging.html
+
+module Stratosphere.ResourceProperties.CloudFrontDistributionLogging where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CloudFrontDistributionLogging. See
+-- | 'cloudFrontDistributionLogging' for a more convenient constructor.
+data CloudFrontDistributionLogging =
+  CloudFrontDistributionLogging
+  { _cloudFrontDistributionLoggingBucket :: Val Text
+  , _cloudFrontDistributionLoggingIncludeCookies :: Maybe (Val Bool')
+  , _cloudFrontDistributionLoggingPrefix :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFrontDistributionLogging where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+instance FromJSON CloudFrontDistributionLogging where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+-- | Constructor for 'CloudFrontDistributionLogging' containing required
+-- | fields as arguments.
+cloudFrontDistributionLogging
+  :: Val Text -- ^ 'cfdlBucket'
+  -> CloudFrontDistributionLogging
+cloudFrontDistributionLogging bucketarg =
+  CloudFrontDistributionLogging
+  { _cloudFrontDistributionLoggingBucket = bucketarg
+  , _cloudFrontDistributionLoggingIncludeCookies = Nothing
+  , _cloudFrontDistributionLoggingPrefix = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-logging.html#cfn-cloudfront-logging-bucket
+cfdlBucket :: Lens' CloudFrontDistributionLogging (Val Text)
+cfdlBucket = lens _cloudFrontDistributionLoggingBucket (\s a -> s { _cloudFrontDistributionLoggingBucket = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-logging.html#cfn-cloudfront-logging-includecookies
+cfdlIncludeCookies :: Lens' CloudFrontDistributionLogging (Maybe (Val Bool'))
+cfdlIncludeCookies = lens _cloudFrontDistributionLoggingIncludeCookies (\s a -> s { _cloudFrontDistributionLoggingIncludeCookies = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-logging.html#cfn-cloudfront-logging-prefix
+cfdlPrefix :: Lens' CloudFrontDistributionLogging (Maybe (Val Text))
+cfdlPrefix = lens _cloudFrontDistributionLoggingPrefix (\s a -> s { _cloudFrontDistributionLoggingPrefix = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionOrigin.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionOrigin.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionOrigin.hs
@@ -0,0 +1,75 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-origin.html
+
+module Stratosphere.ResourceProperties.CloudFrontDistributionOrigin where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CloudFrontDistributionCustomOriginConfig
+import Stratosphere.ResourceProperties.CloudFrontDistributionOriginCustomHeader
+import Stratosphere.ResourceProperties.CloudFrontDistributionS3OriginConfig
+
+-- | Full data type definition for CloudFrontDistributionOrigin. See
+-- | 'cloudFrontDistributionOrigin' for a more convenient constructor.
+data CloudFrontDistributionOrigin =
+  CloudFrontDistributionOrigin
+  { _cloudFrontDistributionOriginCustomOriginConfig :: Maybe CloudFrontDistributionCustomOriginConfig
+  , _cloudFrontDistributionOriginDomainName :: Val Text
+  , _cloudFrontDistributionOriginId :: Val Text
+  , _cloudFrontDistributionOriginOriginCustomHeaders :: Maybe [CloudFrontDistributionOriginCustomHeader]
+  , _cloudFrontDistributionOriginOriginPath :: Maybe (Val Text)
+  , _cloudFrontDistributionOriginS3OriginConfig :: Maybe CloudFrontDistributionS3OriginConfig
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFrontDistributionOrigin where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+instance FromJSON CloudFrontDistributionOrigin where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+-- | Constructor for 'CloudFrontDistributionOrigin' containing required fields
+-- | as arguments.
+cloudFrontDistributionOrigin
+  :: Val Text -- ^ 'cfdoDomainName'
+  -> Val Text -- ^ 'cfdoId'
+  -> CloudFrontDistributionOrigin
+cloudFrontDistributionOrigin domainNamearg idarg =
+  CloudFrontDistributionOrigin
+  { _cloudFrontDistributionOriginCustomOriginConfig = Nothing
+  , _cloudFrontDistributionOriginDomainName = domainNamearg
+  , _cloudFrontDistributionOriginId = idarg
+  , _cloudFrontDistributionOriginOriginCustomHeaders = Nothing
+  , _cloudFrontDistributionOriginOriginPath = Nothing
+  , _cloudFrontDistributionOriginS3OriginConfig = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-origin.html#cfn-cloudfront-origin-customorigin
+cfdoCustomOriginConfig :: Lens' CloudFrontDistributionOrigin (Maybe CloudFrontDistributionCustomOriginConfig)
+cfdoCustomOriginConfig = lens _cloudFrontDistributionOriginCustomOriginConfig (\s a -> s { _cloudFrontDistributionOriginCustomOriginConfig = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-origin.html#cfn-cloudfront-origin-domainname
+cfdoDomainName :: Lens' CloudFrontDistributionOrigin (Val Text)
+cfdoDomainName = lens _cloudFrontDistributionOriginDomainName (\s a -> s { _cloudFrontDistributionOriginDomainName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-origin.html#cfn-cloudfront-origin-id
+cfdoId :: Lens' CloudFrontDistributionOrigin (Val Text)
+cfdoId = lens _cloudFrontDistributionOriginId (\s a -> s { _cloudFrontDistributionOriginId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-origin.html#cfn-cloudfront-origin-origincustomheaders
+cfdoOriginCustomHeaders :: Lens' CloudFrontDistributionOrigin (Maybe [CloudFrontDistributionOriginCustomHeader])
+cfdoOriginCustomHeaders = lens _cloudFrontDistributionOriginOriginCustomHeaders (\s a -> s { _cloudFrontDistributionOriginOriginCustomHeaders = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-origin.html#cfn-cloudfront-origin-originpath
+cfdoOriginPath :: Lens' CloudFrontDistributionOrigin (Maybe (Val Text))
+cfdoOriginPath = lens _cloudFrontDistributionOriginOriginPath (\s a -> s { _cloudFrontDistributionOriginOriginPath = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-origin.html#cfn-cloudfront-origin-s3origin
+cfdoS3OriginConfig :: Lens' CloudFrontDistributionOrigin (Maybe CloudFrontDistributionS3OriginConfig)
+cfdoS3OriginConfig = lens _cloudFrontDistributionOriginS3OriginConfig (\s a -> s { _cloudFrontDistributionOriginS3OriginConfig = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionOriginCustomHeader.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionOriginCustomHeader.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionOriginCustomHeader.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-origin-origincustomheader.html
+
+module Stratosphere.ResourceProperties.CloudFrontDistributionOriginCustomHeader where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CloudFrontDistributionOriginCustomHeader.
+-- | See 'cloudFrontDistributionOriginCustomHeader' for a more convenient
+-- | constructor.
+data CloudFrontDistributionOriginCustomHeader =
+  CloudFrontDistributionOriginCustomHeader
+  { _cloudFrontDistributionOriginCustomHeaderHeaderName :: Val Text
+  , _cloudFrontDistributionOriginCustomHeaderHeaderValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFrontDistributionOriginCustomHeader where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+instance FromJSON CloudFrontDistributionOriginCustomHeader where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+-- | Constructor for 'CloudFrontDistributionOriginCustomHeader' containing
+-- | required fields as arguments.
+cloudFrontDistributionOriginCustomHeader
+  :: Val Text -- ^ 'cfdochHeaderName'
+  -> Val Text -- ^ 'cfdochHeaderValue'
+  -> CloudFrontDistributionOriginCustomHeader
+cloudFrontDistributionOriginCustomHeader headerNamearg headerValuearg =
+  CloudFrontDistributionOriginCustomHeader
+  { _cloudFrontDistributionOriginCustomHeaderHeaderName = headerNamearg
+  , _cloudFrontDistributionOriginCustomHeaderHeaderValue = headerValuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-origin-origincustomheader.html#cfn-cloudfront-origin-origincustomheader-headername
+cfdochHeaderName :: Lens' CloudFrontDistributionOriginCustomHeader (Val Text)
+cfdochHeaderName = lens _cloudFrontDistributionOriginCustomHeaderHeaderName (\s a -> s { _cloudFrontDistributionOriginCustomHeaderHeaderName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-origin-origincustomheader.html#cfn-cloudfront-origin-origincustomheader-headervalue
+cfdochHeaderValue :: Lens' CloudFrontDistributionOriginCustomHeader (Val Text)
+cfdochHeaderValue = lens _cloudFrontDistributionOriginCustomHeaderHeaderValue (\s a -> s { _cloudFrontDistributionOriginCustomHeaderHeaderValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionRestrictions.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionRestrictions.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionRestrictions.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-restrictions.html
+
+module Stratosphere.ResourceProperties.CloudFrontDistributionRestrictions where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CloudFrontDistributionGeoRestriction
+
+-- | Full data type definition for CloudFrontDistributionRestrictions. See
+-- | 'cloudFrontDistributionRestrictions' for a more convenient constructor.
+data CloudFrontDistributionRestrictions =
+  CloudFrontDistributionRestrictions
+  { _cloudFrontDistributionRestrictionsGeoRestriction :: CloudFrontDistributionGeoRestriction
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFrontDistributionRestrictions where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+instance FromJSON CloudFrontDistributionRestrictions where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+-- | Constructor for 'CloudFrontDistributionRestrictions' containing required
+-- | fields as arguments.
+cloudFrontDistributionRestrictions
+  :: CloudFrontDistributionGeoRestriction -- ^ 'cfdrGeoRestriction'
+  -> CloudFrontDistributionRestrictions
+cloudFrontDistributionRestrictions geoRestrictionarg =
+  CloudFrontDistributionRestrictions
+  { _cloudFrontDistributionRestrictionsGeoRestriction = geoRestrictionarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-restrictions.html#cfn-cloudfront-distributionconfig-restrictions-georestriction
+cfdrGeoRestriction :: Lens' CloudFrontDistributionRestrictions CloudFrontDistributionGeoRestriction
+cfdrGeoRestriction = lens _cloudFrontDistributionRestrictionsGeoRestriction (\s a -> s { _cloudFrontDistributionRestrictionsGeoRestriction = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionS3OriginConfig.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionS3OriginConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionS3OriginConfig.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-s3origin.html
+
+module Stratosphere.ResourceProperties.CloudFrontDistributionS3OriginConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CloudFrontDistributionS3OriginConfig. See
+-- | 'cloudFrontDistributionS3OriginConfig' for a more convenient constructor.
+data CloudFrontDistributionS3OriginConfig =
+  CloudFrontDistributionS3OriginConfig
+  { _cloudFrontDistributionS3OriginConfigOriginAccessIdentity :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFrontDistributionS3OriginConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+instance FromJSON CloudFrontDistributionS3OriginConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+-- | Constructor for 'CloudFrontDistributionS3OriginConfig' containing
+-- | required fields as arguments.
+cloudFrontDistributionS3OriginConfig
+  :: CloudFrontDistributionS3OriginConfig
+cloudFrontDistributionS3OriginConfig  =
+  CloudFrontDistributionS3OriginConfig
+  { _cloudFrontDistributionS3OriginConfigOriginAccessIdentity = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-s3origin.html#cfn-cloudfront-s3origin-originaccessidentity
+cfdsocOriginAccessIdentity :: Lens' CloudFrontDistributionS3OriginConfig (Maybe (Val Text))
+cfdsocOriginAccessIdentity = lens _cloudFrontDistributionS3OriginConfigOriginAccessIdentity (\s a -> s { _cloudFrontDistributionS3OriginConfigOriginAccessIdentity = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionViewerCertificate.hs b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionViewerCertificate.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CloudFrontDistributionViewerCertificate.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-viewercertificate.html
+
+module Stratosphere.ResourceProperties.CloudFrontDistributionViewerCertificate where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CloudFrontDistributionViewerCertificate.
+-- | See 'cloudFrontDistributionViewerCertificate' for a more convenient
+-- | constructor.
+data CloudFrontDistributionViewerCertificate =
+  CloudFrontDistributionViewerCertificate
+  { _cloudFrontDistributionViewerCertificateAcmCertificateArn :: Maybe (Val Text)
+  , _cloudFrontDistributionViewerCertificateCloudFrontDefaultCertificate :: Maybe (Val Bool')
+  , _cloudFrontDistributionViewerCertificateIamCertificateId :: Maybe (Val Text)
+  , _cloudFrontDistributionViewerCertificateMinimumProtocolVersion :: Maybe (Val Text)
+  , _cloudFrontDistributionViewerCertificateSslSupportMethod :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFrontDistributionViewerCertificate where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 40, omitNothingFields = True }
+
+instance FromJSON CloudFrontDistributionViewerCertificate where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 40, omitNothingFields = True }
+
+-- | Constructor for 'CloudFrontDistributionViewerCertificate' containing
+-- | required fields as arguments.
+cloudFrontDistributionViewerCertificate
+  :: CloudFrontDistributionViewerCertificate
+cloudFrontDistributionViewerCertificate  =
+  CloudFrontDistributionViewerCertificate
+  { _cloudFrontDistributionViewerCertificateAcmCertificateArn = Nothing
+  , _cloudFrontDistributionViewerCertificateCloudFrontDefaultCertificate = Nothing
+  , _cloudFrontDistributionViewerCertificateIamCertificateId = Nothing
+  , _cloudFrontDistributionViewerCertificateMinimumProtocolVersion = Nothing
+  , _cloudFrontDistributionViewerCertificateSslSupportMethod = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-viewercertificate.html#cfn-cloudfront-distributionconfig-viewercertificate-acmcertificatearn
+cfdvcAcmCertificateArn :: Lens' CloudFrontDistributionViewerCertificate (Maybe (Val Text))
+cfdvcAcmCertificateArn = lens _cloudFrontDistributionViewerCertificateAcmCertificateArn (\s a -> s { _cloudFrontDistributionViewerCertificateAcmCertificateArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-viewercertificate.html#cfn-cloudfront-distributionconfig-viewercertificate-cloudfrontdefaultcertificate
+cfdvcCloudFrontDefaultCertificate :: Lens' CloudFrontDistributionViewerCertificate (Maybe (Val Bool'))
+cfdvcCloudFrontDefaultCertificate = lens _cloudFrontDistributionViewerCertificateCloudFrontDefaultCertificate (\s a -> s { _cloudFrontDistributionViewerCertificateCloudFrontDefaultCertificate = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-viewercertificate.html#cfn-cloudfront-distributionconfig-viewercertificate-iamcertificateid
+cfdvcIamCertificateId :: Lens' CloudFrontDistributionViewerCertificate (Maybe (Val Text))
+cfdvcIamCertificateId = lens _cloudFrontDistributionViewerCertificateIamCertificateId (\s a -> s { _cloudFrontDistributionViewerCertificateIamCertificateId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-viewercertificate.html#cfn-cloudfront-distributionconfig-viewercertificate-sslsupportmethod
+cfdvcMinimumProtocolVersion :: Lens' CloudFrontDistributionViewerCertificate (Maybe (Val Text))
+cfdvcMinimumProtocolVersion = lens _cloudFrontDistributionViewerCertificateMinimumProtocolVersion (\s a -> s { _cloudFrontDistributionViewerCertificateMinimumProtocolVersion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-viewercertificate.html#cfn-cloudfront-distributionconfig-viewercertificate-minimumprotocolversion
+cfdvcSslSupportMethod :: Lens' CloudFrontDistributionViewerCertificate (Maybe (Val Text))
+cfdvcSslSupportMethod = lens _cloudFrontDistributionViewerCertificateSslSupportMethod (\s a -> s { _cloudFrontDistributionViewerCertificateSslSupportMethod = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CloudWatchAlarmDimension.hs b/library-gen/Stratosphere/ResourceProperties/CloudWatchAlarmDimension.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CloudWatchAlarmDimension.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-dimension.html
+
+module Stratosphere.ResourceProperties.CloudWatchAlarmDimension where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CloudWatchAlarmDimension. See
+-- | 'cloudWatchAlarmDimension' for a more convenient constructor.
+data CloudWatchAlarmDimension =
+  CloudWatchAlarmDimension
+  { _cloudWatchAlarmDimensionName :: Val Text
+  , _cloudWatchAlarmDimensionValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CloudWatchAlarmDimension where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+instance FromJSON CloudWatchAlarmDimension where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+-- | Constructor for 'CloudWatchAlarmDimension' containing required fields as
+-- | arguments.
+cloudWatchAlarmDimension
+  :: Val Text -- ^ 'cwadName'
+  -> Val Text -- ^ 'cwadValue'
+  -> CloudWatchAlarmDimension
+cloudWatchAlarmDimension namearg valuearg =
+  CloudWatchAlarmDimension
+  { _cloudWatchAlarmDimensionName = namearg
+  , _cloudWatchAlarmDimensionValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-dimension.html#cfn-cloudwatch-alarm-dimension-name
+cwadName :: Lens' CloudWatchAlarmDimension (Val Text)
+cwadName = lens _cloudWatchAlarmDimensionName (\s a -> s { _cloudWatchAlarmDimensionName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-dimension.html#cfn-cloudwatch-alarm-dimension-value
+cwadValue :: Lens' CloudWatchAlarmDimension (Val Text)
+cwadValue = lens _cloudWatchAlarmDimensionValue (\s a -> s { _cloudWatchAlarmDimensionValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectArtifacts.hs b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectArtifacts.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectArtifacts.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-artifacts.html
+
+module Stratosphere.ResourceProperties.CodeBuildProjectArtifacts where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodeBuildProjectArtifacts. See
+-- | 'codeBuildProjectArtifacts' for a more convenient constructor.
+data CodeBuildProjectArtifacts =
+  CodeBuildProjectArtifacts
+  { _codeBuildProjectArtifactsLocation :: Maybe (Val Text)
+  , _codeBuildProjectArtifactsName :: Maybe (Val Text)
+  , _codeBuildProjectArtifactsNamespaceType :: Maybe (Val Text)
+  , _codeBuildProjectArtifactsPackaging :: Maybe (Val Text)
+  , _codeBuildProjectArtifactsPath :: Maybe (Val Text)
+  , _codeBuildProjectArtifactsType :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CodeBuildProjectArtifacts where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+instance FromJSON CodeBuildProjectArtifacts where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+-- | Constructor for 'CodeBuildProjectArtifacts' containing required fields as
+-- | arguments.
+codeBuildProjectArtifacts
+  :: CodeBuildProjectArtifacts
+codeBuildProjectArtifacts  =
+  CodeBuildProjectArtifacts
+  { _codeBuildProjectArtifactsLocation = Nothing
+  , _codeBuildProjectArtifactsName = Nothing
+  , _codeBuildProjectArtifactsNamespaceType = Nothing
+  , _codeBuildProjectArtifactsPackaging = Nothing
+  , _codeBuildProjectArtifactsPath = Nothing
+  , _codeBuildProjectArtifactsType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-artifacts.html#cfn-codebuild-project-artifacts-location
+cbpaLocation :: Lens' CodeBuildProjectArtifacts (Maybe (Val Text))
+cbpaLocation = lens _codeBuildProjectArtifactsLocation (\s a -> s { _codeBuildProjectArtifactsLocation = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-artifacts.html#cfn-codebuild-project-artifacts-name
+cbpaName :: Lens' CodeBuildProjectArtifacts (Maybe (Val Text))
+cbpaName = lens _codeBuildProjectArtifactsName (\s a -> s { _codeBuildProjectArtifactsName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-artifacts.html#cfn-codebuild-project-artifacts-namespacetype
+cbpaNamespaceType :: Lens' CodeBuildProjectArtifacts (Maybe (Val Text))
+cbpaNamespaceType = lens _codeBuildProjectArtifactsNamespaceType (\s a -> s { _codeBuildProjectArtifactsNamespaceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-artifacts.html#cfn-codebuild-project-artifacts-packaging
+cbpaPackaging :: Lens' CodeBuildProjectArtifacts (Maybe (Val Text))
+cbpaPackaging = lens _codeBuildProjectArtifactsPackaging (\s a -> s { _codeBuildProjectArtifactsPackaging = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-artifacts.html#cfn-codebuild-project-artifacts-path
+cbpaPath :: Lens' CodeBuildProjectArtifacts (Maybe (Val Text))
+cbpaPath = lens _codeBuildProjectArtifactsPath (\s a -> s { _codeBuildProjectArtifactsPath = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-artifacts.html#cfn-codebuild-project-artifacts-type
+cbpaType :: Lens' CodeBuildProjectArtifacts (Maybe (Val Text))
+cbpaType = lens _codeBuildProjectArtifactsType (\s a -> s { _codeBuildProjectArtifactsType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironment.hs b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironment.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environment.html
+
+module Stratosphere.ResourceProperties.CodeBuildProjectEnvironment where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CodeBuildProjectEnvironmentVariable
+
+-- | Full data type definition for CodeBuildProjectEnvironment. See
+-- | 'codeBuildProjectEnvironment' for a more convenient constructor.
+data CodeBuildProjectEnvironment =
+  CodeBuildProjectEnvironment
+  { _codeBuildProjectEnvironmentComputeType :: Maybe (Val Text)
+  , _codeBuildProjectEnvironmentEnvironmentVariables :: Maybe [CodeBuildProjectEnvironmentVariable]
+  , _codeBuildProjectEnvironmentImage :: Maybe (Val Text)
+  , _codeBuildProjectEnvironmentType :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CodeBuildProjectEnvironment where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON CodeBuildProjectEnvironment where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'CodeBuildProjectEnvironment' containing required fields
+-- | as arguments.
+codeBuildProjectEnvironment
+  :: CodeBuildProjectEnvironment
+codeBuildProjectEnvironment  =
+  CodeBuildProjectEnvironment
+  { _codeBuildProjectEnvironmentComputeType = Nothing
+  , _codeBuildProjectEnvironmentEnvironmentVariables = Nothing
+  , _codeBuildProjectEnvironmentImage = Nothing
+  , _codeBuildProjectEnvironmentType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environment.html#cfn-codebuild-project-environment-computetype
+cbpeComputeType :: Lens' CodeBuildProjectEnvironment (Maybe (Val Text))
+cbpeComputeType = lens _codeBuildProjectEnvironmentComputeType (\s a -> s { _codeBuildProjectEnvironmentComputeType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environment.html#cfn-codebuild-project-environment-environmentvariables
+cbpeEnvironmentVariables :: Lens' CodeBuildProjectEnvironment (Maybe [CodeBuildProjectEnvironmentVariable])
+cbpeEnvironmentVariables = lens _codeBuildProjectEnvironmentEnvironmentVariables (\s a -> s { _codeBuildProjectEnvironmentEnvironmentVariables = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environment.html#cfn-codebuild-project-environment-image
+cbpeImage :: Lens' CodeBuildProjectEnvironment (Maybe (Val Text))
+cbpeImage = lens _codeBuildProjectEnvironmentImage (\s a -> s { _codeBuildProjectEnvironmentImage = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environment.html#cfn-codebuild-project-environment-type
+cbpeType :: Lens' CodeBuildProjectEnvironment (Maybe (Val Text))
+cbpeType = lens _codeBuildProjectEnvironmentType (\s a -> s { _codeBuildProjectEnvironmentType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironmentVariable.hs b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironmentVariable.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironmentVariable.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environmentvariable.html
+
+module Stratosphere.ResourceProperties.CodeBuildProjectEnvironmentVariable where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodeBuildProjectEnvironmentVariable. See
+-- | 'codeBuildProjectEnvironmentVariable' for a more convenient constructor.
+data CodeBuildProjectEnvironmentVariable =
+  CodeBuildProjectEnvironmentVariable
+  { _codeBuildProjectEnvironmentVariableName :: Maybe (Val Text)
+  , _codeBuildProjectEnvironmentVariableValue :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CodeBuildProjectEnvironmentVariable where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+instance FromJSON CodeBuildProjectEnvironmentVariable where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+-- | Constructor for 'CodeBuildProjectEnvironmentVariable' containing required
+-- | fields as arguments.
+codeBuildProjectEnvironmentVariable
+  :: CodeBuildProjectEnvironmentVariable
+codeBuildProjectEnvironmentVariable  =
+  CodeBuildProjectEnvironmentVariable
+  { _codeBuildProjectEnvironmentVariableName = Nothing
+  , _codeBuildProjectEnvironmentVariableValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environmentvariable.html#cfn-codebuild-project-environmentvariable-name
+cbpevName :: Lens' CodeBuildProjectEnvironmentVariable (Maybe (Val Text))
+cbpevName = lens _codeBuildProjectEnvironmentVariableName (\s a -> s { _codeBuildProjectEnvironmentVariableName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environmentvariable.html#cfn-codebuild-project-environmentvariable-value
+cbpevValue :: Lens' CodeBuildProjectEnvironmentVariable (Maybe (Val Text))
+cbpevValue = lens _codeBuildProjectEnvironmentVariableValue (\s a -> s { _codeBuildProjectEnvironmentVariableValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSource.hs b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSource.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSource.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-source.html
+
+module Stratosphere.ResourceProperties.CodeBuildProjectSource where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CodeBuildProjectSourceAuth
+
+-- | Full data type definition for CodeBuildProjectSource. See
+-- | 'codeBuildProjectSource' for a more convenient constructor.
+data CodeBuildProjectSource =
+  CodeBuildProjectSource
+  { _codeBuildProjectSourceAuth :: Maybe CodeBuildProjectSourceAuth
+  , _codeBuildProjectSourceBuildSpec :: Maybe (Val Text)
+  , _codeBuildProjectSourceLocation :: Maybe (Val Text)
+  , _codeBuildProjectSourceType :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CodeBuildProjectSource where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+instance FromJSON CodeBuildProjectSource where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+-- | Constructor for 'CodeBuildProjectSource' containing required fields as
+-- | arguments.
+codeBuildProjectSource
+  :: CodeBuildProjectSource
+codeBuildProjectSource  =
+  CodeBuildProjectSource
+  { _codeBuildProjectSourceAuth = Nothing
+  , _codeBuildProjectSourceBuildSpec = Nothing
+  , _codeBuildProjectSourceLocation = Nothing
+  , _codeBuildProjectSourceType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-source.html#cfn-codebuild-project-source-auth
+cbpsAuth :: Lens' CodeBuildProjectSource (Maybe CodeBuildProjectSourceAuth)
+cbpsAuth = lens _codeBuildProjectSourceAuth (\s a -> s { _codeBuildProjectSourceAuth = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-source.html#cfn-codebuild-project-source-buildspec
+cbpsBuildSpec :: Lens' CodeBuildProjectSource (Maybe (Val Text))
+cbpsBuildSpec = lens _codeBuildProjectSourceBuildSpec (\s a -> s { _codeBuildProjectSourceBuildSpec = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-source.html#cfn-codebuild-project-source-location
+cbpsLocation :: Lens' CodeBuildProjectSource (Maybe (Val Text))
+cbpsLocation = lens _codeBuildProjectSourceLocation (\s a -> s { _codeBuildProjectSourceLocation = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-source.html#cfn-codebuild-project-source-type
+cbpsType :: Lens' CodeBuildProjectSource (Maybe (Val Text))
+cbpsType = lens _codeBuildProjectSourceType (\s a -> s { _codeBuildProjectSourceType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSourceAuth.hs b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSourceAuth.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSourceAuth.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-sourceauth.html
+
+module Stratosphere.ResourceProperties.CodeBuildProjectSourceAuth where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodeBuildProjectSourceAuth. See
+-- | 'codeBuildProjectSourceAuth' for a more convenient constructor.
+data CodeBuildProjectSourceAuth =
+  CodeBuildProjectSourceAuth
+  { _codeBuildProjectSourceAuthResource :: Maybe (Val Text)
+  , _codeBuildProjectSourceAuthType :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CodeBuildProjectSourceAuth where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON CodeBuildProjectSourceAuth where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'CodeBuildProjectSourceAuth' containing required fields
+-- | as arguments.
+codeBuildProjectSourceAuth
+  :: CodeBuildProjectSourceAuth
+codeBuildProjectSourceAuth  =
+  CodeBuildProjectSourceAuth
+  { _codeBuildProjectSourceAuthResource = Nothing
+  , _codeBuildProjectSourceAuthType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-sourceauth.html#cfn-codebuild-project-sourceauth-resource
+cbpsaResource :: Lens' CodeBuildProjectSourceAuth (Maybe (Val Text))
+cbpsaResource = lens _codeBuildProjectSourceAuthResource (\s a -> s { _codeBuildProjectSourceAuthResource = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-sourceauth.html#cfn-codebuild-project-sourceauth-type
+cbpsaType :: Lens' CodeBuildProjectSourceAuth (Maybe (Val Text))
+cbpsaType = lens _codeBuildProjectSourceAuthType (\s a -> s { _codeBuildProjectSourceAuthType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeCommitRepositoryRepositoryTrigger.hs b/library-gen/Stratosphere/ResourceProperties/CodeCommitRepositoryRepositoryTrigger.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodeCommitRepositoryRepositoryTrigger.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codecommit-repository-repositorytrigger.html
+
+module Stratosphere.ResourceProperties.CodeCommitRepositoryRepositoryTrigger where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodeCommitRepositoryRepositoryTrigger. See
+-- | 'codeCommitRepositoryRepositoryTrigger' for a more convenient
+-- | constructor.
+data CodeCommitRepositoryRepositoryTrigger =
+  CodeCommitRepositoryRepositoryTrigger
+  { _codeCommitRepositoryRepositoryTriggerBranches :: Maybe [Val Text]
+  , _codeCommitRepositoryRepositoryTriggerCustomData :: Maybe (Val Text)
+  , _codeCommitRepositoryRepositoryTriggerDestinationArn :: Maybe (Val Text)
+  , _codeCommitRepositoryRepositoryTriggerEvents :: Maybe [Val Text]
+  , _codeCommitRepositoryRepositoryTriggerName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CodeCommitRepositoryRepositoryTrigger where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+
+instance FromJSON CodeCommitRepositoryRepositoryTrigger where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+
+-- | Constructor for 'CodeCommitRepositoryRepositoryTrigger' containing
+-- | required fields as arguments.
+codeCommitRepositoryRepositoryTrigger
+  :: CodeCommitRepositoryRepositoryTrigger
+codeCommitRepositoryRepositoryTrigger  =
+  CodeCommitRepositoryRepositoryTrigger
+  { _codeCommitRepositoryRepositoryTriggerBranches = Nothing
+  , _codeCommitRepositoryRepositoryTriggerCustomData = Nothing
+  , _codeCommitRepositoryRepositoryTriggerDestinationArn = Nothing
+  , _codeCommitRepositoryRepositoryTriggerEvents = Nothing
+  , _codeCommitRepositoryRepositoryTriggerName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codecommit-repository-repositorytrigger.html#cfn-codecommit-repository-repositorytrigger-branches
+ccrrtBranches :: Lens' CodeCommitRepositoryRepositoryTrigger (Maybe [Val Text])
+ccrrtBranches = lens _codeCommitRepositoryRepositoryTriggerBranches (\s a -> s { _codeCommitRepositoryRepositoryTriggerBranches = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codecommit-repository-repositorytrigger.html#cfn-codecommit-repository-repositorytrigger-customdata
+ccrrtCustomData :: Lens' CodeCommitRepositoryRepositoryTrigger (Maybe (Val Text))
+ccrrtCustomData = lens _codeCommitRepositoryRepositoryTriggerCustomData (\s a -> s { _codeCommitRepositoryRepositoryTriggerCustomData = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codecommit-repository-repositorytrigger.html#cfn-codecommit-repository-repositorytrigger-destinationarn
+ccrrtDestinationArn :: Lens' CodeCommitRepositoryRepositoryTrigger (Maybe (Val Text))
+ccrrtDestinationArn = lens _codeCommitRepositoryRepositoryTriggerDestinationArn (\s a -> s { _codeCommitRepositoryRepositoryTriggerDestinationArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codecommit-repository-repositorytrigger.html#cfn-codecommit-repository-repositorytrigger-events
+ccrrtEvents :: Lens' CodeCommitRepositoryRepositoryTrigger (Maybe [Val Text])
+ccrrtEvents = lens _codeCommitRepositoryRepositoryTriggerEvents (\s a -> s { _codeCommitRepositoryRepositoryTriggerEvents = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codecommit-repository-repositorytrigger.html#cfn-codecommit-repository-repositorytrigger-name
+ccrrtName :: Lens' CodeCommitRepositoryRepositoryTrigger (Maybe (Val Text))
+ccrrtName = lens _codeCommitRepositoryRepositoryTriggerName (\s a -> s { _codeCommitRepositoryRepositoryTriggerName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentConfigMinimumHealthyHosts.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentConfigMinimumHealthyHosts.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentConfigMinimumHealthyHosts.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentconfig-minimumhealthyhosts.html
+
+module Stratosphere.ResourceProperties.CodeDeployDeploymentConfigMinimumHealthyHosts where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | CodeDeployDeploymentConfigMinimumHealthyHosts. See
+-- | 'codeDeployDeploymentConfigMinimumHealthyHosts' for a more convenient
+-- | constructor.
+data CodeDeployDeploymentConfigMinimumHealthyHosts =
+  CodeDeployDeploymentConfigMinimumHealthyHosts
+  { _codeDeployDeploymentConfigMinimumHealthyHostsType :: Maybe (Val Text)
+  , _codeDeployDeploymentConfigMinimumHealthyHostsValue :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON CodeDeployDeploymentConfigMinimumHealthyHosts where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 46, omitNothingFields = True }
+
+instance FromJSON CodeDeployDeploymentConfigMinimumHealthyHosts where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 46, omitNothingFields = True }
+
+-- | Constructor for 'CodeDeployDeploymentConfigMinimumHealthyHosts'
+-- | containing required fields as arguments.
+codeDeployDeploymentConfigMinimumHealthyHosts
+  :: CodeDeployDeploymentConfigMinimumHealthyHosts
+codeDeployDeploymentConfigMinimumHealthyHosts  =
+  CodeDeployDeploymentConfigMinimumHealthyHosts
+  { _codeDeployDeploymentConfigMinimumHealthyHostsType = Nothing
+  , _codeDeployDeploymentConfigMinimumHealthyHostsValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentconfig-minimumhealthyhosts.html#cfn-codedeploy-deploymentconfig-minimumhealthyhosts-type
+cddcmhhType :: Lens' CodeDeployDeploymentConfigMinimumHealthyHosts (Maybe (Val Text))
+cddcmhhType = lens _codeDeployDeploymentConfigMinimumHealthyHostsType (\s a -> s { _codeDeployDeploymentConfigMinimumHealthyHostsType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentconfig-minimumhealthyhosts.html#cfn-codedeploy-deploymentconfig-minimumhealthyhosts-value
+cddcmhhValue :: Lens' CodeDeployDeploymentConfigMinimumHealthyHosts (Maybe (Val Integer'))
+cddcmhhValue = lens _codeDeployDeploymentConfigMinimumHealthyHostsValue (\s a -> s { _codeDeployDeploymentConfigMinimumHealthyHostsValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupDeployment.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupDeployment.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupDeployment.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment.html
+
+module Stratosphere.ResourceProperties.CodeDeployDeploymentGroupDeployment where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupRevision
+
+-- | Full data type definition for CodeDeployDeploymentGroupDeployment. See
+-- | 'codeDeployDeploymentGroupDeployment' for a more convenient constructor.
+data CodeDeployDeploymentGroupDeployment =
+  CodeDeployDeploymentGroupDeployment
+  { _codeDeployDeploymentGroupDeploymentDescription :: Maybe (Val Text)
+  , _codeDeployDeploymentGroupDeploymentIgnoreApplicationStopFailures :: Maybe (Val Bool')
+  , _codeDeployDeploymentGroupDeploymentRevision :: CodeDeployDeploymentGroupRevision
+  } deriving (Show, Generic)
+
+instance ToJSON CodeDeployDeploymentGroupDeployment where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+instance FromJSON CodeDeployDeploymentGroupDeployment where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+-- | Constructor for 'CodeDeployDeploymentGroupDeployment' containing required
+-- | fields as arguments.
+codeDeployDeploymentGroupDeployment
+  :: CodeDeployDeploymentGroupRevision -- ^ 'cddgdRevision'
+  -> CodeDeployDeploymentGroupDeployment
+codeDeployDeploymentGroupDeployment revisionarg =
+  CodeDeployDeploymentGroupDeployment
+  { _codeDeployDeploymentGroupDeploymentDescription = Nothing
+  , _codeDeployDeploymentGroupDeploymentIgnoreApplicationStopFailures = Nothing
+  , _codeDeployDeploymentGroupDeploymentRevision = revisionarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment.html#cfn-properties-codedeploy-deploymentgroup-deployment-description
+cddgdDescription :: Lens' CodeDeployDeploymentGroupDeployment (Maybe (Val Text))
+cddgdDescription = lens _codeDeployDeploymentGroupDeploymentDescription (\s a -> s { _codeDeployDeploymentGroupDeploymentDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment.html#cfn-properties-codedeploy-deploymentgroup-deployment-ignoreapplicationstopfailures
+cddgdIgnoreApplicationStopFailures :: Lens' CodeDeployDeploymentGroupDeployment (Maybe (Val Bool'))
+cddgdIgnoreApplicationStopFailures = lens _codeDeployDeploymentGroupDeploymentIgnoreApplicationStopFailures (\s a -> s { _codeDeployDeploymentGroupDeploymentIgnoreApplicationStopFailures = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment.html#cfn-properties-codedeploy-deploymentgroup-deployment-revision
+cddgdRevision :: Lens' CodeDeployDeploymentGroupDeployment CodeDeployDeploymentGroupRevision
+cddgdRevision = lens _codeDeployDeploymentGroupDeploymentRevision (\s a -> s { _codeDeployDeploymentGroupDeploymentRevision = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupEc2TagFilter.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupEc2TagFilter.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupEc2TagFilter.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-ec2tagfilters.html
+
+module Stratosphere.ResourceProperties.CodeDeployDeploymentGroupEc2TagFilter where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodeDeployDeploymentGroupEc2TagFilter. See
+-- | 'codeDeployDeploymentGroupEc2TagFilter' for a more convenient
+-- | constructor.
+data CodeDeployDeploymentGroupEc2TagFilter =
+  CodeDeployDeploymentGroupEc2TagFilter
+  { _codeDeployDeploymentGroupEc2TagFilterKey :: Maybe (Val Text)
+  , _codeDeployDeploymentGroupEc2TagFilterType :: Val Text
+  , _codeDeployDeploymentGroupEc2TagFilterValue :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CodeDeployDeploymentGroupEc2TagFilter where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+
+instance FromJSON CodeDeployDeploymentGroupEc2TagFilter where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+
+-- | Constructor for 'CodeDeployDeploymentGroupEc2TagFilter' containing
+-- | required fields as arguments.
+codeDeployDeploymentGroupEc2TagFilter
+  :: Val Text -- ^ 'cddgetfType'
+  -> CodeDeployDeploymentGroupEc2TagFilter
+codeDeployDeploymentGroupEc2TagFilter typearg =
+  CodeDeployDeploymentGroupEc2TagFilter
+  { _codeDeployDeploymentGroupEc2TagFilterKey = Nothing
+  , _codeDeployDeploymentGroupEc2TagFilterType = typearg
+  , _codeDeployDeploymentGroupEc2TagFilterValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-ec2tagfilters.html#cfn-properties-codedeploy-deploymentgroup-ec2tagfilters-key
+cddgetfKey :: Lens' CodeDeployDeploymentGroupEc2TagFilter (Maybe (Val Text))
+cddgetfKey = lens _codeDeployDeploymentGroupEc2TagFilterKey (\s a -> s { _codeDeployDeploymentGroupEc2TagFilterKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-ec2tagfilters.html#cfn-properties-codedeploy-deploymentgroup-ec2tagfilters-type
+cddgetfType :: Lens' CodeDeployDeploymentGroupEc2TagFilter (Val Text)
+cddgetfType = lens _codeDeployDeploymentGroupEc2TagFilterType (\s a -> s { _codeDeployDeploymentGroupEc2TagFilterType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-ec2tagfilters.html#cfn-properties-codedeploy-deploymentgroup-ec2tagfilters-value
+cddgetfValue :: Lens' CodeDeployDeploymentGroupEc2TagFilter (Maybe (Val Text))
+cddgetfValue = lens _codeDeployDeploymentGroupEc2TagFilterValue (\s a -> s { _codeDeployDeploymentGroupEc2TagFilterValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupGitHubLocation.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupGitHubLocation.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupGitHubLocation.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment-revision-githublocation.html
+
+module Stratosphere.ResourceProperties.CodeDeployDeploymentGroupGitHubLocation where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodeDeployDeploymentGroupGitHubLocation.
+-- | See 'codeDeployDeploymentGroupGitHubLocation' for a more convenient
+-- | constructor.
+data CodeDeployDeploymentGroupGitHubLocation =
+  CodeDeployDeploymentGroupGitHubLocation
+  { _codeDeployDeploymentGroupGitHubLocationCommitId :: Val Text
+  , _codeDeployDeploymentGroupGitHubLocationRepository :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CodeDeployDeploymentGroupGitHubLocation where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 40, omitNothingFields = True }
+
+instance FromJSON CodeDeployDeploymentGroupGitHubLocation where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 40, omitNothingFields = True }
+
+-- | Constructor for 'CodeDeployDeploymentGroupGitHubLocation' containing
+-- | required fields as arguments.
+codeDeployDeploymentGroupGitHubLocation
+  :: Val Text -- ^ 'cddgghlCommitId'
+  -> Val Text -- ^ 'cddgghlRepository'
+  -> CodeDeployDeploymentGroupGitHubLocation
+codeDeployDeploymentGroupGitHubLocation commitIdarg repositoryarg =
+  CodeDeployDeploymentGroupGitHubLocation
+  { _codeDeployDeploymentGroupGitHubLocationCommitId = commitIdarg
+  , _codeDeployDeploymentGroupGitHubLocationRepository = repositoryarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment-revision-githublocation.html#cfn-properties-codedeploy-deploymentgroup-deployment-revision-githublocation-commitid
+cddgghlCommitId :: Lens' CodeDeployDeploymentGroupGitHubLocation (Val Text)
+cddgghlCommitId = lens _codeDeployDeploymentGroupGitHubLocationCommitId (\s a -> s { _codeDeployDeploymentGroupGitHubLocationCommitId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment-revision-githublocation.html#cfn-properties-codedeploy-deploymentgroup-deployment-revision-githublocation-repository
+cddgghlRepository :: Lens' CodeDeployDeploymentGroupGitHubLocation (Val Text)
+cddgghlRepository = lens _codeDeployDeploymentGroupGitHubLocationRepository (\s a -> s { _codeDeployDeploymentGroupGitHubLocationRepository = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupOnPremisesInstanceTagFilter.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupOnPremisesInstanceTagFilter.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupOnPremisesInstanceTagFilter.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-onpremisesinstancetagfilters.html
+
+module Stratosphere.ResourceProperties.CodeDeployDeploymentGroupOnPremisesInstanceTagFilter where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | CodeDeployDeploymentGroupOnPremisesInstanceTagFilter. See
+-- | 'codeDeployDeploymentGroupOnPremisesInstanceTagFilter' for a more
+-- | convenient constructor.
+data CodeDeployDeploymentGroupOnPremisesInstanceTagFilter =
+  CodeDeployDeploymentGroupOnPremisesInstanceTagFilter
+  { _codeDeployDeploymentGroupOnPremisesInstanceTagFilterKey :: Maybe (Val Text)
+  , _codeDeployDeploymentGroupOnPremisesInstanceTagFilterType :: Maybe (Val Text)
+  , _codeDeployDeploymentGroupOnPremisesInstanceTagFilterValue :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CodeDeployDeploymentGroupOnPremisesInstanceTagFilter where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 53, omitNothingFields = True }
+
+instance FromJSON CodeDeployDeploymentGroupOnPremisesInstanceTagFilter where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 53, omitNothingFields = True }
+
+-- | Constructor for 'CodeDeployDeploymentGroupOnPremisesInstanceTagFilter'
+-- | containing required fields as arguments.
+codeDeployDeploymentGroupOnPremisesInstanceTagFilter
+  :: CodeDeployDeploymentGroupOnPremisesInstanceTagFilter
+codeDeployDeploymentGroupOnPremisesInstanceTagFilter  =
+  CodeDeployDeploymentGroupOnPremisesInstanceTagFilter
+  { _codeDeployDeploymentGroupOnPremisesInstanceTagFilterKey = Nothing
+  , _codeDeployDeploymentGroupOnPremisesInstanceTagFilterType = Nothing
+  , _codeDeployDeploymentGroupOnPremisesInstanceTagFilterValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-onpremisesinstancetagfilters.html#cfn-properties-codedeploy-deploymentgroup-onpremisesinstancetagfilters-key
+cddgopitfKey :: Lens' CodeDeployDeploymentGroupOnPremisesInstanceTagFilter (Maybe (Val Text))
+cddgopitfKey = lens _codeDeployDeploymentGroupOnPremisesInstanceTagFilterKey (\s a -> s { _codeDeployDeploymentGroupOnPremisesInstanceTagFilterKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-onpremisesinstancetagfilters.html#cfn-properties-codedeploy-deploymentgroup-onpremisesinstancetagfilters-type
+cddgopitfType :: Lens' CodeDeployDeploymentGroupOnPremisesInstanceTagFilter (Maybe (Val Text))
+cddgopitfType = lens _codeDeployDeploymentGroupOnPremisesInstanceTagFilterType (\s a -> s { _codeDeployDeploymentGroupOnPremisesInstanceTagFilterType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-onpremisesinstancetagfilters.html#cfn-properties-codedeploy-deploymentgroup-onpremisesinstancetagfilters-value
+cddgopitfValue :: Lens' CodeDeployDeploymentGroupOnPremisesInstanceTagFilter (Maybe (Val Text))
+cddgopitfValue = lens _codeDeployDeploymentGroupOnPremisesInstanceTagFilterValue (\s a -> s { _codeDeployDeploymentGroupOnPremisesInstanceTagFilterValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupRevision.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupRevision.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupRevision.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment-revision.html
+
+module Stratosphere.ResourceProperties.CodeDeployDeploymentGroupRevision where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupGitHubLocation
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupS3Location
+
+-- | Full data type definition for CodeDeployDeploymentGroupRevision. See
+-- | 'codeDeployDeploymentGroupRevision' for a more convenient constructor.
+data CodeDeployDeploymentGroupRevision =
+  CodeDeployDeploymentGroupRevision
+  { _codeDeployDeploymentGroupRevisionGitHubLocation :: Maybe CodeDeployDeploymentGroupGitHubLocation
+  , _codeDeployDeploymentGroupRevisionRevisionType :: Maybe (Val Text)
+  , _codeDeployDeploymentGroupRevisionS3Location :: Maybe CodeDeployDeploymentGroupS3Location
+  } deriving (Show, Generic)
+
+instance ToJSON CodeDeployDeploymentGroupRevision where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON CodeDeployDeploymentGroupRevision where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'CodeDeployDeploymentGroupRevision' containing required
+-- | fields as arguments.
+codeDeployDeploymentGroupRevision
+  :: CodeDeployDeploymentGroupRevision
+codeDeployDeploymentGroupRevision  =
+  CodeDeployDeploymentGroupRevision
+  { _codeDeployDeploymentGroupRevisionGitHubLocation = Nothing
+  , _codeDeployDeploymentGroupRevisionRevisionType = Nothing
+  , _codeDeployDeploymentGroupRevisionS3Location = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment-revision.html#cfn-properties-codedeploy-deploymentgroup-deployment-revision-githublocation
+cddgrGitHubLocation :: Lens' CodeDeployDeploymentGroupRevision (Maybe CodeDeployDeploymentGroupGitHubLocation)
+cddgrGitHubLocation = lens _codeDeployDeploymentGroupRevisionGitHubLocation (\s a -> s { _codeDeployDeploymentGroupRevisionGitHubLocation = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment-revision.html#cfn-properties-codedeploy-deploymentgroup-deployment-revision-revisiontype
+cddgrRevisionType :: Lens' CodeDeployDeploymentGroupRevision (Maybe (Val Text))
+cddgrRevisionType = lens _codeDeployDeploymentGroupRevisionRevisionType (\s a -> s { _codeDeployDeploymentGroupRevisionRevisionType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment-revision.html#cfn-properties-codedeploy-deploymentgroup-deployment-revision-s3location
+cddgrS3Location :: Lens' CodeDeployDeploymentGroupRevision (Maybe CodeDeployDeploymentGroupS3Location)
+cddgrS3Location = lens _codeDeployDeploymentGroupRevisionS3Location (\s a -> s { _codeDeployDeploymentGroupRevisionS3Location = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupS3Location.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupS3Location.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupS3Location.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment-revision-s3location.html
+
+module Stratosphere.ResourceProperties.CodeDeployDeploymentGroupS3Location where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodeDeployDeploymentGroupS3Location. See
+-- | 'codeDeployDeploymentGroupS3Location' for a more convenient constructor.
+data CodeDeployDeploymentGroupS3Location =
+  CodeDeployDeploymentGroupS3Location
+  { _codeDeployDeploymentGroupS3LocationBucket :: Val Text
+  , _codeDeployDeploymentGroupS3LocationBundleType :: Val Text
+  , _codeDeployDeploymentGroupS3LocationETag :: Maybe (Val Text)
+  , _codeDeployDeploymentGroupS3LocationKey :: Val Text
+  , _codeDeployDeploymentGroupS3LocationVersion :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CodeDeployDeploymentGroupS3Location where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+instance FromJSON CodeDeployDeploymentGroupS3Location where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+-- | Constructor for 'CodeDeployDeploymentGroupS3Location' containing required
+-- | fields as arguments.
+codeDeployDeploymentGroupS3Location
+  :: Val Text -- ^ 'cddgslBucket'
+  -> Val Text -- ^ 'cddgslBundleType'
+  -> Val Text -- ^ 'cddgslKey'
+  -> CodeDeployDeploymentGroupS3Location
+codeDeployDeploymentGroupS3Location bucketarg bundleTypearg keyarg =
+  CodeDeployDeploymentGroupS3Location
+  { _codeDeployDeploymentGroupS3LocationBucket = bucketarg
+  , _codeDeployDeploymentGroupS3LocationBundleType = bundleTypearg
+  , _codeDeployDeploymentGroupS3LocationETag = Nothing
+  , _codeDeployDeploymentGroupS3LocationKey = keyarg
+  , _codeDeployDeploymentGroupS3LocationVersion = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment-revision-s3location.html#cfn-properties-codedeploy-deploymentgroup-deployment-revision-s3location-bucket
+cddgslBucket :: Lens' CodeDeployDeploymentGroupS3Location (Val Text)
+cddgslBucket = lens _codeDeployDeploymentGroupS3LocationBucket (\s a -> s { _codeDeployDeploymentGroupS3LocationBucket = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment-revision-s3location.html#cfn-properties-codedeploy-deploymentgroup-deployment-revision-s3location-bundletype
+cddgslBundleType :: Lens' CodeDeployDeploymentGroupS3Location (Val Text)
+cddgslBundleType = lens _codeDeployDeploymentGroupS3LocationBundleType (\s a -> s { _codeDeployDeploymentGroupS3LocationBundleType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment-revision-s3location.html#cfn-properties-codedeploy-deploymentgroup-deployment-revision-s3location-etag
+cddgslETag :: Lens' CodeDeployDeploymentGroupS3Location (Maybe (Val Text))
+cddgslETag = lens _codeDeployDeploymentGroupS3LocationETag (\s a -> s { _codeDeployDeploymentGroupS3LocationETag = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment-revision-s3location.html#cfn-properties-codedeploy-deploymentgroup-deployment-revision-s3location-key
+cddgslKey :: Lens' CodeDeployDeploymentGroupS3Location (Val Text)
+cddgslKey = lens _codeDeployDeploymentGroupS3LocationKey (\s a -> s { _codeDeployDeploymentGroupS3LocationKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-deployment-revision-s3location.html#cfn-properties-codedeploy-deploymentgroup-deployment-revision-s3location-value
+cddgslVersion :: Lens' CodeDeployDeploymentGroupS3Location (Maybe (Val Text))
+cddgslVersion = lens _codeDeployDeploymentGroupS3LocationVersion (\s a -> s { _codeDeployDeploymentGroupS3LocationVersion = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeArtifactDetails.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeArtifactDetails.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeArtifactDetails.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-artifactdetails.html
+
+module Stratosphere.ResourceProperties.CodePipelineCustomActionTypeArtifactDetails where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | CodePipelineCustomActionTypeArtifactDetails. See
+-- | 'codePipelineCustomActionTypeArtifactDetails' for a more convenient
+-- | constructor.
+data CodePipelineCustomActionTypeArtifactDetails =
+  CodePipelineCustomActionTypeArtifactDetails
+  { _codePipelineCustomActionTypeArtifactDetailsMaximumCount :: Val Integer'
+  , _codePipelineCustomActionTypeArtifactDetailsMinimumCount :: Val Integer'
+  } deriving (Show, Generic)
+
+instance ToJSON CodePipelineCustomActionTypeArtifactDetails where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 44, omitNothingFields = True }
+
+instance FromJSON CodePipelineCustomActionTypeArtifactDetails where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 44, omitNothingFields = True }
+
+-- | Constructor for 'CodePipelineCustomActionTypeArtifactDetails' containing
+-- | required fields as arguments.
+codePipelineCustomActionTypeArtifactDetails
+  :: Val Integer' -- ^ 'cpcatadMaximumCount'
+  -> Val Integer' -- ^ 'cpcatadMinimumCount'
+  -> CodePipelineCustomActionTypeArtifactDetails
+codePipelineCustomActionTypeArtifactDetails maximumCountarg minimumCountarg =
+  CodePipelineCustomActionTypeArtifactDetails
+  { _codePipelineCustomActionTypeArtifactDetailsMaximumCount = maximumCountarg
+  , _codePipelineCustomActionTypeArtifactDetailsMinimumCount = minimumCountarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-artifactdetails.html#cfn-codepipeline-customactiontype-artifactdetails-maximumcount
+cpcatadMaximumCount :: Lens' CodePipelineCustomActionTypeArtifactDetails (Val Integer')
+cpcatadMaximumCount = lens _codePipelineCustomActionTypeArtifactDetailsMaximumCount (\s a -> s { _codePipelineCustomActionTypeArtifactDetailsMaximumCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-artifactdetails.html#cfn-codepipeline-customactiontype-artifactdetails-minimumcount
+cpcatadMinimumCount :: Lens' CodePipelineCustomActionTypeArtifactDetails (Val Integer')
+cpcatadMinimumCount = lens _codePipelineCustomActionTypeArtifactDetailsMinimumCount (\s a -> s { _codePipelineCustomActionTypeArtifactDetailsMinimumCount = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeConfigurationProperties.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeConfigurationProperties.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeConfigurationProperties.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-configurationproperties.html
+
+module Stratosphere.ResourceProperties.CodePipelineCustomActionTypeConfigurationProperties where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | CodePipelineCustomActionTypeConfigurationProperties. See
+-- | 'codePipelineCustomActionTypeConfigurationProperties' for a more
+-- | convenient constructor.
+data CodePipelineCustomActionTypeConfigurationProperties =
+  CodePipelineCustomActionTypeConfigurationProperties
+  { _codePipelineCustomActionTypeConfigurationPropertiesDescription :: Maybe (Val Text)
+  , _codePipelineCustomActionTypeConfigurationPropertiesKey :: Val Bool'
+  , _codePipelineCustomActionTypeConfigurationPropertiesName :: Val Text
+  , _codePipelineCustomActionTypeConfigurationPropertiesQueryable :: Maybe (Val Bool')
+  , _codePipelineCustomActionTypeConfigurationPropertiesRequired :: Val Bool'
+  , _codePipelineCustomActionTypeConfigurationPropertiesSecret :: Val Bool'
+  , _codePipelineCustomActionTypeConfigurationPropertiesType :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CodePipelineCustomActionTypeConfigurationProperties where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 52, omitNothingFields = True }
+
+instance FromJSON CodePipelineCustomActionTypeConfigurationProperties where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 52, omitNothingFields = True }
+
+-- | Constructor for 'CodePipelineCustomActionTypeConfigurationProperties'
+-- | containing required fields as arguments.
+codePipelineCustomActionTypeConfigurationProperties
+  :: Val Bool' -- ^ 'cpcatcpKey'
+  -> Val Text -- ^ 'cpcatcpName'
+  -> Val Bool' -- ^ 'cpcatcpRequired'
+  -> Val Bool' -- ^ 'cpcatcpSecret'
+  -> CodePipelineCustomActionTypeConfigurationProperties
+codePipelineCustomActionTypeConfigurationProperties keyarg namearg requiredarg secretarg =
+  CodePipelineCustomActionTypeConfigurationProperties
+  { _codePipelineCustomActionTypeConfigurationPropertiesDescription = Nothing
+  , _codePipelineCustomActionTypeConfigurationPropertiesKey = keyarg
+  , _codePipelineCustomActionTypeConfigurationPropertiesName = namearg
+  , _codePipelineCustomActionTypeConfigurationPropertiesQueryable = Nothing
+  , _codePipelineCustomActionTypeConfigurationPropertiesRequired = requiredarg
+  , _codePipelineCustomActionTypeConfigurationPropertiesSecret = secretarg
+  , _codePipelineCustomActionTypeConfigurationPropertiesType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-configurationproperties.html#cfn-codepipeline-customactiontype-configurationproperties-description
+cpcatcpDescription :: Lens' CodePipelineCustomActionTypeConfigurationProperties (Maybe (Val Text))
+cpcatcpDescription = lens _codePipelineCustomActionTypeConfigurationPropertiesDescription (\s a -> s { _codePipelineCustomActionTypeConfigurationPropertiesDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-configurationproperties.html#cfn-codepipeline-customactiontype-configurationproperties-key
+cpcatcpKey :: Lens' CodePipelineCustomActionTypeConfigurationProperties (Val Bool')
+cpcatcpKey = lens _codePipelineCustomActionTypeConfigurationPropertiesKey (\s a -> s { _codePipelineCustomActionTypeConfigurationPropertiesKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-configurationproperties.html#cfn-codepipeline-customactiontype-configurationproperties-name
+cpcatcpName :: Lens' CodePipelineCustomActionTypeConfigurationProperties (Val Text)
+cpcatcpName = lens _codePipelineCustomActionTypeConfigurationPropertiesName (\s a -> s { _codePipelineCustomActionTypeConfigurationPropertiesName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-configurationproperties.html#cfn-codepipeline-customactiontype-configurationproperties-queryable
+cpcatcpQueryable :: Lens' CodePipelineCustomActionTypeConfigurationProperties (Maybe (Val Bool'))
+cpcatcpQueryable = lens _codePipelineCustomActionTypeConfigurationPropertiesQueryable (\s a -> s { _codePipelineCustomActionTypeConfigurationPropertiesQueryable = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-configurationproperties.html#cfn-codepipeline-customactiontype-configurationproperties-required
+cpcatcpRequired :: Lens' CodePipelineCustomActionTypeConfigurationProperties (Val Bool')
+cpcatcpRequired = lens _codePipelineCustomActionTypeConfigurationPropertiesRequired (\s a -> s { _codePipelineCustomActionTypeConfigurationPropertiesRequired = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-configurationproperties.html#cfn-codepipeline-customactiontype-configurationproperties-secret
+cpcatcpSecret :: Lens' CodePipelineCustomActionTypeConfigurationProperties (Val Bool')
+cpcatcpSecret = lens _codePipelineCustomActionTypeConfigurationPropertiesSecret (\s a -> s { _codePipelineCustomActionTypeConfigurationPropertiesSecret = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-configurationproperties.html#cfn-codepipeline-customactiontype-configurationproperties-type
+cpcatcpType :: Lens' CodePipelineCustomActionTypeConfigurationProperties (Maybe (Val Text))
+cpcatcpType = lens _codePipelineCustomActionTypeConfigurationPropertiesType (\s a -> s { _codePipelineCustomActionTypeConfigurationPropertiesType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeSettings.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeSettings.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelineCustomActionTypeSettings.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-settings.html
+
+module Stratosphere.ResourceProperties.CodePipelineCustomActionTypeSettings where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodePipelineCustomActionTypeSettings. See
+-- | 'codePipelineCustomActionTypeSettings' for a more convenient constructor.
+data CodePipelineCustomActionTypeSettings =
+  CodePipelineCustomActionTypeSettings
+  { _codePipelineCustomActionTypeSettingsEntityUrlTemplate :: Maybe (Val Text)
+  , _codePipelineCustomActionTypeSettingsExecutionUrlTemplate :: Maybe (Val Text)
+  , _codePipelineCustomActionTypeSettingsRevisionUrlTemplate :: Maybe (Val Text)
+  , _codePipelineCustomActionTypeSettingsThirdPartyConfigurationUrl :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CodePipelineCustomActionTypeSettings where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+instance FromJSON CodePipelineCustomActionTypeSettings where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+-- | Constructor for 'CodePipelineCustomActionTypeSettings' containing
+-- | required fields as arguments.
+codePipelineCustomActionTypeSettings
+  :: CodePipelineCustomActionTypeSettings
+codePipelineCustomActionTypeSettings  =
+  CodePipelineCustomActionTypeSettings
+  { _codePipelineCustomActionTypeSettingsEntityUrlTemplate = Nothing
+  , _codePipelineCustomActionTypeSettingsExecutionUrlTemplate = Nothing
+  , _codePipelineCustomActionTypeSettingsRevisionUrlTemplate = Nothing
+  , _codePipelineCustomActionTypeSettingsThirdPartyConfigurationUrl = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-settings.html#cfn-codepipeline-customactiontype-settings-entityurltemplate
+cpcatsEntityUrlTemplate :: Lens' CodePipelineCustomActionTypeSettings (Maybe (Val Text))
+cpcatsEntityUrlTemplate = lens _codePipelineCustomActionTypeSettingsEntityUrlTemplate (\s a -> s { _codePipelineCustomActionTypeSettingsEntityUrlTemplate = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-settings.html#cfn-codepipeline-customactiontype-settings-executionurltemplate
+cpcatsExecutionUrlTemplate :: Lens' CodePipelineCustomActionTypeSettings (Maybe (Val Text))
+cpcatsExecutionUrlTemplate = lens _codePipelineCustomActionTypeSettingsExecutionUrlTemplate (\s a -> s { _codePipelineCustomActionTypeSettingsExecutionUrlTemplate = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-settings.html#cfn-codepipeline-customactiontype-settings-revisionurltemplate
+cpcatsRevisionUrlTemplate :: Lens' CodePipelineCustomActionTypeSettings (Maybe (Val Text))
+cpcatsRevisionUrlTemplate = lens _codePipelineCustomActionTypeSettingsRevisionUrlTemplate (\s a -> s { _codePipelineCustomActionTypeSettingsRevisionUrlTemplate = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-settings.html#cfn-codepipeline-customactiontype-settings-thirdpartyconfigurationurl
+cpcatsThirdPartyConfigurationUrl :: Lens' CodePipelineCustomActionTypeSettings (Maybe (Val Text))
+cpcatsThirdPartyConfigurationUrl = lens _codePipelineCustomActionTypeSettingsThirdPartyConfigurationUrl (\s a -> s { _codePipelineCustomActionTypeSettingsThirdPartyConfigurationUrl = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineActionDeclaration.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineActionDeclaration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineActionDeclaration.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions.html
+
+module Stratosphere.ResourceProperties.CodePipelinePipelineActionDeclaration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CodePipelinePipelineActionTypeId
+import Stratosphere.ResourceProperties.CodePipelinePipelineInputArtifact
+import Stratosphere.ResourceProperties.CodePipelinePipelineOutputArtifact
+
+-- | Full data type definition for CodePipelinePipelineActionDeclaration. See
+-- | 'codePipelinePipelineActionDeclaration' for a more convenient
+-- | constructor.
+data CodePipelinePipelineActionDeclaration =
+  CodePipelinePipelineActionDeclaration
+  { _codePipelinePipelineActionDeclarationActionTypeId :: CodePipelinePipelineActionTypeId
+  , _codePipelinePipelineActionDeclarationConfiguration :: Maybe Object
+  , _codePipelinePipelineActionDeclarationInputArtifacts :: Maybe [CodePipelinePipelineInputArtifact]
+  , _codePipelinePipelineActionDeclarationName :: Val Text
+  , _codePipelinePipelineActionDeclarationOutputArtifacts :: Maybe [CodePipelinePipelineOutputArtifact]
+  , _codePipelinePipelineActionDeclarationRoleArn :: Maybe (Val Text)
+  , _codePipelinePipelineActionDeclarationRunOrder :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON CodePipelinePipelineActionDeclaration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+
+instance FromJSON CodePipelinePipelineActionDeclaration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+
+-- | Constructor for 'CodePipelinePipelineActionDeclaration' containing
+-- | required fields as arguments.
+codePipelinePipelineActionDeclaration
+  :: CodePipelinePipelineActionTypeId -- ^ 'cppadActionTypeId'
+  -> Val Text -- ^ 'cppadName'
+  -> CodePipelinePipelineActionDeclaration
+codePipelinePipelineActionDeclaration actionTypeIdarg namearg =
+  CodePipelinePipelineActionDeclaration
+  { _codePipelinePipelineActionDeclarationActionTypeId = actionTypeIdarg
+  , _codePipelinePipelineActionDeclarationConfiguration = Nothing
+  , _codePipelinePipelineActionDeclarationInputArtifacts = Nothing
+  , _codePipelinePipelineActionDeclarationName = namearg
+  , _codePipelinePipelineActionDeclarationOutputArtifacts = Nothing
+  , _codePipelinePipelineActionDeclarationRoleArn = Nothing
+  , _codePipelinePipelineActionDeclarationRunOrder = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions.html#cfn-codepipeline-pipeline-stages-actions-actiontypeid
+cppadActionTypeId :: Lens' CodePipelinePipelineActionDeclaration CodePipelinePipelineActionTypeId
+cppadActionTypeId = lens _codePipelinePipelineActionDeclarationActionTypeId (\s a -> s { _codePipelinePipelineActionDeclarationActionTypeId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions.html#cfn-codepipeline-pipeline-stages-actions-configuration
+cppadConfiguration :: Lens' CodePipelinePipelineActionDeclaration (Maybe Object)
+cppadConfiguration = lens _codePipelinePipelineActionDeclarationConfiguration (\s a -> s { _codePipelinePipelineActionDeclarationConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions.html#cfn-codepipeline-pipeline-stages-actions-inputartifacts
+cppadInputArtifacts :: Lens' CodePipelinePipelineActionDeclaration (Maybe [CodePipelinePipelineInputArtifact])
+cppadInputArtifacts = lens _codePipelinePipelineActionDeclarationInputArtifacts (\s a -> s { _codePipelinePipelineActionDeclarationInputArtifacts = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions.html#cfn-codepipeline-pipeline-stages-actions-name
+cppadName :: Lens' CodePipelinePipelineActionDeclaration (Val Text)
+cppadName = lens _codePipelinePipelineActionDeclarationName (\s a -> s { _codePipelinePipelineActionDeclarationName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions.html#cfn-codepipeline-pipeline-stages-actions-outputartifacts
+cppadOutputArtifacts :: Lens' CodePipelinePipelineActionDeclaration (Maybe [CodePipelinePipelineOutputArtifact])
+cppadOutputArtifacts = lens _codePipelinePipelineActionDeclarationOutputArtifacts (\s a -> s { _codePipelinePipelineActionDeclarationOutputArtifacts = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions.html#cfn-codepipeline-pipeline-stages-actions-rolearn
+cppadRoleArn :: Lens' CodePipelinePipelineActionDeclaration (Maybe (Val Text))
+cppadRoleArn = lens _codePipelinePipelineActionDeclarationRoleArn (\s a -> s { _codePipelinePipelineActionDeclarationRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions.html#cfn-codepipeline-pipeline-stages-actions-runorder
+cppadRunOrder :: Lens' CodePipelinePipelineActionDeclaration (Maybe (Val Integer'))
+cppadRunOrder = lens _codePipelinePipelineActionDeclarationRunOrder (\s a -> s { _codePipelinePipelineActionDeclarationRunOrder = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineActionTypeId.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineActionTypeId.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineActionTypeId.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions-actiontypeid.html
+
+module Stratosphere.ResourceProperties.CodePipelinePipelineActionTypeId where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodePipelinePipelineActionTypeId. See
+-- | 'codePipelinePipelineActionTypeId' for a more convenient constructor.
+data CodePipelinePipelineActionTypeId =
+  CodePipelinePipelineActionTypeId
+  { _codePipelinePipelineActionTypeIdCategory :: Val Text
+  , _codePipelinePipelineActionTypeIdOwner :: Val Text
+  , _codePipelinePipelineActionTypeIdProvider :: Val Text
+  , _codePipelinePipelineActionTypeIdVersion :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CodePipelinePipelineActionTypeId where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+instance FromJSON CodePipelinePipelineActionTypeId where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+-- | Constructor for 'CodePipelinePipelineActionTypeId' containing required
+-- | fields as arguments.
+codePipelinePipelineActionTypeId
+  :: Val Text -- ^ 'cppatiCategory'
+  -> Val Text -- ^ 'cppatiOwner'
+  -> Val Text -- ^ 'cppatiProvider'
+  -> Val Text -- ^ 'cppatiVersion'
+  -> CodePipelinePipelineActionTypeId
+codePipelinePipelineActionTypeId categoryarg ownerarg providerarg versionarg =
+  CodePipelinePipelineActionTypeId
+  { _codePipelinePipelineActionTypeIdCategory = categoryarg
+  , _codePipelinePipelineActionTypeIdOwner = ownerarg
+  , _codePipelinePipelineActionTypeIdProvider = providerarg
+  , _codePipelinePipelineActionTypeIdVersion = versionarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions-actiontypeid.html#cfn-codepipeline-pipeline-stages-actions-actiontypeid-category
+cppatiCategory :: Lens' CodePipelinePipelineActionTypeId (Val Text)
+cppatiCategory = lens _codePipelinePipelineActionTypeIdCategory (\s a -> s { _codePipelinePipelineActionTypeIdCategory = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions-actiontypeid.html#cfn-codepipeline-pipeline-stages-actions-actiontypeid-owner
+cppatiOwner :: Lens' CodePipelinePipelineActionTypeId (Val Text)
+cppatiOwner = lens _codePipelinePipelineActionTypeIdOwner (\s a -> s { _codePipelinePipelineActionTypeIdOwner = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions-actiontypeid.html#cfn-codepipeline-pipeline-stages-actions-actiontypeid-provider
+cppatiProvider :: Lens' CodePipelinePipelineActionTypeId (Val Text)
+cppatiProvider = lens _codePipelinePipelineActionTypeIdProvider (\s a -> s { _codePipelinePipelineActionTypeIdProvider = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions-actiontypeid.html#cfn-codepipeline-pipeline-stages-actions-actiontypeid-version
+cppatiVersion :: Lens' CodePipelinePipelineActionTypeId (Val Text)
+cppatiVersion = lens _codePipelinePipelineActionTypeIdVersion (\s a -> s { _codePipelinePipelineActionTypeIdVersion = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineArtifactStore.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineArtifactStore.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineArtifactStore.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-artifactstore.html
+
+module Stratosphere.ResourceProperties.CodePipelinePipelineArtifactStore where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CodePipelinePipelineEncryptionKey
+
+-- | Full data type definition for CodePipelinePipelineArtifactStore. See
+-- | 'codePipelinePipelineArtifactStore' for a more convenient constructor.
+data CodePipelinePipelineArtifactStore =
+  CodePipelinePipelineArtifactStore
+  { _codePipelinePipelineArtifactStoreEncryptionKey :: Maybe CodePipelinePipelineEncryptionKey
+  , _codePipelinePipelineArtifactStoreLocation :: Val Text
+  , _codePipelinePipelineArtifactStoreType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CodePipelinePipelineArtifactStore where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON CodePipelinePipelineArtifactStore where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'CodePipelinePipelineArtifactStore' containing required
+-- | fields as arguments.
+codePipelinePipelineArtifactStore
+  :: Val Text -- ^ 'cppasLocation'
+  -> Val Text -- ^ 'cppasType'
+  -> CodePipelinePipelineArtifactStore
+codePipelinePipelineArtifactStore locationarg typearg =
+  CodePipelinePipelineArtifactStore
+  { _codePipelinePipelineArtifactStoreEncryptionKey = Nothing
+  , _codePipelinePipelineArtifactStoreLocation = locationarg
+  , _codePipelinePipelineArtifactStoreType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-artifactstore.html#cfn-codepipeline-pipeline-artifactstore-encryptionkey
+cppasEncryptionKey :: Lens' CodePipelinePipelineArtifactStore (Maybe CodePipelinePipelineEncryptionKey)
+cppasEncryptionKey = lens _codePipelinePipelineArtifactStoreEncryptionKey (\s a -> s { _codePipelinePipelineArtifactStoreEncryptionKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-artifactstore.html#cfn-codepipeline-pipeline-artifactstore-location
+cppasLocation :: Lens' CodePipelinePipelineArtifactStore (Val Text)
+cppasLocation = lens _codePipelinePipelineArtifactStoreLocation (\s a -> s { _codePipelinePipelineArtifactStoreLocation = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-artifactstore.html#cfn-codepipeline-pipeline-artifactstore-type
+cppasType :: Lens' CodePipelinePipelineArtifactStore (Val Text)
+cppasType = lens _codePipelinePipelineArtifactStoreType (\s a -> s { _codePipelinePipelineArtifactStoreType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineBlockerDeclaration.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineBlockerDeclaration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineBlockerDeclaration.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-blockers.html
+
+module Stratosphere.ResourceProperties.CodePipelinePipelineBlockerDeclaration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodePipelinePipelineBlockerDeclaration. See
+-- | 'codePipelinePipelineBlockerDeclaration' for a more convenient
+-- | constructor.
+data CodePipelinePipelineBlockerDeclaration =
+  CodePipelinePipelineBlockerDeclaration
+  { _codePipelinePipelineBlockerDeclarationName :: Val Text
+  , _codePipelinePipelineBlockerDeclarationType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CodePipelinePipelineBlockerDeclaration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+instance FromJSON CodePipelinePipelineBlockerDeclaration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+-- | Constructor for 'CodePipelinePipelineBlockerDeclaration' containing
+-- | required fields as arguments.
+codePipelinePipelineBlockerDeclaration
+  :: Val Text -- ^ 'cppbdName'
+  -> Val Text -- ^ 'cppbdType'
+  -> CodePipelinePipelineBlockerDeclaration
+codePipelinePipelineBlockerDeclaration namearg typearg =
+  CodePipelinePipelineBlockerDeclaration
+  { _codePipelinePipelineBlockerDeclarationName = namearg
+  , _codePipelinePipelineBlockerDeclarationType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-blockers.html#cfn-codepipeline-pipeline-stages-blockers-name
+cppbdName :: Lens' CodePipelinePipelineBlockerDeclaration (Val Text)
+cppbdName = lens _codePipelinePipelineBlockerDeclarationName (\s a -> s { _codePipelinePipelineBlockerDeclarationName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-blockers.html#cfn-codepipeline-pipeline-stages-blockers-type
+cppbdType :: Lens' CodePipelinePipelineBlockerDeclaration (Val Text)
+cppbdType = lens _codePipelinePipelineBlockerDeclarationType (\s a -> s { _codePipelinePipelineBlockerDeclarationType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineEncryptionKey.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineEncryptionKey.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineEncryptionKey.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-artifactstore-encryptionkey.html
+
+module Stratosphere.ResourceProperties.CodePipelinePipelineEncryptionKey where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodePipelinePipelineEncryptionKey. See
+-- | 'codePipelinePipelineEncryptionKey' for a more convenient constructor.
+data CodePipelinePipelineEncryptionKey =
+  CodePipelinePipelineEncryptionKey
+  { _codePipelinePipelineEncryptionKeyId :: Val Text
+  , _codePipelinePipelineEncryptionKeyType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CodePipelinePipelineEncryptionKey where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON CodePipelinePipelineEncryptionKey where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'CodePipelinePipelineEncryptionKey' containing required
+-- | fields as arguments.
+codePipelinePipelineEncryptionKey
+  :: Val Text -- ^ 'cppekId'
+  -> Val Text -- ^ 'cppekType'
+  -> CodePipelinePipelineEncryptionKey
+codePipelinePipelineEncryptionKey idarg typearg =
+  CodePipelinePipelineEncryptionKey
+  { _codePipelinePipelineEncryptionKeyId = idarg
+  , _codePipelinePipelineEncryptionKeyType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-artifactstore-encryptionkey.html#cfn-codepipeline-pipeline-artifactstore-encryptionkey-id
+cppekId :: Lens' CodePipelinePipelineEncryptionKey (Val Text)
+cppekId = lens _codePipelinePipelineEncryptionKeyId (\s a -> s { _codePipelinePipelineEncryptionKeyId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-artifactstore-encryptionkey.html#cfn-codepipeline-pipeline-artifactstore-encryptionkey-type
+cppekType :: Lens' CodePipelinePipelineEncryptionKey (Val Text)
+cppekType = lens _codePipelinePipelineEncryptionKeyType (\s a -> s { _codePipelinePipelineEncryptionKeyType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineInputArtifact.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineInputArtifact.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineInputArtifact.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions-inputartifacts.html
+
+module Stratosphere.ResourceProperties.CodePipelinePipelineInputArtifact where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodePipelinePipelineInputArtifact. See
+-- | 'codePipelinePipelineInputArtifact' for a more convenient constructor.
+data CodePipelinePipelineInputArtifact =
+  CodePipelinePipelineInputArtifact
+  { _codePipelinePipelineInputArtifactName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CodePipelinePipelineInputArtifact where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON CodePipelinePipelineInputArtifact where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'CodePipelinePipelineInputArtifact' containing required
+-- | fields as arguments.
+codePipelinePipelineInputArtifact
+  :: Val Text -- ^ 'cppiaName'
+  -> CodePipelinePipelineInputArtifact
+codePipelinePipelineInputArtifact namearg =
+  CodePipelinePipelineInputArtifact
+  { _codePipelinePipelineInputArtifactName = namearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions-inputartifacts.html#cfn-codepipeline-pipeline-stages-actions-inputartifacts-name
+cppiaName :: Lens' CodePipelinePipelineInputArtifact (Val Text)
+cppiaName = lens _codePipelinePipelineInputArtifactName (\s a -> s { _codePipelinePipelineInputArtifactName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineOutputArtifact.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineOutputArtifact.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineOutputArtifact.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions-outputartifacts.html
+
+module Stratosphere.ResourceProperties.CodePipelinePipelineOutputArtifact where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodePipelinePipelineOutputArtifact. See
+-- | 'codePipelinePipelineOutputArtifact' for a more convenient constructor.
+data CodePipelinePipelineOutputArtifact =
+  CodePipelinePipelineOutputArtifact
+  { _codePipelinePipelineOutputArtifactName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CodePipelinePipelineOutputArtifact where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+instance FromJSON CodePipelinePipelineOutputArtifact where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+-- | Constructor for 'CodePipelinePipelineOutputArtifact' containing required
+-- | fields as arguments.
+codePipelinePipelineOutputArtifact
+  :: Val Text -- ^ 'cppoaName'
+  -> CodePipelinePipelineOutputArtifact
+codePipelinePipelineOutputArtifact namearg =
+  CodePipelinePipelineOutputArtifact
+  { _codePipelinePipelineOutputArtifactName = namearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages-actions-outputartifacts.html#cfn-codepipeline-pipeline-stages-actions-outputartifacts-name
+cppoaName :: Lens' CodePipelinePipelineOutputArtifact (Val Text)
+cppoaName = lens _codePipelinePipelineOutputArtifactName (\s a -> s { _codePipelinePipelineOutputArtifactName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineStageDeclaration.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineStageDeclaration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineStageDeclaration.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages.html
+
+module Stratosphere.ResourceProperties.CodePipelinePipelineStageDeclaration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CodePipelinePipelineActionDeclaration
+import Stratosphere.ResourceProperties.CodePipelinePipelineBlockerDeclaration
+
+-- | Full data type definition for CodePipelinePipelineStageDeclaration. See
+-- | 'codePipelinePipelineStageDeclaration' for a more convenient constructor.
+data CodePipelinePipelineStageDeclaration =
+  CodePipelinePipelineStageDeclaration
+  { _codePipelinePipelineStageDeclarationActions :: [CodePipelinePipelineActionDeclaration]
+  , _codePipelinePipelineStageDeclarationBlockers :: Maybe [CodePipelinePipelineBlockerDeclaration]
+  , _codePipelinePipelineStageDeclarationName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CodePipelinePipelineStageDeclaration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+instance FromJSON CodePipelinePipelineStageDeclaration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+-- | Constructor for 'CodePipelinePipelineStageDeclaration' containing
+-- | required fields as arguments.
+codePipelinePipelineStageDeclaration
+  :: [CodePipelinePipelineActionDeclaration] -- ^ 'cppsdActions'
+  -> Val Text -- ^ 'cppsdName'
+  -> CodePipelinePipelineStageDeclaration
+codePipelinePipelineStageDeclaration actionsarg namearg =
+  CodePipelinePipelineStageDeclaration
+  { _codePipelinePipelineStageDeclarationActions = actionsarg
+  , _codePipelinePipelineStageDeclarationBlockers = Nothing
+  , _codePipelinePipelineStageDeclarationName = namearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages.html#cfn-codepipeline-pipeline-stages-actions
+cppsdActions :: Lens' CodePipelinePipelineStageDeclaration [CodePipelinePipelineActionDeclaration]
+cppsdActions = lens _codePipelinePipelineStageDeclarationActions (\s a -> s { _codePipelinePipelineStageDeclarationActions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages.html#cfn-codepipeline-pipeline-stages-blockers
+cppsdBlockers :: Lens' CodePipelinePipelineStageDeclaration (Maybe [CodePipelinePipelineBlockerDeclaration])
+cppsdBlockers = lens _codePipelinePipelineStageDeclarationBlockers (\s a -> s { _codePipelinePipelineStageDeclarationBlockers = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-stages.html#cfn-codepipeline-pipeline-stages-name
+cppsdName :: Lens' CodePipelinePipelineStageDeclaration (Val Text)
+cppsdName = lens _codePipelinePipelineStageDeclarationName (\s a -> s { _codePipelinePipelineStageDeclarationName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineStageTransition.hs b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineStageTransition.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodePipelinePipelineStageTransition.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-disableinboundstagetransitions.html
+
+module Stratosphere.ResourceProperties.CodePipelinePipelineStageTransition where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodePipelinePipelineStageTransition. See
+-- | 'codePipelinePipelineStageTransition' for a more convenient constructor.
+data CodePipelinePipelineStageTransition =
+  CodePipelinePipelineStageTransition
+  { _codePipelinePipelineStageTransitionReason :: Val Text
+  , _codePipelinePipelineStageTransitionStageName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CodePipelinePipelineStageTransition where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+instance FromJSON CodePipelinePipelineStageTransition where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+-- | Constructor for 'CodePipelinePipelineStageTransition' containing required
+-- | fields as arguments.
+codePipelinePipelineStageTransition
+  :: Val Text -- ^ 'cppstReason'
+  -> Val Text -- ^ 'cppstStageName'
+  -> CodePipelinePipelineStageTransition
+codePipelinePipelineStageTransition reasonarg stageNamearg =
+  CodePipelinePipelineStageTransition
+  { _codePipelinePipelineStageTransitionReason = reasonarg
+  , _codePipelinePipelineStageTransitionStageName = stageNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-disableinboundstagetransitions.html#cfn-codepipeline-pipeline-disableinboundstagetransitions-reason
+cppstReason :: Lens' CodePipelinePipelineStageTransition (Val Text)
+cppstReason = lens _codePipelinePipelineStageTransitionReason (\s a -> s { _codePipelinePipelineStageTransitionReason = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-pipeline-disableinboundstagetransitions.html#cfn-codepipeline-pipeline-disableinboundstagetransitions-stagename
+cppstStageName :: Lens' CodePipelinePipelineStageTransition (Val Text)
+cppstStageName = lens _codePipelinePipelineStageTransitionStageName (\s a -> s { _codePipelinePipelineStageTransitionStageName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleScope.hs b/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleScope.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleScope.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-scope.html
+
+module Stratosphere.ResourceProperties.ConfigConfigRuleScope where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ConfigConfigRuleScope. See
+-- | 'configConfigRuleScope' for a more convenient constructor.
+data ConfigConfigRuleScope =
+  ConfigConfigRuleScope
+  { _configConfigRuleScopeComplianceResourceId :: Maybe (Val Text)
+  , _configConfigRuleScopeComplianceResourceTypes :: Maybe [Val Text]
+  , _configConfigRuleScopeTagKey :: Maybe (Val Text)
+  , _configConfigRuleScopeTagValue :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ConfigConfigRuleScope where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+instance FromJSON ConfigConfigRuleScope where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+-- | Constructor for 'ConfigConfigRuleScope' containing required fields as
+-- | arguments.
+configConfigRuleScope
+  :: ConfigConfigRuleScope
+configConfigRuleScope  =
+  ConfigConfigRuleScope
+  { _configConfigRuleScopeComplianceResourceId = Nothing
+  , _configConfigRuleScopeComplianceResourceTypes = Nothing
+  , _configConfigRuleScopeTagKey = Nothing
+  , _configConfigRuleScopeTagValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-scope.html#cfn-config-configrule-scope-complianceresourceid
+ccrsComplianceResourceId :: Lens' ConfigConfigRuleScope (Maybe (Val Text))
+ccrsComplianceResourceId = lens _configConfigRuleScopeComplianceResourceId (\s a -> s { _configConfigRuleScopeComplianceResourceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-scope.html#cfn-config-configrule-scope-complianceresourcetypes
+ccrsComplianceResourceTypes :: Lens' ConfigConfigRuleScope (Maybe [Val Text])
+ccrsComplianceResourceTypes = lens _configConfigRuleScopeComplianceResourceTypes (\s a -> s { _configConfigRuleScopeComplianceResourceTypes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-scope.html#cfn-config-configrule-scope-tagkey
+ccrsTagKey :: Lens' ConfigConfigRuleScope (Maybe (Val Text))
+ccrsTagKey = lens _configConfigRuleScopeTagKey (\s a -> s { _configConfigRuleScopeTagKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-scope.html#cfn-config-configrule-scope-tagvalue
+ccrsTagValue :: Lens' ConfigConfigRuleScope (Maybe (Val Text))
+ccrsTagValue = lens _configConfigRuleScopeTagValue (\s a -> s { _configConfigRuleScopeTagValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSource.hs b/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSource.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSource.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-source.html
+
+module Stratosphere.ResourceProperties.ConfigConfigRuleSource where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ConfigConfigRuleSourceDetail
+
+-- | Full data type definition for ConfigConfigRuleSource. See
+-- | 'configConfigRuleSource' for a more convenient constructor.
+data ConfigConfigRuleSource =
+  ConfigConfigRuleSource
+  { _configConfigRuleSourceOwner :: Val Text
+  , _configConfigRuleSourceSourceDetails :: Maybe [ConfigConfigRuleSourceDetail]
+  , _configConfigRuleSourceSourceIdentifier :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ConfigConfigRuleSource where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+instance FromJSON ConfigConfigRuleSource where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+-- | Constructor for 'ConfigConfigRuleSource' containing required fields as
+-- | arguments.
+configConfigRuleSource
+  :: Val Text -- ^ 'ccrsOwner'
+  -> Val Text -- ^ 'ccrsSourceIdentifier'
+  -> ConfigConfigRuleSource
+configConfigRuleSource ownerarg sourceIdentifierarg =
+  ConfigConfigRuleSource
+  { _configConfigRuleSourceOwner = ownerarg
+  , _configConfigRuleSourceSourceDetails = Nothing
+  , _configConfigRuleSourceSourceIdentifier = sourceIdentifierarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-source.html#cfn-config-configrule-source-owner
+ccrsOwner :: Lens' ConfigConfigRuleSource (Val Text)
+ccrsOwner = lens _configConfigRuleSourceOwner (\s a -> s { _configConfigRuleSourceOwner = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-source.html#cfn-config-configrule-source-sourcedetails
+ccrsSourceDetails :: Lens' ConfigConfigRuleSource (Maybe [ConfigConfigRuleSourceDetail])
+ccrsSourceDetails = lens _configConfigRuleSourceSourceDetails (\s a -> s { _configConfigRuleSourceSourceDetails = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-source.html#cfn-config-configrule-source-sourceidentifier
+ccrsSourceIdentifier :: Lens' ConfigConfigRuleSource (Val Text)
+ccrsSourceIdentifier = lens _configConfigRuleSourceSourceIdentifier (\s a -> s { _configConfigRuleSourceSourceIdentifier = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSourceDetail.hs b/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSourceDetail.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSourceDetail.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-source-sourcedetails.html
+
+module Stratosphere.ResourceProperties.ConfigConfigRuleSourceDetail where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ConfigConfigRuleSourceDetail. See
+-- | 'configConfigRuleSourceDetail' for a more convenient constructor.
+data ConfigConfigRuleSourceDetail =
+  ConfigConfigRuleSourceDetail
+  { _configConfigRuleSourceDetailEventSource :: Val Text
+  , _configConfigRuleSourceDetailMessageType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ConfigConfigRuleSourceDetail where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+instance FromJSON ConfigConfigRuleSourceDetail where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+-- | Constructor for 'ConfigConfigRuleSourceDetail' containing required fields
+-- | as arguments.
+configConfigRuleSourceDetail
+  :: Val Text -- ^ 'ccrsdEventSource'
+  -> Val Text -- ^ 'ccrsdMessageType'
+  -> ConfigConfigRuleSourceDetail
+configConfigRuleSourceDetail eventSourcearg messageTypearg =
+  ConfigConfigRuleSourceDetail
+  { _configConfigRuleSourceDetailEventSource = eventSourcearg
+  , _configConfigRuleSourceDetailMessageType = messageTypearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-source-sourcedetails.html#cfn-config-configrule-source-sourcedetail-eventsource
+ccrsdEventSource :: Lens' ConfigConfigRuleSourceDetail (Val Text)
+ccrsdEventSource = lens _configConfigRuleSourceDetailEventSource (\s a -> s { _configConfigRuleSourceDetailEventSource = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-source-sourcedetails.html#cfn-config-configrule-source-sourcedetail-messagetype
+ccrsdMessageType :: Lens' ConfigConfigRuleSourceDetail (Val Text)
+ccrsdMessageType = lens _configConfigRuleSourceDetailMessageType (\s a -> s { _configConfigRuleSourceDetailMessageType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ConfigConfigurationRecorderRecordingGroup.hs b/library-gen/Stratosphere/ResourceProperties/ConfigConfigurationRecorderRecordingGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ConfigConfigurationRecorderRecordingGroup.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configurationrecorder-recordinggroup.html
+
+module Stratosphere.ResourceProperties.ConfigConfigurationRecorderRecordingGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ConfigConfigurationRecorderRecordingGroup.
+-- | See 'configConfigurationRecorderRecordingGroup' for a more convenient
+-- | constructor.
+data ConfigConfigurationRecorderRecordingGroup =
+  ConfigConfigurationRecorderRecordingGroup
+  { _configConfigurationRecorderRecordingGroupAllSupported :: Maybe (Val Bool')
+  , _configConfigurationRecorderRecordingGroupIncludeGlobalResourceTypes :: Maybe (Val Bool')
+  , _configConfigurationRecorderRecordingGroupResourceTypes :: Maybe [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON ConfigConfigurationRecorderRecordingGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+
+instance FromJSON ConfigConfigurationRecorderRecordingGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+
+-- | Constructor for 'ConfigConfigurationRecorderRecordingGroup' containing
+-- | required fields as arguments.
+configConfigurationRecorderRecordingGroup
+  :: ConfigConfigurationRecorderRecordingGroup
+configConfigurationRecorderRecordingGroup  =
+  ConfigConfigurationRecorderRecordingGroup
+  { _configConfigurationRecorderRecordingGroupAllSupported = Nothing
+  , _configConfigurationRecorderRecordingGroupIncludeGlobalResourceTypes = Nothing
+  , _configConfigurationRecorderRecordingGroupResourceTypes = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configurationrecorder-recordinggroup.html#cfn-config-configurationrecorder-recordinggroup-allsupported
+ccrrgAllSupported :: Lens' ConfigConfigurationRecorderRecordingGroup (Maybe (Val Bool'))
+ccrrgAllSupported = lens _configConfigurationRecorderRecordingGroupAllSupported (\s a -> s { _configConfigurationRecorderRecordingGroupAllSupported = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configurationrecorder-recordinggroup.html#cfn-config-configurationrecorder-recordinggroup-includeglobalresourcetypes
+ccrrgIncludeGlobalResourceTypes :: Lens' ConfigConfigurationRecorderRecordingGroup (Maybe (Val Bool'))
+ccrrgIncludeGlobalResourceTypes = lens _configConfigurationRecorderRecordingGroupIncludeGlobalResourceTypes (\s a -> s { _configConfigurationRecorderRecordingGroupIncludeGlobalResourceTypes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configurationrecorder-recordinggroup.html#cfn-config-configurationrecorder-recordinggroup-resourcetypes
+ccrrgResourceTypes :: Lens' ConfigConfigurationRecorderRecordingGroup (Maybe [Val Text])
+ccrrgResourceTypes = lens _configConfigurationRecorderRecordingGroupResourceTypes (\s a -> s { _configConfigurationRecorderRecordingGroupResourceTypes = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ConfigDeliveryChannelConfigSnapshotDeliveryProperties.hs b/library-gen/Stratosphere/ResourceProperties/ConfigDeliveryChannelConfigSnapshotDeliveryProperties.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ConfigDeliveryChannelConfigSnapshotDeliveryProperties.hs
@@ -0,0 +1,43 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-deliverychannel-configsnapshotdeliveryproperties.html
+
+module Stratosphere.ResourceProperties.ConfigDeliveryChannelConfigSnapshotDeliveryProperties where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ConfigDeliveryChannelConfigSnapshotDeliveryProperties. See
+-- | 'configDeliveryChannelConfigSnapshotDeliveryProperties' for a more
+-- | convenient constructor.
+data ConfigDeliveryChannelConfigSnapshotDeliveryProperties =
+  ConfigDeliveryChannelConfigSnapshotDeliveryProperties
+  { _configDeliveryChannelConfigSnapshotDeliveryPropertiesDeliveryFrequency :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ConfigDeliveryChannelConfigSnapshotDeliveryProperties where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 54, omitNothingFields = True }
+
+instance FromJSON ConfigDeliveryChannelConfigSnapshotDeliveryProperties where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 54, omitNothingFields = True }
+
+-- | Constructor for 'ConfigDeliveryChannelConfigSnapshotDeliveryProperties'
+-- | containing required fields as arguments.
+configDeliveryChannelConfigSnapshotDeliveryProperties
+  :: ConfigDeliveryChannelConfigSnapshotDeliveryProperties
+configDeliveryChannelConfigSnapshotDeliveryProperties  =
+  ConfigDeliveryChannelConfigSnapshotDeliveryProperties
+  { _configDeliveryChannelConfigSnapshotDeliveryPropertiesDeliveryFrequency = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-deliverychannel-configsnapshotdeliveryproperties.html#cfn-config-deliverychannel-configsnapshotdeliveryproperties-deliveryfrequency
+cdccsdpDeliveryFrequency :: Lens' ConfigDeliveryChannelConfigSnapshotDeliveryProperties (Maybe (Val Text))
+cdccsdpDeliveryFrequency = lens _configDeliveryChannelConfigSnapshotDeliveryPropertiesDeliveryFrequency (\s a -> s { _configDeliveryChannelConfigSnapshotDeliveryPropertiesDeliveryFrequency = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ConnectionDrainingPolicy.hs b/library-gen/Stratosphere/ResourceProperties/ConnectionDrainingPolicy.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/ConnectionDrainingPolicy.hs
+++ /dev/null
@@ -1,58 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The ConnectionDrainingPolicy property describes how deregistered or
--- unhealthy instances handle in-flight requests for the
--- AWS::ElasticLoadBalancing::LoadBalancer resource. Connection draining
--- ensures that the load balancer completes serving all in-flight requests
--- made to a registered instance when the instance is deregistered or becomes
--- unhealthy. Without connection draining, the load balancer closes
--- connections to deregistered or unhealthy instances, and any in-flight
--- requests are not completed. For more information about connection draining
--- and default values, see Enable or Disable Connection Draining for Your Load
--- Balancer in the Elastic Load Balancing Developer Guide.
-
-module Stratosphere.ResourceProperties.ConnectionDrainingPolicy where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for ConnectionDrainingPolicy. See
--- 'connectionDrainingPolicy' for a more convenient constructor.
-data ConnectionDrainingPolicy =
-  ConnectionDrainingPolicy
-  { _connectionDrainingPolicyEnabled :: Val Bool'
-  , _connectionDrainingPolicyTimeout :: Maybe (Val Integer')
-  } deriving (Show, Generic)
-
-instance ToJSON ConnectionDrainingPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
-
-instance FromJSON ConnectionDrainingPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
-
--- | Constructor for 'ConnectionDrainingPolicy' containing required fields as
--- arguments.
-connectionDrainingPolicy
-  :: Val Bool' -- ^ 'cdpEnabled'
-  -> ConnectionDrainingPolicy
-connectionDrainingPolicy enabledarg =
-  ConnectionDrainingPolicy
-  { _connectionDrainingPolicyEnabled = enabledarg
-  , _connectionDrainingPolicyTimeout = Nothing
-  }
-
--- | Whether or not connection draining is enabled for the load balancer.
-cdpEnabled :: Lens' ConnectionDrainingPolicy (Val Bool')
-cdpEnabled = lens _connectionDrainingPolicyEnabled (\s a -> s { _connectionDrainingPolicyEnabled = a })
-
--- | The time in seconds after the load balancer closes all connections to a
--- deregistered or unhealthy instance.
-cdpTimeout :: Lens' ConnectionDrainingPolicy (Maybe (Val Integer'))
-cdpTimeout = lens _connectionDrainingPolicyTimeout (\s a -> s { _connectionDrainingPolicyTimeout = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ConnectionSettings.hs b/library-gen/Stratosphere/ResourceProperties/ConnectionSettings.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/ConnectionSettings.hs
+++ /dev/null
@@ -1,48 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | ConnectionSettings is a property of the
--- AWS::ElasticLoadBalancing::LoadBalancer resource that describes how long
--- the front-end and back-end connections of your load balancer can remain
--- idle. For more information, see Configure Idle Connection Timeout in the
--- Elastic Load Balancing Developer Guide.
-
-module Stratosphere.ResourceProperties.ConnectionSettings where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for ConnectionSettings. See
--- 'connectionSettings' for a more convenient constructor.
-data ConnectionSettings =
-  ConnectionSettings
-  { _connectionSettingsIdleTimeout :: Val Integer'
-  } deriving (Show, Generic)
-
-instance ToJSON ConnectionSettings where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
-
-instance FromJSON ConnectionSettings where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
-
--- | Constructor for 'ConnectionSettings' containing required fields as
--- arguments.
-connectionSettings
-  :: Val Integer' -- ^ 'csIdleTimeout'
-  -> ConnectionSettings
-connectionSettings idleTimeoutarg =
-  ConnectionSettings
-  { _connectionSettingsIdleTimeout = idleTimeoutarg
-  }
-
--- | The time (in seconds) that a connection to the load balancer can remain
--- idle, which means no data is sent over the connection. After the specified
--- time, the load balancer closes the connection.
-csIdleTimeout :: Lens' ConnectionSettings (Val Integer')
-csIdleTimeout = lens _connectionSettingsIdleTimeout (\s a -> s { _connectionSettingsIdleTimeout = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineField.hs b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineField.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineField.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-pipelineobjects-fields.html
+
+module Stratosphere.ResourceProperties.DataPipelinePipelineField where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for DataPipelinePipelineField. See
+-- | 'dataPipelinePipelineField' for a more convenient constructor.
+data DataPipelinePipelineField =
+  DataPipelinePipelineField
+  { _dataPipelinePipelineFieldKey :: Val Text
+  , _dataPipelinePipelineFieldRefValue :: Maybe (Val Text)
+  , _dataPipelinePipelineFieldStringValue :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON DataPipelinePipelineField where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+instance FromJSON DataPipelinePipelineField where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+-- | Constructor for 'DataPipelinePipelineField' containing required fields as
+-- | arguments.
+dataPipelinePipelineField
+  :: Val Text -- ^ 'dppfKey'
+  -> DataPipelinePipelineField
+dataPipelinePipelineField keyarg =
+  DataPipelinePipelineField
+  { _dataPipelinePipelineFieldKey = keyarg
+  , _dataPipelinePipelineFieldRefValue = Nothing
+  , _dataPipelinePipelineFieldStringValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-pipelineobjects-fields.html#cfn-datapipeline-pipeline-pipelineobjects-fields-key
+dppfKey :: Lens' DataPipelinePipelineField (Val Text)
+dppfKey = lens _dataPipelinePipelineFieldKey (\s a -> s { _dataPipelinePipelineFieldKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-pipelineobjects-fields.html#cfn-datapipeline-pipeline-pipelineobjects-fields-refvalue
+dppfRefValue :: Lens' DataPipelinePipelineField (Maybe (Val Text))
+dppfRefValue = lens _dataPipelinePipelineFieldRefValue (\s a -> s { _dataPipelinePipelineFieldRefValue = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-pipelineobjects-fields.html#cfn-datapipeline-pipeline-pipelineobjects-fields-stringvalue
+dppfStringValue :: Lens' DataPipelinePipelineField (Maybe (Val Text))
+dppfStringValue = lens _dataPipelinePipelineFieldStringValue (\s a -> s { _dataPipelinePipelineFieldStringValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterAttribute.hs b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterAttribute.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterAttribute.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-parameterobjects-attributes.html
+
+module Stratosphere.ResourceProperties.DataPipelinePipelineParameterAttribute where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for DataPipelinePipelineParameterAttribute. See
+-- | 'dataPipelinePipelineParameterAttribute' for a more convenient
+-- | constructor.
+data DataPipelinePipelineParameterAttribute =
+  DataPipelinePipelineParameterAttribute
+  { _dataPipelinePipelineParameterAttributeKey :: Val Text
+  , _dataPipelinePipelineParameterAttributeStringValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON DataPipelinePipelineParameterAttribute where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+instance FromJSON DataPipelinePipelineParameterAttribute where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+-- | Constructor for 'DataPipelinePipelineParameterAttribute' containing
+-- | required fields as arguments.
+dataPipelinePipelineParameterAttribute
+  :: Val Text -- ^ 'dpppaKey'
+  -> Val Text -- ^ 'dpppaStringValue'
+  -> DataPipelinePipelineParameterAttribute
+dataPipelinePipelineParameterAttribute keyarg stringValuearg =
+  DataPipelinePipelineParameterAttribute
+  { _dataPipelinePipelineParameterAttributeKey = keyarg
+  , _dataPipelinePipelineParameterAttributeStringValue = stringValuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-parameterobjects-attributes.html#cfn-datapipeline-pipeline-parameterobjects-attribtues-key
+dpppaKey :: Lens' DataPipelinePipelineParameterAttribute (Val Text)
+dpppaKey = lens _dataPipelinePipelineParameterAttributeKey (\s a -> s { _dataPipelinePipelineParameterAttributeKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-parameterobjects-attributes.html#cfn-datapipeline-pipeline-parameterobjects-attribtues-stringvalue
+dpppaStringValue :: Lens' DataPipelinePipelineParameterAttribute (Val Text)
+dpppaStringValue = lens _dataPipelinePipelineParameterAttributeStringValue (\s a -> s { _dataPipelinePipelineParameterAttributeStringValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterObject.hs b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterObject.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterObject.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-parameterobjects.html
+
+module Stratosphere.ResourceProperties.DataPipelinePipelineParameterObject where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.DataPipelinePipelineParameterAttribute
+
+-- | Full data type definition for DataPipelinePipelineParameterObject. See
+-- | 'dataPipelinePipelineParameterObject' for a more convenient constructor.
+data DataPipelinePipelineParameterObject =
+  DataPipelinePipelineParameterObject
+  { _dataPipelinePipelineParameterObjectAttributes :: [DataPipelinePipelineParameterAttribute]
+  , _dataPipelinePipelineParameterObjectId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON DataPipelinePipelineParameterObject where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+instance FromJSON DataPipelinePipelineParameterObject where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+-- | Constructor for 'DataPipelinePipelineParameterObject' containing required
+-- | fields as arguments.
+dataPipelinePipelineParameterObject
+  :: [DataPipelinePipelineParameterAttribute] -- ^ 'dpppaoAttributes'
+  -> Val Text -- ^ 'dpppaoId'
+  -> DataPipelinePipelineParameterObject
+dataPipelinePipelineParameterObject attributesarg idarg =
+  DataPipelinePipelineParameterObject
+  { _dataPipelinePipelineParameterObjectAttributes = attributesarg
+  , _dataPipelinePipelineParameterObjectId = idarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-parameterobjects.html#cfn-datapipeline-pipeline-parameterobjects-attributes
+dpppaoAttributes :: Lens' DataPipelinePipelineParameterObject [DataPipelinePipelineParameterAttribute]
+dpppaoAttributes = lens _dataPipelinePipelineParameterObjectAttributes (\s a -> s { _dataPipelinePipelineParameterObjectAttributes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-parameterobjects.html#cfn-datapipeline-pipeline-parameterobject-id
+dpppaoId :: Lens' DataPipelinePipelineParameterObject (Val Text)
+dpppaoId = lens _dataPipelinePipelineParameterObjectId (\s a -> s { _dataPipelinePipelineParameterObjectId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterValue.hs b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterValue.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelineParameterValue.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-parametervalues.html
+
+module Stratosphere.ResourceProperties.DataPipelinePipelineParameterValue where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for DataPipelinePipelineParameterValue. See
+-- | 'dataPipelinePipelineParameterValue' for a more convenient constructor.
+data DataPipelinePipelineParameterValue =
+  DataPipelinePipelineParameterValue
+  { _dataPipelinePipelineParameterValueId :: Val Text
+  , _dataPipelinePipelineParameterValueStringValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON DataPipelinePipelineParameterValue where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+instance FromJSON DataPipelinePipelineParameterValue where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+-- | Constructor for 'DataPipelinePipelineParameterValue' containing required
+-- | fields as arguments.
+dataPipelinePipelineParameterValue
+  :: Val Text -- ^ 'dpppvId'
+  -> Val Text -- ^ 'dpppvStringValue'
+  -> DataPipelinePipelineParameterValue
+dataPipelinePipelineParameterValue idarg stringValuearg =
+  DataPipelinePipelineParameterValue
+  { _dataPipelinePipelineParameterValueId = idarg
+  , _dataPipelinePipelineParameterValueStringValue = stringValuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-parametervalues.html#cfn-datapipeline-pipeline-parametervalues-id
+dpppvId :: Lens' DataPipelinePipelineParameterValue (Val Text)
+dpppvId = lens _dataPipelinePipelineParameterValueId (\s a -> s { _dataPipelinePipelineParameterValueId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-parametervalues.html#cfn-datapipeline-pipeline-parametervalues-stringvalue
+dpppvStringValue :: Lens' DataPipelinePipelineParameterValue (Val Text)
+dpppvStringValue = lens _dataPipelinePipelineParameterValueStringValue (\s a -> s { _dataPipelinePipelineParameterValueStringValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelinePipelineObject.hs b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelinePipelineObject.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelinePipelineObject.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-pipelineobjects.html
+
+module Stratosphere.ResourceProperties.DataPipelinePipelinePipelineObject where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.DataPipelinePipelineField
+
+-- | Full data type definition for DataPipelinePipelinePipelineObject. See
+-- | 'dataPipelinePipelinePipelineObject' for a more convenient constructor.
+data DataPipelinePipelinePipelineObject =
+  DataPipelinePipelinePipelineObject
+  { _dataPipelinePipelinePipelineObjectFields :: [DataPipelinePipelineField]
+  , _dataPipelinePipelinePipelineObjectId :: Val Text
+  , _dataPipelinePipelinePipelineObjectName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON DataPipelinePipelinePipelineObject where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+instance FromJSON DataPipelinePipelinePipelineObject where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+-- | Constructor for 'DataPipelinePipelinePipelineObject' containing required
+-- | fields as arguments.
+dataPipelinePipelinePipelineObject
+  :: [DataPipelinePipelineField] -- ^ 'dpppioFields'
+  -> Val Text -- ^ 'dpppioId'
+  -> Val Text -- ^ 'dpppioName'
+  -> DataPipelinePipelinePipelineObject
+dataPipelinePipelinePipelineObject fieldsarg idarg namearg =
+  DataPipelinePipelinePipelineObject
+  { _dataPipelinePipelinePipelineObjectFields = fieldsarg
+  , _dataPipelinePipelinePipelineObjectId = idarg
+  , _dataPipelinePipelinePipelineObjectName = namearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-pipelineobjects.html#cfn-datapipeline-pipeline-pipelineobjects-fields
+dpppioFields :: Lens' DataPipelinePipelinePipelineObject [DataPipelinePipelineField]
+dpppioFields = lens _dataPipelinePipelinePipelineObjectFields (\s a -> s { _dataPipelinePipelinePipelineObjectFields = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-pipelineobjects.html#cfn-datapipeline-pipeline-pipelineobjects-id
+dpppioId :: Lens' DataPipelinePipelinePipelineObject (Val Text)
+dpppioId = lens _dataPipelinePipelinePipelineObjectId (\s a -> s { _dataPipelinePipelinePipelineObjectId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-pipelineobjects.html#cfn-datapipeline-pipeline-pipelineobjects-name
+dpppioName :: Lens' DataPipelinePipelinePipelineObject (Val Text)
+dpppioName = lens _dataPipelinePipelinePipelineObjectName (\s a -> s { _dataPipelinePipelinePipelineObjectName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelinePipelineTag.hs b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelinePipelineTag.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/DataPipelinePipelinePipelineTag.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-pipelinetags.html
+
+module Stratosphere.ResourceProperties.DataPipelinePipelinePipelineTag where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for DataPipelinePipelinePipelineTag. See
+-- | 'dataPipelinePipelinePipelineTag' for a more convenient constructor.
+data DataPipelinePipelinePipelineTag =
+  DataPipelinePipelinePipelineTag
+  { _dataPipelinePipelinePipelineTagKey :: Val Text
+  , _dataPipelinePipelinePipelineTagValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON DataPipelinePipelinePipelineTag where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+instance FromJSON DataPipelinePipelinePipelineTag where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+-- | Constructor for 'DataPipelinePipelinePipelineTag' containing required
+-- | fields as arguments.
+dataPipelinePipelinePipelineTag
+  :: Val Text -- ^ 'dppptKey'
+  -> Val Text -- ^ 'dppptValue'
+  -> DataPipelinePipelinePipelineTag
+dataPipelinePipelinePipelineTag keyarg valuearg =
+  DataPipelinePipelinePipelineTag
+  { _dataPipelinePipelinePipelineTagKey = keyarg
+  , _dataPipelinePipelinePipelineTagValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-pipelinetags.html#cfn-datapipeline-pipeline-pipelinetags-key
+dppptKey :: Lens' DataPipelinePipelinePipelineTag (Val Text)
+dppptKey = lens _dataPipelinePipelinePipelineTagKey (\s a -> s { _dataPipelinePipelinePipelineTagKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-pipelinetags.html#cfn-datapipeline-pipeline-pipelinetags-value
+dppptValue :: Lens' DataPipelinePipelinePipelineTag (Val Text)
+dppptValue = lens _dataPipelinePipelinePipelineTagValue (\s a -> s { _dataPipelinePipelinePipelineTagValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DirectoryServiceMicrosoftADVpcSettings.hs b/library-gen/Stratosphere/ResourceProperties/DirectoryServiceMicrosoftADVpcSettings.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/DirectoryServiceMicrosoftADVpcSettings.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-directoryservice-microsoftad-vpcsettings.html
+
+module Stratosphere.ResourceProperties.DirectoryServiceMicrosoftADVpcSettings where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for DirectoryServiceMicrosoftADVpcSettings. See
+-- | 'directoryServiceMicrosoftADVpcSettings' for a more convenient
+-- | constructor.
+data DirectoryServiceMicrosoftADVpcSettings =
+  DirectoryServiceMicrosoftADVpcSettings
+  { _directoryServiceMicrosoftADVpcSettingsSubnetIds :: [Val Text]
+  , _directoryServiceMicrosoftADVpcSettingsVpcId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON DirectoryServiceMicrosoftADVpcSettings where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+instance FromJSON DirectoryServiceMicrosoftADVpcSettings where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+-- | Constructor for 'DirectoryServiceMicrosoftADVpcSettings' containing
+-- | required fields as arguments.
+directoryServiceMicrosoftADVpcSettings
+  :: [Val Text] -- ^ 'dsmadvsSubnetIds'
+  -> Val Text -- ^ 'dsmadvsVpcId'
+  -> DirectoryServiceMicrosoftADVpcSettings
+directoryServiceMicrosoftADVpcSettings subnetIdsarg vpcIdarg =
+  DirectoryServiceMicrosoftADVpcSettings
+  { _directoryServiceMicrosoftADVpcSettingsSubnetIds = subnetIdsarg
+  , _directoryServiceMicrosoftADVpcSettingsVpcId = vpcIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-directoryservice-microsoftad-vpcsettings.html#cfn-directoryservice-microsoftad-vpcsettings-subnetids
+dsmadvsSubnetIds :: Lens' DirectoryServiceMicrosoftADVpcSettings [Val Text]
+dsmadvsSubnetIds = lens _directoryServiceMicrosoftADVpcSettingsSubnetIds (\s a -> s { _directoryServiceMicrosoftADVpcSettingsSubnetIds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-directoryservice-microsoftad-vpcsettings.html#cfn-directoryservice-microsoftad-vpcsettings-vpcid
+dsmadvsVpcId :: Lens' DirectoryServiceMicrosoftADVpcSettings (Val Text)
+dsmadvsVpcId = lens _directoryServiceMicrosoftADVpcSettingsVpcId (\s a -> s { _directoryServiceMicrosoftADVpcSettingsVpcId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DirectoryServiceSimpleADVpcSettings.hs b/library-gen/Stratosphere/ResourceProperties/DirectoryServiceSimpleADVpcSettings.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/DirectoryServiceSimpleADVpcSettings.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-directoryservice-simplead-vpcsettings.html
+
+module Stratosphere.ResourceProperties.DirectoryServiceSimpleADVpcSettings where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for DirectoryServiceSimpleADVpcSettings. See
+-- | 'directoryServiceSimpleADVpcSettings' for a more convenient constructor.
+data DirectoryServiceSimpleADVpcSettings =
+  DirectoryServiceSimpleADVpcSettings
+  { _directoryServiceSimpleADVpcSettingsSubnetIds :: [Val Text]
+  , _directoryServiceSimpleADVpcSettingsVpcId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON DirectoryServiceSimpleADVpcSettings where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+instance FromJSON DirectoryServiceSimpleADVpcSettings where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+-- | Constructor for 'DirectoryServiceSimpleADVpcSettings' containing required
+-- | fields as arguments.
+directoryServiceSimpleADVpcSettings
+  :: [Val Text] -- ^ 'dssadvsSubnetIds'
+  -> Val Text -- ^ 'dssadvsVpcId'
+  -> DirectoryServiceSimpleADVpcSettings
+directoryServiceSimpleADVpcSettings subnetIdsarg vpcIdarg =
+  DirectoryServiceSimpleADVpcSettings
+  { _directoryServiceSimpleADVpcSettingsSubnetIds = subnetIdsarg
+  , _directoryServiceSimpleADVpcSettingsVpcId = vpcIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-directoryservice-simplead-vpcsettings.html#cfn-directoryservice-simplead-vpcsettings-subnetids
+dssadvsSubnetIds :: Lens' DirectoryServiceSimpleADVpcSettings [Val Text]
+dssadvsSubnetIds = lens _directoryServiceSimpleADVpcSettingsSubnetIds (\s a -> s { _directoryServiceSimpleADVpcSettingsSubnetIds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-directoryservice-simplead-vpcsettings.html#cfn-directoryservice-simplead-vpcsettings-vpcid
+dssadvsVpcId :: Lens' DirectoryServiceSimpleADVpcSettings (Val Text)
+dssadvsVpcId = lens _directoryServiceSimpleADVpcSettingsVpcId (\s a -> s { _directoryServiceSimpleADVpcSettingsVpcId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBAttributeDefinition.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBAttributeDefinition.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/DynamoDBAttributeDefinition.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | A list of attribute definitions for the AWS::DynamoDB::Table resource.
--- Each element is composed of an AttributeName and AttributeType.
-
-module Stratosphere.ResourceProperties.DynamoDBAttributeDefinition where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.Types
-
--- | Full data type definition for DynamoDBAttributeDefinition. See
--- 'dynamoDBAttributeDefinition' for a more convenient constructor.
-data DynamoDBAttributeDefinition =
-  DynamoDBAttributeDefinition
-  { _dynamoDBAttributeDefinitionAttributeName :: Val Text
-  , _dynamoDBAttributeDefinitionAttributeType :: AttributeType
-  } deriving (Show, Generic)
-
-instance ToJSON DynamoDBAttributeDefinition where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
-
-instance FromJSON DynamoDBAttributeDefinition where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
-
--- | Constructor for 'DynamoDBAttributeDefinition' containing required fields
--- as arguments.
-dynamoDBAttributeDefinition
-  :: Val Text -- ^ 'ddbadAttributeName'
-  -> AttributeType -- ^ 'ddbadAttributeType'
-  -> DynamoDBAttributeDefinition
-dynamoDBAttributeDefinition attributeNamearg attributeTypearg =
-  DynamoDBAttributeDefinition
-  { _dynamoDBAttributeDefinitionAttributeName = attributeNamearg
-  , _dynamoDBAttributeDefinitionAttributeType = attributeTypearg
-  }
-
--- | The name of an attribute. Attribute names can be 1 – 255 characters long
--- and have no character restrictions.
-ddbadAttributeName :: Lens' DynamoDBAttributeDefinition (Val Text)
-ddbadAttributeName = lens _dynamoDBAttributeDefinitionAttributeName (\s a -> s { _dynamoDBAttributeDefinitionAttributeName = a })
-
--- | The data type for the attribute. You can specify S for string data, N for
--- numeric data, or B for binary data.
-ddbadAttributeType :: Lens' DynamoDBAttributeDefinition AttributeType
-ddbadAttributeType = lens _dynamoDBAttributeDefinitionAttributeType (\s a -> s { _dynamoDBAttributeDefinitionAttributeType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBGlobalSecondaryIndex.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBGlobalSecondaryIndex.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/DynamoDBGlobalSecondaryIndex.hs
+++ /dev/null
@@ -1,69 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Describes global secondary indexes for the AWS::DynamoDB::Table resource.
-
-module Stratosphere.ResourceProperties.DynamoDBGlobalSecondaryIndex where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.DynamoDBKeySchema
-import Stratosphere.ResourceProperties.DynamoDBProjectionObject
-import Stratosphere.ResourceProperties.DynamoDBProvisionedThroughput
-
--- | Full data type definition for DynamoDBGlobalSecondaryIndex. See
--- 'dynamoDBGlobalSecondaryIndex' for a more convenient constructor.
-data DynamoDBGlobalSecondaryIndex =
-  DynamoDBGlobalSecondaryIndex
-  { _dynamoDBGlobalSecondaryIndexIndexName :: Val Text
-  , _dynamoDBGlobalSecondaryIndexKeySchema :: [DynamoDBKeySchema]
-  , _dynamoDBGlobalSecondaryIndexProjection :: DynamoDBProjectionObject
-  , _dynamoDBGlobalSecondaryIndexProvisionedThroughput :: DynamoDBProvisionedThroughput
-  } deriving (Show, Generic)
-
-instance ToJSON DynamoDBGlobalSecondaryIndex where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
-
-instance FromJSON DynamoDBGlobalSecondaryIndex where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
-
--- | Constructor for 'DynamoDBGlobalSecondaryIndex' containing required fields
--- as arguments.
-dynamoDBGlobalSecondaryIndex
-  :: Val Text -- ^ 'ddbgsiIndexName'
-  -> [DynamoDBKeySchema] -- ^ 'ddbgsiKeySchema'
-  -> DynamoDBProjectionObject -- ^ 'ddbgsiProjection'
-  -> DynamoDBProvisionedThroughput -- ^ 'ddbgsiProvisionedThroughput'
-  -> DynamoDBGlobalSecondaryIndex
-dynamoDBGlobalSecondaryIndex indexNamearg keySchemaarg projectionarg provisionedThroughputarg =
-  DynamoDBGlobalSecondaryIndex
-  { _dynamoDBGlobalSecondaryIndexIndexName = indexNamearg
-  , _dynamoDBGlobalSecondaryIndexKeySchema = keySchemaarg
-  , _dynamoDBGlobalSecondaryIndexProjection = projectionarg
-  , _dynamoDBGlobalSecondaryIndexProvisionedThroughput = provisionedThroughputarg
-  }
-
--- | The name of the global secondary index. The index name can be 3 – 255
--- characters long and have no character restrictions.
-ddbgsiIndexName :: Lens' DynamoDBGlobalSecondaryIndex (Val Text)
-ddbgsiIndexName = lens _dynamoDBGlobalSecondaryIndexIndexName (\s a -> s { _dynamoDBGlobalSecondaryIndexIndexName = a })
-
--- | The complete index key schema for the global secondary index, which
--- consists of one or more pairs of attribute names and key types.
-ddbgsiKeySchema :: Lens' DynamoDBGlobalSecondaryIndex [DynamoDBKeySchema]
-ddbgsiKeySchema = lens _dynamoDBGlobalSecondaryIndexKeySchema (\s a -> s { _dynamoDBGlobalSecondaryIndexKeySchema = a })
-
--- | Attributes that are copied (projected) from the source table into the
--- index. These attributes are in addition to the primary key attributes and
--- index key attributes, which are automatically projected.
-ddbgsiProjection :: Lens' DynamoDBGlobalSecondaryIndex DynamoDBProjectionObject
-ddbgsiProjection = lens _dynamoDBGlobalSecondaryIndexProjection (\s a -> s { _dynamoDBGlobalSecondaryIndexProjection = a })
-
--- | The provisioned throughput settings for the index.
-ddbgsiProvisionedThroughput :: Lens' DynamoDBGlobalSecondaryIndex DynamoDBProvisionedThroughput
-ddbgsiProvisionedThroughput = lens _dynamoDBGlobalSecondaryIndexProvisionedThroughput (\s a -> s { _dynamoDBGlobalSecondaryIndexProvisionedThroughput = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBKeySchema.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBKeySchema.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/DynamoDBKeySchema.hs
+++ /dev/null
@@ -1,59 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Describes a primary key for the AWS::DynamoDB::Table resource or a key
--- schema for an index. Each element is composed of an AttributeName and
--- KeyType. For the primary key of an Amazon DynamoDB table that consists of
--- only a hash attribute, specify one element with a KeyType of HASH. For the
--- primary key of an Amazon DynamoDB table that consists of a hash and range
--- attributes, specify two elements: one with a KeyType of HASH and one with a
--- KeyType of RANGE. For a complete discussion of DynamoDB primary keys, see
--- Primary Key in the Amazon DynamoDB Developer Guide.
-
-module Stratosphere.ResourceProperties.DynamoDBKeySchema where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.Types
-
--- | Full data type definition for DynamoDBKeySchema. See 'dynamoDBKeySchema'
--- for a more convenient constructor.
-data DynamoDBKeySchema =
-  DynamoDBKeySchema
-  { _dynamoDBKeySchemaAttributeName :: Val Text
-  , _dynamoDBKeySchemaKeyType :: KeyType
-  } deriving (Show, Generic)
-
-instance ToJSON DynamoDBKeySchema where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
-
-instance FromJSON DynamoDBKeySchema where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
-
--- | Constructor for 'DynamoDBKeySchema' containing required fields as
--- arguments.
-dynamoDBKeySchema
-  :: Val Text -- ^ 'ddbksAttributeName'
-  -> KeyType -- ^ 'ddbksKeyType'
-  -> DynamoDBKeySchema
-dynamoDBKeySchema attributeNamearg keyTypearg =
-  DynamoDBKeySchema
-  { _dynamoDBKeySchemaAttributeName = attributeNamearg
-  , _dynamoDBKeySchemaKeyType = keyTypearg
-  }
-
--- | The attribute name that is used as the primary key for this table.
--- Primary key element names can be 1 – 255 characters long and have no
--- character restrictions.
-ddbksAttributeName :: Lens' DynamoDBKeySchema (Val Text)
-ddbksAttributeName = lens _dynamoDBKeySchemaAttributeName (\s a -> s { _dynamoDBKeySchemaAttributeName = a })
-
--- | Represents the attribute data, consisting of the data type and the
--- attribute value itself. You can specify HASH or RANGE.
-ddbksKeyType :: Lens' DynamoDBKeySchema KeyType
-ddbksKeyType = lens _dynamoDBKeySchemaKeyType (\s a -> s { _dynamoDBKeySchemaKeyType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBLocalSecondaryIndex.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBLocalSecondaryIndex.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/DynamoDBLocalSecondaryIndex.hs
+++ /dev/null
@@ -1,66 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Describes local secondary indexes for the AWS::DynamoDB::Table resource.
--- Each index is scoped to a given hash key value. Tables with one or more
--- local secondary indexes are subject to an item collection size limit, where
--- the amount of data within a given item collection cannot exceed 10 GB.
-
-module Stratosphere.ResourceProperties.DynamoDBLocalSecondaryIndex where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.DynamoDBKeySchema
-import Stratosphere.ResourceProperties.DynamoDBProjectionObject
-
--- | Full data type definition for DynamoDBLocalSecondaryIndex. See
--- 'dynamoDBLocalSecondaryIndex' for a more convenient constructor.
-data DynamoDBLocalSecondaryIndex =
-  DynamoDBLocalSecondaryIndex
-  { _dynamoDBLocalSecondaryIndexIndexName :: Val Text
-  , _dynamoDBLocalSecondaryIndexKeySchema :: [DynamoDBKeySchema]
-  , _dynamoDBLocalSecondaryIndexProjection :: DynamoDBProjectionObject
-  } deriving (Show, Generic)
-
-instance ToJSON DynamoDBLocalSecondaryIndex where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
-
-instance FromJSON DynamoDBLocalSecondaryIndex where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
-
--- | Constructor for 'DynamoDBLocalSecondaryIndex' containing required fields
--- as arguments.
-dynamoDBLocalSecondaryIndex
-  :: Val Text -- ^ 'ddblsiIndexName'
-  -> [DynamoDBKeySchema] -- ^ 'ddblsiKeySchema'
-  -> DynamoDBProjectionObject -- ^ 'ddblsiProjection'
-  -> DynamoDBLocalSecondaryIndex
-dynamoDBLocalSecondaryIndex indexNamearg keySchemaarg projectionarg =
-  DynamoDBLocalSecondaryIndex
-  { _dynamoDBLocalSecondaryIndexIndexName = indexNamearg
-  , _dynamoDBLocalSecondaryIndexKeySchema = keySchemaarg
-  , _dynamoDBLocalSecondaryIndexProjection = projectionarg
-  }
-
--- | The name of the local secondary index. The index name can be 3 – 255
--- characters long and have no character restrictions.
-ddblsiIndexName :: Lens' DynamoDBLocalSecondaryIndex (Val Text)
-ddblsiIndexName = lens _dynamoDBLocalSecondaryIndexIndexName (\s a -> s { _dynamoDBLocalSecondaryIndexIndexName = a })
-
--- | The complete index key schema for the local secondary index, which
--- consists of one or more pairs of attribute names and key types. For local
--- secondary indexes, the hash key must be the same as that of the source
--- table.
-ddblsiKeySchema :: Lens' DynamoDBLocalSecondaryIndex [DynamoDBKeySchema]
-ddblsiKeySchema = lens _dynamoDBLocalSecondaryIndexKeySchema (\s a -> s { _dynamoDBLocalSecondaryIndexKeySchema = a })
-
--- | Attributes that are copied (projected) from the source table into the
--- index. These attributes are additions to the primary key attributes and
--- index key attributes, which are automatically projected.
-ddblsiProjection :: Lens' DynamoDBLocalSecondaryIndex DynamoDBProjectionObject
-ddblsiProjection = lens _dynamoDBLocalSecondaryIndexProjection (\s a -> s { _dynamoDBLocalSecondaryIndexProjection = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBProjectionObject.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBProjectionObject.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/DynamoDBProjectionObject.hs
+++ /dev/null
@@ -1,57 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Attributes that are copied (projected) from the source table into the
--- index. These attributes are additions to the primary key attributes and
--- index key attributes, which are automatically projected.
-
-module Stratosphere.ResourceProperties.DynamoDBProjectionObject where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.Types
-
--- | Full data type definition for DynamoDBProjectionObject. See
--- 'dynamoDBProjectionObject' for a more convenient constructor.
-data DynamoDBProjectionObject =
-  DynamoDBProjectionObject
-  { _dynamoDBProjectionObjectNonKeyAttributes :: Maybe [Val Text]
-  , _dynamoDBProjectionObjectProjectionType :: Maybe ProjectionType
-  } deriving (Show, Generic)
-
-instance ToJSON DynamoDBProjectionObject where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
-
-instance FromJSON DynamoDBProjectionObject where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
-
--- | Constructor for 'DynamoDBProjectionObject' containing required fields as
--- arguments.
-dynamoDBProjectionObject
-  :: DynamoDBProjectionObject
-dynamoDBProjectionObject  =
-  DynamoDBProjectionObject
-  { _dynamoDBProjectionObjectNonKeyAttributes = Nothing
-  , _dynamoDBProjectionObjectProjectionType = Nothing
-  }
-
--- | The non-key attribute names that are projected into the index. For local
--- secondary indexes, the total count of NonKeyAttributes summed across all of
--- the local secondary indexes must not exceed 20. If you project the same
--- attribute into two different indexes, this counts as two distinct
--- attributes in determining the total.
-ddbpoNonKeyAttributes :: Lens' DynamoDBProjectionObject (Maybe [Val Text])
-ddbpoNonKeyAttributes = lens _dynamoDBProjectionObjectNonKeyAttributes (\s a -> s { _dynamoDBProjectionObjectNonKeyAttributes = a })
-
--- | The set of attributes that are projected into the index: Only the index
--- and primary keys are projected into the index. Only the specified table
--- attributes are projected into the index. The list of projected attributes
--- are in NonKeyAttributes. All of the table attributes are projected into the
--- index.
-ddbpoProjectionType :: Lens' DynamoDBProjectionObject (Maybe ProjectionType)
-ddbpoProjectionType = lens _dynamoDBProjectionObjectProjectionType (\s a -> s { _dynamoDBProjectionObjectProjectionType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBProvisionedThroughput.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBProvisionedThroughput.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/DynamoDBProvisionedThroughput.hs
+++ /dev/null
@@ -1,57 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Describes a set of provisioned throughput values for an
--- AWS::DynamoDB::Table resource. DynamoDB uses these capacity units to
--- allocate sufficient resources to provide the requested throughput. For a
--- complete discussion of DynamoDB provisioned throughput values, see
--- Specifying Read and Write Requirements in the DynamoDB Developer Guide.
-
-module Stratosphere.ResourceProperties.DynamoDBProvisionedThroughput where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for DynamoDBProvisionedThroughput. See
--- 'dynamoDBProvisionedThroughput' for a more convenient constructor.
-data DynamoDBProvisionedThroughput =
-  DynamoDBProvisionedThroughput
-  { _dynamoDBProvisionedThroughputReadCapacityUnits :: Val Integer'
-  , _dynamoDBProvisionedThroughputWriteCapacityUnits :: Val Integer'
-  } deriving (Show, Generic)
-
-instance ToJSON DynamoDBProvisionedThroughput where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
-
-instance FromJSON DynamoDBProvisionedThroughput where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
-
--- | Constructor for 'DynamoDBProvisionedThroughput' containing required
--- fields as arguments.
-dynamoDBProvisionedThroughput
-  :: Val Integer' -- ^ 'ddbptReadCapacityUnits'
-  -> Val Integer' -- ^ 'ddbptWriteCapacityUnits'
-  -> DynamoDBProvisionedThroughput
-dynamoDBProvisionedThroughput readCapacityUnitsarg writeCapacityUnitsarg =
-  DynamoDBProvisionedThroughput
-  { _dynamoDBProvisionedThroughputReadCapacityUnits = readCapacityUnitsarg
-  , _dynamoDBProvisionedThroughputWriteCapacityUnits = writeCapacityUnitsarg
-  }
-
--- | Sets the desired minimum number of consistent reads of items (up to 1KB
--- in size) per second for the specified table before Amazon DynamoDB balances
--- the load.
-ddbptReadCapacityUnits :: Lens' DynamoDBProvisionedThroughput (Val Integer')
-ddbptReadCapacityUnits = lens _dynamoDBProvisionedThroughputReadCapacityUnits (\s a -> s { _dynamoDBProvisionedThroughputReadCapacityUnits = a })
-
--- | Sets the desired minimum number of consistent writes of items (up to 1KB
--- in size) per second for the specified table before Amazon DynamoDB balances
--- the load.
-ddbptWriteCapacityUnits :: Lens' DynamoDBProvisionedThroughput (Val Integer')
-ddbptWriteCapacityUnits = lens _dynamoDBProvisionedThroughputWriteCapacityUnits (\s a -> s { _dynamoDBProvisionedThroughputWriteCapacityUnits = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBStreamSpecification.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBStreamSpecification.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/DynamoDBStreamSpecification.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | StreamSpecification is a property of the AWS::DynamoDB::Table resource
--- that defines the settings of a DynamoDB table's stream.
-
-module Stratosphere.ResourceProperties.DynamoDBStreamSpecification where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.Types
-
--- | Full data type definition for DynamoDBStreamSpecification. See
--- 'dynamoDBStreamSpecification' for a more convenient constructor.
-data DynamoDBStreamSpecification =
-  DynamoDBStreamSpecification
-  { _dynamoDBStreamSpecificationStreamViewType :: StreamViewType
-  } deriving (Show, Generic)
-
-instance ToJSON DynamoDBStreamSpecification where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
-
-instance FromJSON DynamoDBStreamSpecification where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
-
--- | Constructor for 'DynamoDBStreamSpecification' containing required fields
--- as arguments.
-dynamoDBStreamSpecification
-  :: StreamViewType -- ^ 'ddbssStreamViewType'
-  -> DynamoDBStreamSpecification
-dynamoDBStreamSpecification streamViewTypearg =
-  DynamoDBStreamSpecification
-  { _dynamoDBStreamSpecificationStreamViewType = streamViewTypearg
-  }
-
--- | Determines the information that the stream captures when an item in the
--- table is modified. For valid values, see StreamSpecification in the Amazon
--- DynamoDB API Reference.
-ddbssStreamViewType :: Lens' DynamoDBStreamSpecification StreamViewType
-ddbssStreamViewType = lens _dynamoDBStreamSpecificationStreamViewType (\s a -> s { _dynamoDBStreamSpecificationStreamViewType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableAttributeDefinition.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableAttributeDefinition.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableAttributeDefinition.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-attributedef.html
+
+module Stratosphere.ResourceProperties.DynamoDBTableAttributeDefinition where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.Types
+
+-- | Full data type definition for DynamoDBTableAttributeDefinition. See
+-- | 'dynamoDBTableAttributeDefinition' for a more convenient constructor.
+data DynamoDBTableAttributeDefinition =
+  DynamoDBTableAttributeDefinition
+  { _dynamoDBTableAttributeDefinitionAttributeName :: Val Text
+  , _dynamoDBTableAttributeDefinitionAttributeType :: Val AttributeType
+  } deriving (Show, Generic)
+
+instance ToJSON DynamoDBTableAttributeDefinition where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+instance FromJSON DynamoDBTableAttributeDefinition where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+-- | Constructor for 'DynamoDBTableAttributeDefinition' containing required
+-- | fields as arguments.
+dynamoDBTableAttributeDefinition
+  :: Val Text -- ^ 'ddbtadAttributeName'
+  -> Val AttributeType -- ^ 'ddbtadAttributeType'
+  -> DynamoDBTableAttributeDefinition
+dynamoDBTableAttributeDefinition attributeNamearg attributeTypearg =
+  DynamoDBTableAttributeDefinition
+  { _dynamoDBTableAttributeDefinitionAttributeName = attributeNamearg
+  , _dynamoDBTableAttributeDefinitionAttributeType = attributeTypearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-attributedef.html#cfn-dynamodb-attributedef-attributename
+ddbtadAttributeName :: Lens' DynamoDBTableAttributeDefinition (Val Text)
+ddbtadAttributeName = lens _dynamoDBTableAttributeDefinitionAttributeName (\s a -> s { _dynamoDBTableAttributeDefinitionAttributeName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-attributedef.html#cfn-dynamodb-attributedef-attributename-attributetype
+ddbtadAttributeType :: Lens' DynamoDBTableAttributeDefinition (Val AttributeType)
+ddbtadAttributeType = lens _dynamoDBTableAttributeDefinitionAttributeType (\s a -> s { _dynamoDBTableAttributeDefinitionAttributeType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableGlobalSecondaryIndex.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableGlobalSecondaryIndex.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableGlobalSecondaryIndex.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-gsi.html
+
+module Stratosphere.ResourceProperties.DynamoDBTableGlobalSecondaryIndex where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.DynamoDBTableKeySchema
+import Stratosphere.ResourceProperties.DynamoDBTableProjection
+import Stratosphere.ResourceProperties.DynamoDBTableProvisionedThroughput
+
+-- | Full data type definition for DynamoDBTableGlobalSecondaryIndex. See
+-- | 'dynamoDBTableGlobalSecondaryIndex' for a more convenient constructor.
+data DynamoDBTableGlobalSecondaryIndex =
+  DynamoDBTableGlobalSecondaryIndex
+  { _dynamoDBTableGlobalSecondaryIndexIndexName :: Val Text
+  , _dynamoDBTableGlobalSecondaryIndexKeySchema :: [DynamoDBTableKeySchema]
+  , _dynamoDBTableGlobalSecondaryIndexProjection :: DynamoDBTableProjection
+  , _dynamoDBTableGlobalSecondaryIndexProvisionedThroughput :: DynamoDBTableProvisionedThroughput
+  } deriving (Show, Generic)
+
+instance ToJSON DynamoDBTableGlobalSecondaryIndex where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON DynamoDBTableGlobalSecondaryIndex where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'DynamoDBTableGlobalSecondaryIndex' containing required
+-- | fields as arguments.
+dynamoDBTableGlobalSecondaryIndex
+  :: Val Text -- ^ 'ddbtgsiIndexName'
+  -> [DynamoDBTableKeySchema] -- ^ 'ddbtgsiKeySchema'
+  -> DynamoDBTableProjection -- ^ 'ddbtgsiProjection'
+  -> DynamoDBTableProvisionedThroughput -- ^ 'ddbtgsiProvisionedThroughput'
+  -> DynamoDBTableGlobalSecondaryIndex
+dynamoDBTableGlobalSecondaryIndex indexNamearg keySchemaarg projectionarg provisionedThroughputarg =
+  DynamoDBTableGlobalSecondaryIndex
+  { _dynamoDBTableGlobalSecondaryIndexIndexName = indexNamearg
+  , _dynamoDBTableGlobalSecondaryIndexKeySchema = keySchemaarg
+  , _dynamoDBTableGlobalSecondaryIndexProjection = projectionarg
+  , _dynamoDBTableGlobalSecondaryIndexProvisionedThroughput = provisionedThroughputarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-gsi.html#cfn-dynamodb-gsi-indexname
+ddbtgsiIndexName :: Lens' DynamoDBTableGlobalSecondaryIndex (Val Text)
+ddbtgsiIndexName = lens _dynamoDBTableGlobalSecondaryIndexIndexName (\s a -> s { _dynamoDBTableGlobalSecondaryIndexIndexName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-gsi.html#cfn-dynamodb-gsi-keyschema
+ddbtgsiKeySchema :: Lens' DynamoDBTableGlobalSecondaryIndex [DynamoDBTableKeySchema]
+ddbtgsiKeySchema = lens _dynamoDBTableGlobalSecondaryIndexKeySchema (\s a -> s { _dynamoDBTableGlobalSecondaryIndexKeySchema = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-gsi.html#cfn-dynamodb-gsi-projection
+ddbtgsiProjection :: Lens' DynamoDBTableGlobalSecondaryIndex DynamoDBTableProjection
+ddbtgsiProjection = lens _dynamoDBTableGlobalSecondaryIndexProjection (\s a -> s { _dynamoDBTableGlobalSecondaryIndexProjection = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-gsi.html#cfn-dynamodb-gsi-provisionedthroughput
+ddbtgsiProvisionedThroughput :: Lens' DynamoDBTableGlobalSecondaryIndex DynamoDBTableProvisionedThroughput
+ddbtgsiProvisionedThroughput = lens _dynamoDBTableGlobalSecondaryIndexProvisionedThroughput (\s a -> s { _dynamoDBTableGlobalSecondaryIndexProvisionedThroughput = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableKeySchema.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableKeySchema.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableKeySchema.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-keyschema.html
+
+module Stratosphere.ResourceProperties.DynamoDBTableKeySchema where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.Types
+
+-- | Full data type definition for DynamoDBTableKeySchema. See
+-- | 'dynamoDBTableKeySchema' for a more convenient constructor.
+data DynamoDBTableKeySchema =
+  DynamoDBTableKeySchema
+  { _dynamoDBTableKeySchemaAttributeName :: Val Text
+  , _dynamoDBTableKeySchemaKeyType :: Val KeyType
+  } deriving (Show, Generic)
+
+instance ToJSON DynamoDBTableKeySchema where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+instance FromJSON DynamoDBTableKeySchema where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+-- | Constructor for 'DynamoDBTableKeySchema' containing required fields as
+-- | arguments.
+dynamoDBTableKeySchema
+  :: Val Text -- ^ 'ddbtksAttributeName'
+  -> Val KeyType -- ^ 'ddbtksKeyType'
+  -> DynamoDBTableKeySchema
+dynamoDBTableKeySchema attributeNamearg keyTypearg =
+  DynamoDBTableKeySchema
+  { _dynamoDBTableKeySchemaAttributeName = attributeNamearg
+  , _dynamoDBTableKeySchemaKeyType = keyTypearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-keyschema.html#aws-properties-dynamodb-keyschema-attributename
+ddbtksAttributeName :: Lens' DynamoDBTableKeySchema (Val Text)
+ddbtksAttributeName = lens _dynamoDBTableKeySchemaAttributeName (\s a -> s { _dynamoDBTableKeySchemaAttributeName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-keyschema.html#aws-properties-dynamodb-keyschema-keytype
+ddbtksKeyType :: Lens' DynamoDBTableKeySchema (Val KeyType)
+ddbtksKeyType = lens _dynamoDBTableKeySchemaKeyType (\s a -> s { _dynamoDBTableKeySchemaKeyType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableLocalSecondaryIndex.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableLocalSecondaryIndex.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableLocalSecondaryIndex.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-lsi.html
+
+module Stratosphere.ResourceProperties.DynamoDBTableLocalSecondaryIndex where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.DynamoDBTableKeySchema
+import Stratosphere.ResourceProperties.DynamoDBTableProjection
+
+-- | Full data type definition for DynamoDBTableLocalSecondaryIndex. See
+-- | 'dynamoDBTableLocalSecondaryIndex' for a more convenient constructor.
+data DynamoDBTableLocalSecondaryIndex =
+  DynamoDBTableLocalSecondaryIndex
+  { _dynamoDBTableLocalSecondaryIndexIndexName :: Val Text
+  , _dynamoDBTableLocalSecondaryIndexKeySchema :: [DynamoDBTableKeySchema]
+  , _dynamoDBTableLocalSecondaryIndexProjection :: DynamoDBTableProjection
+  } deriving (Show, Generic)
+
+instance ToJSON DynamoDBTableLocalSecondaryIndex where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+instance FromJSON DynamoDBTableLocalSecondaryIndex where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+-- | Constructor for 'DynamoDBTableLocalSecondaryIndex' containing required
+-- | fields as arguments.
+dynamoDBTableLocalSecondaryIndex
+  :: Val Text -- ^ 'ddbtlsiIndexName'
+  -> [DynamoDBTableKeySchema] -- ^ 'ddbtlsiKeySchema'
+  -> DynamoDBTableProjection -- ^ 'ddbtlsiProjection'
+  -> DynamoDBTableLocalSecondaryIndex
+dynamoDBTableLocalSecondaryIndex indexNamearg keySchemaarg projectionarg =
+  DynamoDBTableLocalSecondaryIndex
+  { _dynamoDBTableLocalSecondaryIndexIndexName = indexNamearg
+  , _dynamoDBTableLocalSecondaryIndexKeySchema = keySchemaarg
+  , _dynamoDBTableLocalSecondaryIndexProjection = projectionarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-lsi.html#cfn-dynamodb-lsi-indexname
+ddbtlsiIndexName :: Lens' DynamoDBTableLocalSecondaryIndex (Val Text)
+ddbtlsiIndexName = lens _dynamoDBTableLocalSecondaryIndexIndexName (\s a -> s { _dynamoDBTableLocalSecondaryIndexIndexName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-lsi.html#cfn-dynamodb-lsi-keyschema
+ddbtlsiKeySchema :: Lens' DynamoDBTableLocalSecondaryIndex [DynamoDBTableKeySchema]
+ddbtlsiKeySchema = lens _dynamoDBTableLocalSecondaryIndexKeySchema (\s a -> s { _dynamoDBTableLocalSecondaryIndexKeySchema = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-lsi.html#cfn-dynamodb-lsi-projection
+ddbtlsiProjection :: Lens' DynamoDBTableLocalSecondaryIndex DynamoDBTableProjection
+ddbtlsiProjection = lens _dynamoDBTableLocalSecondaryIndexProjection (\s a -> s { _dynamoDBTableLocalSecondaryIndexProjection = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableProjection.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableProjection.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableProjection.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-projectionobject.html
+
+module Stratosphere.ResourceProperties.DynamoDBTableProjection where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.Types
+
+-- | Full data type definition for DynamoDBTableProjection. See
+-- | 'dynamoDBTableProjection' for a more convenient constructor.
+data DynamoDBTableProjection =
+  DynamoDBTableProjection
+  { _dynamoDBTableProjectionNonKeyAttributes :: Maybe [Val Text]
+  , _dynamoDBTableProjectionProjectionType :: Maybe (Val ProjectionType)
+  } deriving (Show, Generic)
+
+instance ToJSON DynamoDBTableProjection where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+instance FromJSON DynamoDBTableProjection where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+-- | Constructor for 'DynamoDBTableProjection' containing required fields as
+-- | arguments.
+dynamoDBTableProjection
+  :: DynamoDBTableProjection
+dynamoDBTableProjection  =
+  DynamoDBTableProjection
+  { _dynamoDBTableProjectionNonKeyAttributes = Nothing
+  , _dynamoDBTableProjectionProjectionType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-projectionobject.html#cfn-dynamodb-projectionobj-nonkeyatt
+ddbtpNonKeyAttributes :: Lens' DynamoDBTableProjection (Maybe [Val Text])
+ddbtpNonKeyAttributes = lens _dynamoDBTableProjectionNonKeyAttributes (\s a -> s { _dynamoDBTableProjectionNonKeyAttributes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-projectionobject.html#cfn-dynamodb-projectionobj-projtype
+ddbtpProjectionType :: Lens' DynamoDBTableProjection (Maybe (Val ProjectionType))
+ddbtpProjectionType = lens _dynamoDBTableProjectionProjectionType (\s a -> s { _dynamoDBTableProjectionProjectionType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableProvisionedThroughput.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableProvisionedThroughput.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableProvisionedThroughput.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-provisionedthroughput.html
+
+module Stratosphere.ResourceProperties.DynamoDBTableProvisionedThroughput where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for DynamoDBTableProvisionedThroughput. See
+-- | 'dynamoDBTableProvisionedThroughput' for a more convenient constructor.
+data DynamoDBTableProvisionedThroughput =
+  DynamoDBTableProvisionedThroughput
+  { _dynamoDBTableProvisionedThroughputReadCapacityUnits :: Val Integer'
+  , _dynamoDBTableProvisionedThroughputWriteCapacityUnits :: Val Integer'
+  } deriving (Show, Generic)
+
+instance ToJSON DynamoDBTableProvisionedThroughput where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+instance FromJSON DynamoDBTableProvisionedThroughput where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+-- | Constructor for 'DynamoDBTableProvisionedThroughput' containing required
+-- | fields as arguments.
+dynamoDBTableProvisionedThroughput
+  :: Val Integer' -- ^ 'ddbtptReadCapacityUnits'
+  -> Val Integer' -- ^ 'ddbtptWriteCapacityUnits'
+  -> DynamoDBTableProvisionedThroughput
+dynamoDBTableProvisionedThroughput readCapacityUnitsarg writeCapacityUnitsarg =
+  DynamoDBTableProvisionedThroughput
+  { _dynamoDBTableProvisionedThroughputReadCapacityUnits = readCapacityUnitsarg
+  , _dynamoDBTableProvisionedThroughputWriteCapacityUnits = writeCapacityUnitsarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-provisionedthroughput.html#cfn-dynamodb-provisionedthroughput-readcapacityunits
+ddbtptReadCapacityUnits :: Lens' DynamoDBTableProvisionedThroughput (Val Integer')
+ddbtptReadCapacityUnits = lens _dynamoDBTableProvisionedThroughputReadCapacityUnits (\s a -> s { _dynamoDBTableProvisionedThroughputReadCapacityUnits = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-provisionedthroughput.html#cfn-dynamodb-provisionedthroughput-writecapacityunits
+ddbtptWriteCapacityUnits :: Lens' DynamoDBTableProvisionedThroughput (Val Integer')
+ddbtptWriteCapacityUnits = lens _dynamoDBTableProvisionedThroughputWriteCapacityUnits (\s a -> s { _dynamoDBTableProvisionedThroughputWriteCapacityUnits = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/DynamoDBTableStreamSpecification.hs b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableStreamSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/DynamoDBTableStreamSpecification.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-streamspecification.html
+
+module Stratosphere.ResourceProperties.DynamoDBTableStreamSpecification where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.Types
+
+-- | Full data type definition for DynamoDBTableStreamSpecification. See
+-- | 'dynamoDBTableStreamSpecification' for a more convenient constructor.
+data DynamoDBTableStreamSpecification =
+  DynamoDBTableStreamSpecification
+  { _dynamoDBTableStreamSpecificationStreamViewType :: Val StreamViewType
+  } deriving (Show, Generic)
+
+instance ToJSON DynamoDBTableStreamSpecification where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+instance FromJSON DynamoDBTableStreamSpecification where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+-- | Constructor for 'DynamoDBTableStreamSpecification' containing required
+-- | fields as arguments.
+dynamoDBTableStreamSpecification
+  :: Val StreamViewType -- ^ 'ddbtssStreamViewType'
+  -> DynamoDBTableStreamSpecification
+dynamoDBTableStreamSpecification streamViewTypearg =
+  DynamoDBTableStreamSpecification
+  { _dynamoDBTableStreamSpecificationStreamViewType = streamViewTypearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-streamspecification.html#cfn-dynamodb-streamspecification-streamviewtype
+ddbtssStreamViewType :: Lens' DynamoDBTableStreamSpecification (Val StreamViewType)
+ddbtssStreamViewType = lens _dynamoDBTableStreamSpecificationStreamViewType (\s a -> s { _dynamoDBTableStreamSpecificationStreamViewType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EBSBlockDevice.hs b/library-gen/Stratosphere/ResourceProperties/EBSBlockDevice.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/EBSBlockDevice.hs
+++ /dev/null
@@ -1,83 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The Amazon Elastic Block Store block device type is an embedded property
--- of the Amazon EC2 Block Device Mapping Property property.
-
-module Stratosphere.ResourceProperties.EBSBlockDevice where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for EBSBlockDevice. See 'ebsBlockDevice' for a
--- more convenient constructor.
-data EBSBlockDevice =
-  EBSBlockDevice
-  { _eBSBlockDeviceDeleteOnTermination :: Maybe (Val Bool')
-  , _eBSBlockDeviceEncrypted :: Maybe (Val Bool')
-  , _eBSBlockDeviceIops :: Maybe (Val Integer')
-  , _eBSBlockDeviceSnapshotId :: Maybe (Val Text)
-  , _eBSBlockDeviceVolumeSize :: Maybe (Val Text)
-  , _eBSBlockDeviceVolumeType :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON EBSBlockDevice where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
-
-instance FromJSON EBSBlockDevice where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
-
--- | Constructor for 'EBSBlockDevice' containing required fields as arguments.
-ebsBlockDevice
-  :: EBSBlockDevice
-ebsBlockDevice  =
-  EBSBlockDevice
-  { _eBSBlockDeviceDeleteOnTermination = Nothing
-  , _eBSBlockDeviceEncrypted = Nothing
-  , _eBSBlockDeviceIops = Nothing
-  , _eBSBlockDeviceSnapshotId = Nothing
-  , _eBSBlockDeviceVolumeSize = Nothing
-  , _eBSBlockDeviceVolumeType = Nothing
-  }
-
--- | Determines whether to delete the volume on instance termination. The
--- default value is true.
-ebsbdDeleteOnTermination :: Lens' EBSBlockDevice (Maybe (Val Bool'))
-ebsbdDeleteOnTermination = lens _eBSBlockDeviceDeleteOnTermination (\s a -> s { _eBSBlockDeviceDeleteOnTermination = a })
-
--- | Indicates whether the volume is encrypted. Encrypted Amazon EBS volumes
--- can only be attached to instance types that support Amazon EBS encryption.
--- Volumes that are created from encrypted snapshots are automatically
--- encrypted. You cannot create an encrypted volume from an unencrypted
--- snapshot or vice versa. If your AMI uses encrypted volumes, you can only
--- launch the AMI on supported instance types. For more information, see
--- Amazon EBS encryption in the Amazon EC2 User Guide for Linux Instances.
-ebsbdEncrypted :: Lens' EBSBlockDevice (Maybe (Val Bool'))
-ebsbdEncrypted = lens _eBSBlockDeviceEncrypted (\s a -> s { _eBSBlockDeviceEncrypted = a })
-
--- | The number of I/O operations per second (IOPS) that the volume supports.
--- This can be an integer from 100 - 2000.
-ebsbdIops :: Lens' EBSBlockDevice (Maybe (Val Integer'))
-ebsbdIops = lens _eBSBlockDeviceIops (\s a -> s { _eBSBlockDeviceIops = a })
-
--- | The snapshot ID of the volume to use to create a block device.
-ebsbdSnapshotId :: Lens' EBSBlockDevice (Maybe (Val Text))
-ebsbdSnapshotId = lens _eBSBlockDeviceSnapshotId (\s a -> s { _eBSBlockDeviceSnapshotId = a })
-
--- | The volume size, in gibibytes (GiB). This can be a number from 1 – 1024.
--- If the volume type is io1, the minimum value is 10.
-ebsbdVolumeSize :: Lens' EBSBlockDevice (Maybe (Val Text))
-ebsbdVolumeSize = lens _eBSBlockDeviceVolumeSize (\s a -> s { _eBSBlockDeviceVolumeSize = a })
-
--- | The volume type. You can specify standard, io1, or gp2. If you set the
--- type to io1, you must also set the Iops property. For more information
--- about these values and the default value, see CreateVolume in the Amazon
--- EC2 API Reference.
-ebsbdVolumeType :: Lens' EBSBlockDevice (Maybe (Val Text))
-ebsbdVolumeType = lens _eBSBlockDeviceVolumeType (\s a -> s { _eBSBlockDeviceVolumeType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2BlockDeviceMapping.hs b/library-gen/Stratosphere/ResourceProperties/EC2BlockDeviceMapping.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/EC2BlockDeviceMapping.hs
+++ /dev/null
@@ -1,63 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The Amazon EC2 block device mapping property is an embedded property of
--- the AWS::EC2::Instance resource. For block device mappings for an Auto
--- Scaling launch configuration, see AutoScaling Block Device Mapping.
-
-module Stratosphere.ResourceProperties.EC2BlockDeviceMapping where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.EBSBlockDevice
-
--- | Full data type definition for EC2BlockDeviceMapping. See
--- 'ec2BlockDeviceMapping' for a more convenient constructor.
-data EC2BlockDeviceMapping =
-  EC2BlockDeviceMapping
-  { _eC2BlockDeviceMappingDeviceName :: Val Text
-  , _eC2BlockDeviceMappingEbs :: Maybe EBSBlockDevice
-  , _eC2BlockDeviceMappingNoDevice :: Maybe ()
-  , _eC2BlockDeviceMappingVirtualName :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON EC2BlockDeviceMapping where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
-
-instance FromJSON EC2BlockDeviceMapping where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
-
--- | Constructor for 'EC2BlockDeviceMapping' containing required fields as
--- arguments.
-ec2BlockDeviceMapping
-  :: Val Text -- ^ 'ecbdmDeviceName'
-  -> EC2BlockDeviceMapping
-ec2BlockDeviceMapping deviceNamearg =
-  EC2BlockDeviceMapping
-  { _eC2BlockDeviceMappingDeviceName = deviceNamearg
-  , _eC2BlockDeviceMappingEbs = Nothing
-  , _eC2BlockDeviceMappingNoDevice = Nothing
-  , _eC2BlockDeviceMappingVirtualName = Nothing
-  }
-
--- | The name of the device within Amazon EC2.
-ecbdmDeviceName :: Lens' EC2BlockDeviceMapping (Val Text)
-ecbdmDeviceName = lens _eC2BlockDeviceMappingDeviceName (\s a -> s { _eC2BlockDeviceMappingDeviceName = a })
-
--- |
-ecbdmEbs :: Lens' EC2BlockDeviceMapping (Maybe EBSBlockDevice)
-ecbdmEbs = lens _eC2BlockDeviceMappingEbs (\s a -> s { _eC2BlockDeviceMappingEbs = a })
-
--- | This property can be used to unmap a defined device.
-ecbdmNoDevice :: Lens' EC2BlockDeviceMapping (Maybe ())
-ecbdmNoDevice = lens _eC2BlockDeviceMappingNoDevice (\s a -> s { _eC2BlockDeviceMappingNoDevice = a })
-
--- | The name of the virtual device. The name must be in the form ephemeralX
--- where X is a number starting from zero (0); for example, ephemeral0.
-ecbdmVirtualName :: Lens' EC2BlockDeviceMapping (Maybe (Val Text))
-ecbdmVirtualName = lens _eC2BlockDeviceMappingVirtualName (\s a -> s { _eC2BlockDeviceMappingVirtualName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2DHCPOptionsTag.hs b/library-gen/Stratosphere/ResourceProperties/EC2DHCPOptionsTag.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2DHCPOptionsTag.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html
+
+module Stratosphere.ResourceProperties.EC2DHCPOptionsTag where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2DHCPOptionsTag. See 'ec2DHCPOptionsTag'
+-- | for a more convenient constructor.
+data EC2DHCPOptionsTag =
+  EC2DHCPOptionsTag
+  { _eC2DHCPOptionsTagKey :: Val Text
+  , _eC2DHCPOptionsTagValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2DHCPOptionsTag where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+
+instance FromJSON EC2DHCPOptionsTag where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+
+-- | Constructor for 'EC2DHCPOptionsTag' containing required fields as
+-- | arguments.
+ec2DHCPOptionsTag
+  :: Val Text -- ^ 'ecdhcpotKey'
+  -> Val Text -- ^ 'ecdhcpotValue'
+  -> EC2DHCPOptionsTag
+ec2DHCPOptionsTag keyarg valuearg =
+  EC2DHCPOptionsTag
+  { _eC2DHCPOptionsTagKey = keyarg
+  , _eC2DHCPOptionsTagValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html#cfn-resource-tags-key
+ecdhcpotKey :: Lens' EC2DHCPOptionsTag (Val Text)
+ecdhcpotKey = lens _eC2DHCPOptionsTagKey (\s a -> s { _eC2DHCPOptionsTagKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html#cfn-resource-tags-value
+ecdhcpotValue :: Lens' EC2DHCPOptionsTag (Val Text)
+ecdhcpotValue = lens _eC2DHCPOptionsTagValue (\s a -> s { _eC2DHCPOptionsTagValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceAssociationParameter.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceAssociationParameter.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceAssociationParameter.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ssmassociations-associationparameters.html
+
+module Stratosphere.ResourceProperties.EC2InstanceAssociationParameter where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2InstanceAssociationParameter. See
+-- | 'ec2InstanceAssociationParameter' for a more convenient constructor.
+data EC2InstanceAssociationParameter =
+  EC2InstanceAssociationParameter
+  { _eC2InstanceAssociationParameterKey :: Val Text
+  , _eC2InstanceAssociationParameterValue :: [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON EC2InstanceAssociationParameter where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+instance FromJSON EC2InstanceAssociationParameter where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+-- | Constructor for 'EC2InstanceAssociationParameter' containing required
+-- | fields as arguments.
+ec2InstanceAssociationParameter
+  :: Val Text -- ^ 'eciapKey'
+  -> [Val Text] -- ^ 'eciapValue'
+  -> EC2InstanceAssociationParameter
+ec2InstanceAssociationParameter keyarg valuearg =
+  EC2InstanceAssociationParameter
+  { _eC2InstanceAssociationParameterKey = keyarg
+  , _eC2InstanceAssociationParameterValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ssmassociations-associationparameters.html#cfn-ec2-instance-ssmassociations-associationparameters-key
+eciapKey :: Lens' EC2InstanceAssociationParameter (Val Text)
+eciapKey = lens _eC2InstanceAssociationParameterKey (\s a -> s { _eC2InstanceAssociationParameterKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ssmassociations-associationparameters.html#cfn-ec2-instance-ssmassociations-associationparameters-value
+eciapValue :: Lens' EC2InstanceAssociationParameter [Val Text]
+eciapValue = lens _eC2InstanceAssociationParameterValue (\s a -> s { _eC2InstanceAssociationParameterValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceBlockDeviceMapping.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceBlockDeviceMapping.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceBlockDeviceMapping.hs
@@ -0,0 +1,61 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-mapping.html
+
+module Stratosphere.ResourceProperties.EC2InstanceBlockDeviceMapping where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EC2InstanceEbs
+import Stratosphere.ResourceProperties.EC2InstanceNoDevice
+
+-- | Full data type definition for EC2InstanceBlockDeviceMapping. See
+-- | 'ec2InstanceBlockDeviceMapping' for a more convenient constructor.
+data EC2InstanceBlockDeviceMapping =
+  EC2InstanceBlockDeviceMapping
+  { _eC2InstanceBlockDeviceMappingDeviceName :: Val Text
+  , _eC2InstanceBlockDeviceMappingEbs :: Maybe EC2InstanceEbs
+  , _eC2InstanceBlockDeviceMappingNoDevice :: Maybe EC2InstanceNoDevice
+  , _eC2InstanceBlockDeviceMappingVirtualName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2InstanceBlockDeviceMapping where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+instance FromJSON EC2InstanceBlockDeviceMapping where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+-- | Constructor for 'EC2InstanceBlockDeviceMapping' containing required
+-- | fields as arguments.
+ec2InstanceBlockDeviceMapping
+  :: Val Text -- ^ 'ecibdmDeviceName'
+  -> EC2InstanceBlockDeviceMapping
+ec2InstanceBlockDeviceMapping deviceNamearg =
+  EC2InstanceBlockDeviceMapping
+  { _eC2InstanceBlockDeviceMappingDeviceName = deviceNamearg
+  , _eC2InstanceBlockDeviceMappingEbs = Nothing
+  , _eC2InstanceBlockDeviceMappingNoDevice = Nothing
+  , _eC2InstanceBlockDeviceMappingVirtualName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-mapping.html#cfn-ec2-blockdev-mapping-devicename
+ecibdmDeviceName :: Lens' EC2InstanceBlockDeviceMapping (Val Text)
+ecibdmDeviceName = lens _eC2InstanceBlockDeviceMappingDeviceName (\s a -> s { _eC2InstanceBlockDeviceMappingDeviceName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-mapping.html#cfn-ec2-blockdev-mapping-ebs
+ecibdmEbs :: Lens' EC2InstanceBlockDeviceMapping (Maybe EC2InstanceEbs)
+ecibdmEbs = lens _eC2InstanceBlockDeviceMappingEbs (\s a -> s { _eC2InstanceBlockDeviceMappingEbs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-mapping.html#cfn-ec2-blockdev-mapping-nodevice
+ecibdmNoDevice :: Lens' EC2InstanceBlockDeviceMapping (Maybe EC2InstanceNoDevice)
+ecibdmNoDevice = lens _eC2InstanceBlockDeviceMappingNoDevice (\s a -> s { _eC2InstanceBlockDeviceMappingNoDevice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-mapping.html#cfn-ec2-blockdev-mapping-virtualname
+ecibdmVirtualName :: Lens' EC2InstanceBlockDeviceMapping (Maybe (Val Text))
+ecibdmVirtualName = lens _eC2InstanceBlockDeviceMappingVirtualName (\s a -> s { _eC2InstanceBlockDeviceMappingVirtualName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceEbs.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceEbs.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceEbs.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-template.html
+
+module Stratosphere.ResourceProperties.EC2InstanceEbs where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2InstanceEbs. See 'ec2InstanceEbs' for a
+-- | more convenient constructor.
+data EC2InstanceEbs =
+  EC2InstanceEbs
+  { _eC2InstanceEbsDeleteOnTermination :: Maybe (Val Bool')
+  , _eC2InstanceEbsEncrypted :: Maybe (Val Bool')
+  , _eC2InstanceEbsIops :: Maybe (Val Integer')
+  , _eC2InstanceEbsSnapshotId :: Maybe (Val Text)
+  , _eC2InstanceEbsVolumeSize :: Maybe (Val Integer')
+  , _eC2InstanceEbsVolumeType :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2InstanceEbs where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+instance FromJSON EC2InstanceEbs where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+-- | Constructor for 'EC2InstanceEbs' containing required fields as arguments.
+ec2InstanceEbs
+  :: EC2InstanceEbs
+ec2InstanceEbs  =
+  EC2InstanceEbs
+  { _eC2InstanceEbsDeleteOnTermination = Nothing
+  , _eC2InstanceEbsEncrypted = Nothing
+  , _eC2InstanceEbsIops = Nothing
+  , _eC2InstanceEbsSnapshotId = Nothing
+  , _eC2InstanceEbsVolumeSize = Nothing
+  , _eC2InstanceEbsVolumeType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-template.html#cfn-ec2-blockdev-template-deleteontermination
+ecieDeleteOnTermination :: Lens' EC2InstanceEbs (Maybe (Val Bool'))
+ecieDeleteOnTermination = lens _eC2InstanceEbsDeleteOnTermination (\s a -> s { _eC2InstanceEbsDeleteOnTermination = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-template.html#cfn-ec2-blockdev-template-encrypted
+ecieEncrypted :: Lens' EC2InstanceEbs (Maybe (Val Bool'))
+ecieEncrypted = lens _eC2InstanceEbsEncrypted (\s a -> s { _eC2InstanceEbsEncrypted = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-template.html#cfn-ec2-blockdev-template-iops
+ecieIops :: Lens' EC2InstanceEbs (Maybe (Val Integer'))
+ecieIops = lens _eC2InstanceEbsIops (\s a -> s { _eC2InstanceEbsIops = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-template.html#cfn-ec2-blockdev-template-snapshotid
+ecieSnapshotId :: Lens' EC2InstanceEbs (Maybe (Val Text))
+ecieSnapshotId = lens _eC2InstanceEbsSnapshotId (\s a -> s { _eC2InstanceEbsSnapshotId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-template.html#cfn-ec2-blockdev-template-volumesize
+ecieVolumeSize :: Lens' EC2InstanceEbs (Maybe (Val Integer'))
+ecieVolumeSize = lens _eC2InstanceEbsVolumeSize (\s a -> s { _eC2InstanceEbsVolumeSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-template.html#cfn-ec2-blockdev-template-volumetype
+ecieVolumeType :: Lens' EC2InstanceEbs (Maybe (Val Text))
+ecieVolumeType = lens _eC2InstanceEbsVolumeType (\s a -> s { _eC2InstanceEbsVolumeType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceInstanceIpv6Address.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceInstanceIpv6Address.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceInstanceIpv6Address.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-instanceipv6address.html
+
+module Stratosphere.ResourceProperties.EC2InstanceInstanceIpv6Address where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2InstanceInstanceIpv6Address. See
+-- | 'ec2InstanceInstanceIpv6Address' for a more convenient constructor.
+data EC2InstanceInstanceIpv6Address =
+  EC2InstanceInstanceIpv6Address
+  { _eC2InstanceInstanceIpv6AddressIpv6Address :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2InstanceInstanceIpv6Address where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+instance FromJSON EC2InstanceInstanceIpv6Address where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+-- | Constructor for 'EC2InstanceInstanceIpv6Address' containing required
+-- | fields as arguments.
+ec2InstanceInstanceIpv6Address
+  :: Val Text -- ^ 'eciiiaIpv6Address'
+  -> EC2InstanceInstanceIpv6Address
+ec2InstanceInstanceIpv6Address ipv6Addressarg =
+  EC2InstanceInstanceIpv6Address
+  { _eC2InstanceInstanceIpv6AddressIpv6Address = ipv6Addressarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-instanceipv6address.html#cfn-ec2-instance-instanceipv6address-ipv6address
+eciiiaIpv6Address :: Lens' EC2InstanceInstanceIpv6Address (Val Text)
+eciiiaIpv6Address = lens _eC2InstanceInstanceIpv6AddressIpv6Address (\s a -> s { _eC2InstanceInstanceIpv6AddressIpv6Address = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceNetworkInterface.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceNetworkInterface.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceNetworkInterface.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-iface-embedded.html
+
+module Stratosphere.ResourceProperties.EC2InstanceNetworkInterface where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EC2InstanceInstanceIpv6Address
+import Stratosphere.ResourceProperties.EC2InstancePrivateIpAddressSpecification
+
+-- | Full data type definition for EC2InstanceNetworkInterface. See
+-- | 'ec2InstanceNetworkInterface' for a more convenient constructor.
+data EC2InstanceNetworkInterface =
+  EC2InstanceNetworkInterface
+  { _eC2InstanceNetworkInterfaceAssociatePublicIpAddress :: Maybe (Val Bool')
+  , _eC2InstanceNetworkInterfaceDeleteOnTermination :: Maybe (Val Bool')
+  , _eC2InstanceNetworkInterfaceDescription :: Maybe (Val Text)
+  , _eC2InstanceNetworkInterfaceDeviceIndex :: Val Text
+  , _eC2InstanceNetworkInterfaceGroupSet :: Maybe [Val Text]
+  , _eC2InstanceNetworkInterfaceIpv6AddressCount :: Maybe (Val Integer')
+  , _eC2InstanceNetworkInterfaceIpv6Addresses :: Maybe [EC2InstanceInstanceIpv6Address]
+  , _eC2InstanceNetworkInterfaceNetworkInterfaceId :: Maybe (Val Text)
+  , _eC2InstanceNetworkInterfacePrivateIpAddress :: Maybe (Val Text)
+  , _eC2InstanceNetworkInterfacePrivateIpAddresses :: Maybe [EC2InstancePrivateIpAddressSpecification]
+  , _eC2InstanceNetworkInterfaceSecondaryPrivateIpAddressCount :: Maybe (Val Integer')
+  , _eC2InstanceNetworkInterfaceSubnetId :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2InstanceNetworkInterface where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON EC2InstanceNetworkInterface where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'EC2InstanceNetworkInterface' containing required fields
+-- | as arguments.
+ec2InstanceNetworkInterface
+  :: Val Text -- ^ 'eciniDeviceIndex'
+  -> EC2InstanceNetworkInterface
+ec2InstanceNetworkInterface deviceIndexarg =
+  EC2InstanceNetworkInterface
+  { _eC2InstanceNetworkInterfaceAssociatePublicIpAddress = Nothing
+  , _eC2InstanceNetworkInterfaceDeleteOnTermination = Nothing
+  , _eC2InstanceNetworkInterfaceDescription = Nothing
+  , _eC2InstanceNetworkInterfaceDeviceIndex = deviceIndexarg
+  , _eC2InstanceNetworkInterfaceGroupSet = Nothing
+  , _eC2InstanceNetworkInterfaceIpv6AddressCount = Nothing
+  , _eC2InstanceNetworkInterfaceIpv6Addresses = Nothing
+  , _eC2InstanceNetworkInterfaceNetworkInterfaceId = Nothing
+  , _eC2InstanceNetworkInterfacePrivateIpAddress = Nothing
+  , _eC2InstanceNetworkInterfacePrivateIpAddresses = Nothing
+  , _eC2InstanceNetworkInterfaceSecondaryPrivateIpAddressCount = Nothing
+  , _eC2InstanceNetworkInterfaceSubnetId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-iface-embedded.html#aws-properties-ec2-network-iface-embedded-associatepubip
+eciniAssociatePublicIpAddress :: Lens' EC2InstanceNetworkInterface (Maybe (Val Bool'))
+eciniAssociatePublicIpAddress = lens _eC2InstanceNetworkInterfaceAssociatePublicIpAddress (\s a -> s { _eC2InstanceNetworkInterfaceAssociatePublicIpAddress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-iface-embedded.html#aws-properties-ec2-network-iface-embedded-delete
+eciniDeleteOnTermination :: Lens' EC2InstanceNetworkInterface (Maybe (Val Bool'))
+eciniDeleteOnTermination = lens _eC2InstanceNetworkInterfaceDeleteOnTermination (\s a -> s { _eC2InstanceNetworkInterfaceDeleteOnTermination = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-iface-embedded.html#aws-properties-ec2-network-iface-embedded-description
+eciniDescription :: Lens' EC2InstanceNetworkInterface (Maybe (Val Text))
+eciniDescription = lens _eC2InstanceNetworkInterfaceDescription (\s a -> s { _eC2InstanceNetworkInterfaceDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-iface-embedded.html#aws-properties-ec2-network-iface-embedded-deviceindex
+eciniDeviceIndex :: Lens' EC2InstanceNetworkInterface (Val Text)
+eciniDeviceIndex = lens _eC2InstanceNetworkInterfaceDeviceIndex (\s a -> s { _eC2InstanceNetworkInterfaceDeviceIndex = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-iface-embedded.html#aws-properties-ec2-network-iface-embedded-groupset
+eciniGroupSet :: Lens' EC2InstanceNetworkInterface (Maybe [Val Text])
+eciniGroupSet = lens _eC2InstanceNetworkInterfaceGroupSet (\s a -> s { _eC2InstanceNetworkInterfaceGroupSet = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-iface-embedded.html#cfn-ec2-instance-networkinterface-ipv6addresscount
+eciniIpv6AddressCount :: Lens' EC2InstanceNetworkInterface (Maybe (Val Integer'))
+eciniIpv6AddressCount = lens _eC2InstanceNetworkInterfaceIpv6AddressCount (\s a -> s { _eC2InstanceNetworkInterfaceIpv6AddressCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-iface-embedded.html#cfn-ec2-instance-networkinterface-ipv6addresses
+eciniIpv6Addresses :: Lens' EC2InstanceNetworkInterface (Maybe [EC2InstanceInstanceIpv6Address])
+eciniIpv6Addresses = lens _eC2InstanceNetworkInterfaceIpv6Addresses (\s a -> s { _eC2InstanceNetworkInterfaceIpv6Addresses = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-iface-embedded.html#aws-properties-ec2-network-iface-embedded-network-iface
+eciniNetworkInterfaceId :: Lens' EC2InstanceNetworkInterface (Maybe (Val Text))
+eciniNetworkInterfaceId = lens _eC2InstanceNetworkInterfaceNetworkInterfaceId (\s a -> s { _eC2InstanceNetworkInterfaceNetworkInterfaceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-iface-embedded.html#aws-properties-ec2-network-iface-embedded-privateipaddress
+eciniPrivateIpAddress :: Lens' EC2InstanceNetworkInterface (Maybe (Val Text))
+eciniPrivateIpAddress = lens _eC2InstanceNetworkInterfacePrivateIpAddress (\s a -> s { _eC2InstanceNetworkInterfacePrivateIpAddress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-iface-embedded.html#aws-properties-ec2-network-iface-embedded-privateipaddresses
+eciniPrivateIpAddresses :: Lens' EC2InstanceNetworkInterface (Maybe [EC2InstancePrivateIpAddressSpecification])
+eciniPrivateIpAddresses = lens _eC2InstanceNetworkInterfacePrivateIpAddresses (\s a -> s { _eC2InstanceNetworkInterfacePrivateIpAddresses = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-iface-embedded.html#aws-properties-ec2-network-iface-embedded-secondprivateip
+eciniSecondaryPrivateIpAddressCount :: Lens' EC2InstanceNetworkInterface (Maybe (Val Integer'))
+eciniSecondaryPrivateIpAddressCount = lens _eC2InstanceNetworkInterfaceSecondaryPrivateIpAddressCount (\s a -> s { _eC2InstanceNetworkInterfaceSecondaryPrivateIpAddressCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-iface-embedded.html#aws-properties-ec2-network-iface-embedded-subnetid
+eciniSubnetId :: Lens' EC2InstanceNetworkInterface (Maybe (Val Text))
+eciniSubnetId = lens _eC2InstanceNetworkInterfaceSubnetId (\s a -> s { _eC2InstanceNetworkInterfaceSubnetId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceNoDevice.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceNoDevice.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceNoDevice.hs
@@ -0,0 +1,39 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-nodevice.html
+
+module Stratosphere.ResourceProperties.EC2InstanceNoDevice where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2InstanceNoDevice. See
+-- | 'ec2InstanceNoDevice' for a more convenient constructor.
+data EC2InstanceNoDevice =
+  EC2InstanceNoDevice
+  { 
+  } deriving (Show, Generic)
+
+instance ToJSON EC2InstanceNoDevice where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+instance FromJSON EC2InstanceNoDevice where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+-- | Constructor for 'EC2InstanceNoDevice' containing required fields as
+-- | arguments.
+ec2InstanceNoDevice
+  :: EC2InstanceNoDevice
+ec2InstanceNoDevice  =
+  EC2InstanceNoDevice
+  { 
+  }
+
+
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstancePrivateIpAddressSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstancePrivateIpAddressSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstancePrivateIpAddressSpecification.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-interface-privateipspec.html
+
+module Stratosphere.ResourceProperties.EC2InstancePrivateIpAddressSpecification where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2InstancePrivateIpAddressSpecification.
+-- | See 'ec2InstancePrivateIpAddressSpecification' for a more convenient
+-- | constructor.
+data EC2InstancePrivateIpAddressSpecification =
+  EC2InstancePrivateIpAddressSpecification
+  { _eC2InstancePrivateIpAddressSpecificationPrimary :: Val Bool'
+  , _eC2InstancePrivateIpAddressSpecificationPrivateIpAddress :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2InstancePrivateIpAddressSpecification where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+instance FromJSON EC2InstancePrivateIpAddressSpecification where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+-- | Constructor for 'EC2InstancePrivateIpAddressSpecification' containing
+-- | required fields as arguments.
+ec2InstancePrivateIpAddressSpecification
+  :: Val Bool' -- ^ 'ecipiasPrimary'
+  -> Val Text -- ^ 'ecipiasPrivateIpAddress'
+  -> EC2InstancePrivateIpAddressSpecification
+ec2InstancePrivateIpAddressSpecification primaryarg privateIpAddressarg =
+  EC2InstancePrivateIpAddressSpecification
+  { _eC2InstancePrivateIpAddressSpecificationPrimary = primaryarg
+  , _eC2InstancePrivateIpAddressSpecificationPrivateIpAddress = privateIpAddressarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-interface-privateipspec.html#cfn-ec2-networkinterface-privateipspecification-primary
+ecipiasPrimary :: Lens' EC2InstancePrivateIpAddressSpecification (Val Bool')
+ecipiasPrimary = lens _eC2InstancePrivateIpAddressSpecificationPrimary (\s a -> s { _eC2InstancePrivateIpAddressSpecificationPrimary = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-interface-privateipspec.html#cfn-ec2-networkinterface-privateipspecification-privateipaddress
+ecipiasPrivateIpAddress :: Lens' EC2InstancePrivateIpAddressSpecification (Val Text)
+ecipiasPrivateIpAddress = lens _eC2InstancePrivateIpAddressSpecificationPrivateIpAddress (\s a -> s { _eC2InstancePrivateIpAddressSpecificationPrivateIpAddress = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceSsmAssociation.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceSsmAssociation.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceSsmAssociation.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ssmassociations.html
+
+module Stratosphere.ResourceProperties.EC2InstanceSsmAssociation where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EC2InstanceAssociationParameter
+
+-- | Full data type definition for EC2InstanceSsmAssociation. See
+-- | 'ec2InstanceSsmAssociation' for a more convenient constructor.
+data EC2InstanceSsmAssociation =
+  EC2InstanceSsmAssociation
+  { _eC2InstanceSsmAssociationAssociationParameters :: Maybe [EC2InstanceAssociationParameter]
+  , _eC2InstanceSsmAssociationDocumentName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2InstanceSsmAssociation where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+instance FromJSON EC2InstanceSsmAssociation where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+-- | Constructor for 'EC2InstanceSsmAssociation' containing required fields as
+-- | arguments.
+ec2InstanceSsmAssociation
+  :: Val Text -- ^ 'ecisaDocumentName'
+  -> EC2InstanceSsmAssociation
+ec2InstanceSsmAssociation documentNamearg =
+  EC2InstanceSsmAssociation
+  { _eC2InstanceSsmAssociationAssociationParameters = Nothing
+  , _eC2InstanceSsmAssociationDocumentName = documentNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ssmassociations.html#cfn-ec2-instance-ssmassociations-associationparameters
+ecisaAssociationParameters :: Lens' EC2InstanceSsmAssociation (Maybe [EC2InstanceAssociationParameter])
+ecisaAssociationParameters = lens _eC2InstanceSsmAssociationAssociationParameters (\s a -> s { _eC2InstanceSsmAssociationAssociationParameters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ssmassociations.html#cfn-ec2-instance-ssmassociations-documentname
+ecisaDocumentName :: Lens' EC2InstanceSsmAssociation (Val Text)
+ecisaDocumentName = lens _eC2InstanceSsmAssociationDocumentName (\s a -> s { _eC2InstanceSsmAssociationDocumentName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceVolume.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceVolume.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceVolume.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-mount-point.html
+
+module Stratosphere.ResourceProperties.EC2InstanceVolume where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2InstanceVolume. See 'ec2InstanceVolume'
+-- | for a more convenient constructor.
+data EC2InstanceVolume =
+  EC2InstanceVolume
+  { _eC2InstanceVolumeDevice :: Val Text
+  , _eC2InstanceVolumeVolumeId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2InstanceVolume where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+
+instance FromJSON EC2InstanceVolume where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+
+-- | Constructor for 'EC2InstanceVolume' containing required fields as
+-- | arguments.
+ec2InstanceVolume
+  :: Val Text -- ^ 'ecivDevice'
+  -> Val Text -- ^ 'ecivVolumeId'
+  -> EC2InstanceVolume
+ec2InstanceVolume devicearg volumeIdarg =
+  EC2InstanceVolume
+  { _eC2InstanceVolumeDevice = devicearg
+  , _eC2InstanceVolumeVolumeId = volumeIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-mount-point.html#cfn-ec2-mountpoint-device
+ecivDevice :: Lens' EC2InstanceVolume (Val Text)
+ecivDevice = lens _eC2InstanceVolumeDevice (\s a -> s { _eC2InstanceVolumeDevice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-mount-point.html#cfn-ec2-mountpoint-volumeid
+ecivVolumeId :: Lens' EC2InstanceVolume (Val Text)
+ecivVolumeId = lens _eC2InstanceVolumeVolumeId (\s a -> s { _eC2InstanceVolumeVolumeId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2MountPoint.hs b/library-gen/Stratosphere/ResourceProperties/EC2MountPoint.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/EC2MountPoint.hs
+++ /dev/null
@@ -1,50 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The EC2 MountPoint property is an embedded property of the
--- AWS::EC2::Instance type.
-
-module Stratosphere.ResourceProperties.EC2MountPoint where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for EC2MountPoint. See 'ec2MountPoint' for a
--- more convenient constructor.
-data EC2MountPoint =
-  EC2MountPoint
-  { _eC2MountPointDevice :: Val Text
-  , _eC2MountPointVolumeId :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON EC2MountPoint where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
-
-instance FromJSON EC2MountPoint where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
-
--- | Constructor for 'EC2MountPoint' containing required fields as arguments.
-ec2MountPoint
-  :: Val Text -- ^ 'ecmpDevice'
-  -> Val Text -- ^ 'ecmpVolumeId'
-  -> EC2MountPoint
-ec2MountPoint devicearg volumeIdarg =
-  EC2MountPoint
-  { _eC2MountPointDevice = devicearg
-  , _eC2MountPointVolumeId = volumeIdarg
-  }
-
--- | How the device is exposed to the instance (such as /dev/sdh, or xvdh).
-ecmpDevice :: Lens' EC2MountPoint (Val Text)
-ecmpDevice = lens _eC2MountPointDevice (\s a -> s { _eC2MountPointDevice = a })
-
--- | The ID of the Amazon EBS volume. The volume and instance must be within
--- the same Availability Zone and the instance must be running.
-ecmpVolumeId :: Lens' EC2MountPoint (Val Text)
-ecmpVolumeId = lens _eC2MountPointVolumeId (\s a -> s { _eC2MountPointVolumeId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2NetworkAclEntryIcmp.hs b/library-gen/Stratosphere/ResourceProperties/EC2NetworkAclEntryIcmp.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2NetworkAclEntryIcmp.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-icmp.html
+
+module Stratosphere.ResourceProperties.EC2NetworkAclEntryIcmp where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2NetworkAclEntryIcmp. See
+-- | 'ec2NetworkAclEntryIcmp' for a more convenient constructor.
+data EC2NetworkAclEntryIcmp =
+  EC2NetworkAclEntryIcmp
+  { _eC2NetworkAclEntryIcmpCode :: Maybe (Val Integer')
+  , _eC2NetworkAclEntryIcmpType :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON EC2NetworkAclEntryIcmp where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+instance FromJSON EC2NetworkAclEntryIcmp where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+-- | Constructor for 'EC2NetworkAclEntryIcmp' containing required fields as
+-- | arguments.
+ec2NetworkAclEntryIcmp
+  :: EC2NetworkAclEntryIcmp
+ec2NetworkAclEntryIcmp  =
+  EC2NetworkAclEntryIcmp
+  { _eC2NetworkAclEntryIcmpCode = Nothing
+  , _eC2NetworkAclEntryIcmpType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-icmp.html#cfn-ec2-networkaclentry-icmp-code
+ecnaeiCode :: Lens' EC2NetworkAclEntryIcmp (Maybe (Val Integer'))
+ecnaeiCode = lens _eC2NetworkAclEntryIcmpCode (\s a -> s { _eC2NetworkAclEntryIcmpCode = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-icmp.html#cfn-ec2-networkaclentry-icmp-type
+ecnaeiType :: Lens' EC2NetworkAclEntryIcmp (Maybe (Val Integer'))
+ecnaeiType = lens _eC2NetworkAclEntryIcmpType (\s a -> s { _eC2NetworkAclEntryIcmpType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2NetworkAclEntryPortRange.hs b/library-gen/Stratosphere/ResourceProperties/EC2NetworkAclEntryPortRange.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2NetworkAclEntryPortRange.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-portrange.html
+
+module Stratosphere.ResourceProperties.EC2NetworkAclEntryPortRange where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2NetworkAclEntryPortRange. See
+-- | 'ec2NetworkAclEntryPortRange' for a more convenient constructor.
+data EC2NetworkAclEntryPortRange =
+  EC2NetworkAclEntryPortRange
+  { _eC2NetworkAclEntryPortRangeFrom :: Maybe (Val Integer')
+  , _eC2NetworkAclEntryPortRangeTo :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON EC2NetworkAclEntryPortRange where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON EC2NetworkAclEntryPortRange where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'EC2NetworkAclEntryPortRange' containing required fields
+-- | as arguments.
+ec2NetworkAclEntryPortRange
+  :: EC2NetworkAclEntryPortRange
+ec2NetworkAclEntryPortRange  =
+  EC2NetworkAclEntryPortRange
+  { _eC2NetworkAclEntryPortRangeFrom = Nothing
+  , _eC2NetworkAclEntryPortRangeTo = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-portrange.html#cfn-ec2-networkaclentry-portrange-from
+ecnaeprFrom :: Lens' EC2NetworkAclEntryPortRange (Maybe (Val Integer'))
+ecnaeprFrom = lens _eC2NetworkAclEntryPortRangeFrom (\s a -> s { _eC2NetworkAclEntryPortRangeFrom = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-portrange.html#cfn-ec2-networkaclentry-portrange-to
+ecnaeprTo :: Lens' EC2NetworkAclEntryPortRange (Maybe (Val Integer'))
+ecnaeprTo = lens _eC2NetworkAclEntryPortRangeTo (\s a -> s { _eC2NetworkAclEntryPortRangeTo = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2NetworkInterfaceInstanceIpv6Address.hs b/library-gen/Stratosphere/ResourceProperties/EC2NetworkInterfaceInstanceIpv6Address.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2NetworkInterfaceInstanceIpv6Address.hs
@@ -0,0 +1,43 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-instanceipv6address.html
+
+module Stratosphere.ResourceProperties.EC2NetworkInterfaceInstanceIpv6Address where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2NetworkInterfaceInstanceIpv6Address. See
+-- | 'ec2NetworkInterfaceInstanceIpv6Address' for a more convenient
+-- | constructor.
+data EC2NetworkInterfaceInstanceIpv6Address =
+  EC2NetworkInterfaceInstanceIpv6Address
+  { _eC2NetworkInterfaceInstanceIpv6AddressIpv6Address :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2NetworkInterfaceInstanceIpv6Address where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+instance FromJSON EC2NetworkInterfaceInstanceIpv6Address where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+-- | Constructor for 'EC2NetworkInterfaceInstanceIpv6Address' containing
+-- | required fields as arguments.
+ec2NetworkInterfaceInstanceIpv6Address
+  :: Val Text -- ^ 'ecniiiaIpv6Address'
+  -> EC2NetworkInterfaceInstanceIpv6Address
+ec2NetworkInterfaceInstanceIpv6Address ipv6Addressarg =
+  EC2NetworkInterfaceInstanceIpv6Address
+  { _eC2NetworkInterfaceInstanceIpv6AddressIpv6Address = ipv6Addressarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-instanceipv6address.html#cfn-ec2-networkinterface-instanceipv6address-ipv6address
+ecniiiaIpv6Address :: Lens' EC2NetworkInterfaceInstanceIpv6Address (Val Text)
+ecniiiaIpv6Address = lens _eC2NetworkInterfaceInstanceIpv6AddressIpv6Address (\s a -> s { _eC2NetworkInterfaceInstanceIpv6AddressIpv6Address = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2NetworkInterfacePrivateIpAddressSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EC2NetworkInterfacePrivateIpAddressSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2NetworkInterfacePrivateIpAddressSpecification.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-interface-privateipspec.html
+
+module Stratosphere.ResourceProperties.EC2NetworkInterfacePrivateIpAddressSpecification where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | EC2NetworkInterfacePrivateIpAddressSpecification. See
+-- | 'ec2NetworkInterfacePrivateIpAddressSpecification' for a more convenient
+-- | constructor.
+data EC2NetworkInterfacePrivateIpAddressSpecification =
+  EC2NetworkInterfacePrivateIpAddressSpecification
+  { _eC2NetworkInterfacePrivateIpAddressSpecificationPrimary :: Val Bool'
+  , _eC2NetworkInterfacePrivateIpAddressSpecificationPrivateIpAddress :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2NetworkInterfacePrivateIpAddressSpecification where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 49, omitNothingFields = True }
+
+instance FromJSON EC2NetworkInterfacePrivateIpAddressSpecification where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 49, omitNothingFields = True }
+
+-- | Constructor for 'EC2NetworkInterfacePrivateIpAddressSpecification'
+-- | containing required fields as arguments.
+ec2NetworkInterfacePrivateIpAddressSpecification
+  :: Val Bool' -- ^ 'ecnipiasPrimary'
+  -> Val Text -- ^ 'ecnipiasPrivateIpAddress'
+  -> EC2NetworkInterfacePrivateIpAddressSpecification
+ec2NetworkInterfacePrivateIpAddressSpecification primaryarg privateIpAddressarg =
+  EC2NetworkInterfacePrivateIpAddressSpecification
+  { _eC2NetworkInterfacePrivateIpAddressSpecificationPrimary = primaryarg
+  , _eC2NetworkInterfacePrivateIpAddressSpecificationPrivateIpAddress = privateIpAddressarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-interface-privateipspec.html#cfn-ec2-networkinterface-privateipspecification-primary
+ecnipiasPrimary :: Lens' EC2NetworkInterfacePrivateIpAddressSpecification (Val Bool')
+ecnipiasPrimary = lens _eC2NetworkInterfacePrivateIpAddressSpecificationPrimary (\s a -> s { _eC2NetworkInterfacePrivateIpAddressSpecificationPrimary = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-interface-privateipspec.html#cfn-ec2-networkinterface-privateipspecification-privateipaddress
+ecnipiasPrivateIpAddress :: Lens' EC2NetworkInterfacePrivateIpAddressSpecification (Val Text)
+ecnipiasPrivateIpAddress = lens _eC2NetworkInterfacePrivateIpAddressSpecificationPrivateIpAddress (\s a -> s { _eC2NetworkInterfacePrivateIpAddressSpecificationPrivateIpAddress = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SecurityGroupRule.hs b/library-gen/Stratosphere/ResourceProperties/EC2SecurityGroupRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SecurityGroupRule.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html
+
+module Stratosphere.ResourceProperties.EC2SecurityGroupRule where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SecurityGroupRule. See
+-- | 'ec2SecurityGroupRule' for a more convenient constructor.
+data EC2SecurityGroupRule =
+  EC2SecurityGroupRule
+  { _eC2SecurityGroupRuleCidrIp :: Maybe (Val Text)
+  , _eC2SecurityGroupRuleFromPort :: Maybe (Val Integer')
+  , _eC2SecurityGroupRuleIpProtocol :: Val Text
+  , _eC2SecurityGroupRuleSourceSecurityGroupId :: Maybe (Val Text)
+  , _eC2SecurityGroupRuleSourceSecurityGroupName :: Maybe (Val Text)
+  , _eC2SecurityGroupRuleSourceSecurityGroupOwnerId :: Maybe (Val Text)
+  , _eC2SecurityGroupRuleToPort :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SecurityGroupRule where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+instance FromJSON EC2SecurityGroupRule where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+-- | Constructor for 'EC2SecurityGroupRule' containing required fields as
+-- | arguments.
+ec2SecurityGroupRule
+  :: Val Text -- ^ 'ecsgrIpProtocol'
+  -> EC2SecurityGroupRule
+ec2SecurityGroupRule ipProtocolarg =
+  EC2SecurityGroupRule
+  { _eC2SecurityGroupRuleCidrIp = Nothing
+  , _eC2SecurityGroupRuleFromPort = Nothing
+  , _eC2SecurityGroupRuleIpProtocol = ipProtocolarg
+  , _eC2SecurityGroupRuleSourceSecurityGroupId = Nothing
+  , _eC2SecurityGroupRuleSourceSecurityGroupName = Nothing
+  , _eC2SecurityGroupRuleSourceSecurityGroupOwnerId = Nothing
+  , _eC2SecurityGroupRuleToPort = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-cidrip
+ecsgrCidrIp :: Lens' EC2SecurityGroupRule (Maybe (Val Text))
+ecsgrCidrIp = lens _eC2SecurityGroupRuleCidrIp (\s a -> s { _eC2SecurityGroupRuleCidrIp = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-fromport
+ecsgrFromPort :: Lens' EC2SecurityGroupRule (Maybe (Val Integer'))
+ecsgrFromPort = lens _eC2SecurityGroupRuleFromPort (\s a -> s { _eC2SecurityGroupRuleFromPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-ipprotocol
+ecsgrIpProtocol :: Lens' EC2SecurityGroupRule (Val Text)
+ecsgrIpProtocol = lens _eC2SecurityGroupRuleIpProtocol (\s a -> s { _eC2SecurityGroupRuleIpProtocol = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-sourcesecuritygroupid
+ecsgrSourceSecurityGroupId :: Lens' EC2SecurityGroupRule (Maybe (Val Text))
+ecsgrSourceSecurityGroupId = lens _eC2SecurityGroupRuleSourceSecurityGroupId (\s a -> s { _eC2SecurityGroupRuleSourceSecurityGroupId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-sourcesecuritygroupname
+ecsgrSourceSecurityGroupName :: Lens' EC2SecurityGroupRule (Maybe (Val Text))
+ecsgrSourceSecurityGroupName = lens _eC2SecurityGroupRuleSourceSecurityGroupName (\s a -> s { _eC2SecurityGroupRuleSourceSecurityGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-sourcesecuritygroupownerid
+ecsgrSourceSecurityGroupOwnerId :: Lens' EC2SecurityGroupRule (Maybe (Val Text))
+ecsgrSourceSecurityGroupOwnerId = lens _eC2SecurityGroupRuleSourceSecurityGroupOwnerId (\s a -> s { _eC2SecurityGroupRuleSourceSecurityGroupOwnerId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-toport
+ecsgrToPort :: Lens' EC2SecurityGroupRule (Maybe (Val Integer'))
+ecsgrToPort = lens _eC2SecurityGroupRuleToPort (\s a -> s { _eC2SecurityGroupRuleToPort = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetBlockDeviceMappings.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetBlockDeviceMappings.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetBlockDeviceMappings.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMappings where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EC2SpotFleetEbs
+
+-- | Full data type definition for EC2SpotFleetBlockDeviceMappings. See
+-- | 'ec2SpotFleetBlockDeviceMappings' for a more convenient constructor.
+data EC2SpotFleetBlockDeviceMappings =
+  EC2SpotFleetBlockDeviceMappings
+  { _eC2SpotFleetBlockDeviceMappingsDeviceName :: Val Text
+  , _eC2SpotFleetBlockDeviceMappingsEbs :: Maybe EC2SpotFleetEbs
+  , _eC2SpotFleetBlockDeviceMappingsNoDevice :: Maybe (Val Bool')
+  , _eC2SpotFleetBlockDeviceMappingsVirtualName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SpotFleetBlockDeviceMappings where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+instance FromJSON EC2SpotFleetBlockDeviceMappings where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+-- | Constructor for 'EC2SpotFleetBlockDeviceMappings' containing required
+-- | fields as arguments.
+ec2SpotFleetBlockDeviceMappings
+  :: Val Text -- ^ 'ecsfbdmDeviceName'
+  -> EC2SpotFleetBlockDeviceMappings
+ec2SpotFleetBlockDeviceMappings deviceNamearg =
+  EC2SpotFleetBlockDeviceMappings
+  { _eC2SpotFleetBlockDeviceMappingsDeviceName = deviceNamearg
+  , _eC2SpotFleetBlockDeviceMappingsEbs = Nothing
+  , _eC2SpotFleetBlockDeviceMappingsNoDevice = Nothing
+  , _eC2SpotFleetBlockDeviceMappingsVirtualName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html#cfn-ec2-spotfleet-blockdevicemappings-devicename
+ecsfbdmDeviceName :: Lens' EC2SpotFleetBlockDeviceMappings (Val Text)
+ecsfbdmDeviceName = lens _eC2SpotFleetBlockDeviceMappingsDeviceName (\s a -> s { _eC2SpotFleetBlockDeviceMappingsDeviceName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html#cfn-ec2-spotfleet-blockdevicemappings-ebs
+ecsfbdmEbs :: Lens' EC2SpotFleetBlockDeviceMappings (Maybe EC2SpotFleetEbs)
+ecsfbdmEbs = lens _eC2SpotFleetBlockDeviceMappingsEbs (\s a -> s { _eC2SpotFleetBlockDeviceMappingsEbs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html#cfn-ec2-spotfleet-blockdevicemappings-nodevice
+ecsfbdmNoDevice :: Lens' EC2SpotFleetBlockDeviceMappings (Maybe (Val Bool'))
+ecsfbdmNoDevice = lens _eC2SpotFleetBlockDeviceMappingsNoDevice (\s a -> s { _eC2SpotFleetBlockDeviceMappingsNoDevice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html#cfn-ec2-spotfleet-blockdevicemappings-virtualname
+ecsfbdmVirtualName :: Lens' EC2SpotFleetBlockDeviceMappings (Maybe (Val Text))
+ecsfbdmVirtualName = lens _eC2SpotFleetBlockDeviceMappingsVirtualName (\s a -> s { _eC2SpotFleetBlockDeviceMappingsVirtualName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetEbs.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetEbs.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetEbs.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetEbs where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SpotFleetEbs. See 'ec2SpotFleetEbs' for
+-- | a more convenient constructor.
+data EC2SpotFleetEbs =
+  EC2SpotFleetEbs
+  { _eC2SpotFleetEbsDeleteOnTermination :: Maybe (Val Bool')
+  , _eC2SpotFleetEbsEncrypted :: Maybe (Val Bool')
+  , _eC2SpotFleetEbsIops :: Maybe (Val Integer')
+  , _eC2SpotFleetEbsSnapshotId :: Maybe (Val Text)
+  , _eC2SpotFleetEbsVolumeSize :: Maybe (Val Integer')
+  , _eC2SpotFleetEbsVolumeType :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SpotFleetEbs where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+
+instance FromJSON EC2SpotFleetEbs where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+
+-- | Constructor for 'EC2SpotFleetEbs' containing required fields as
+-- | arguments.
+ec2SpotFleetEbs
+  :: EC2SpotFleetEbs
+ec2SpotFleetEbs  =
+  EC2SpotFleetEbs
+  { _eC2SpotFleetEbsDeleteOnTermination = Nothing
+  , _eC2SpotFleetEbsEncrypted = Nothing
+  , _eC2SpotFleetEbsIops = Nothing
+  , _eC2SpotFleetEbsSnapshotId = Nothing
+  , _eC2SpotFleetEbsVolumeSize = Nothing
+  , _eC2SpotFleetEbsVolumeType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebs-deleteontermination
+ecsfeDeleteOnTermination :: Lens' EC2SpotFleetEbs (Maybe (Val Bool'))
+ecsfeDeleteOnTermination = lens _eC2SpotFleetEbsDeleteOnTermination (\s a -> s { _eC2SpotFleetEbsDeleteOnTermination = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebs-encrypted
+ecsfeEncrypted :: Lens' EC2SpotFleetEbs (Maybe (Val Bool'))
+ecsfeEncrypted = lens _eC2SpotFleetEbsEncrypted (\s a -> s { _eC2SpotFleetEbsEncrypted = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebs-iops
+ecsfeIops :: Lens' EC2SpotFleetEbs (Maybe (Val Integer'))
+ecsfeIops = lens _eC2SpotFleetEbsIops (\s a -> s { _eC2SpotFleetEbsIops = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebs-snapshotid
+ecsfeSnapshotId :: Lens' EC2SpotFleetEbs (Maybe (Val Text))
+ecsfeSnapshotId = lens _eC2SpotFleetEbsSnapshotId (\s a -> s { _eC2SpotFleetEbsSnapshotId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebs-volumesize
+ecsfeVolumeSize :: Lens' EC2SpotFleetEbs (Maybe (Val Integer'))
+ecsfeVolumeSize = lens _eC2SpotFleetEbsVolumeSize (\s a -> s { _eC2SpotFleetEbsVolumeSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebs-volumetype
+ecsfeVolumeType :: Lens' EC2SpotFleetEbs (Maybe (Val Text))
+ecsfeVolumeType = lens _eC2SpotFleetEbsVolumeType (\s a -> s { _eC2SpotFleetEbsVolumeType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetIamInstanceProfile.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetIamInstanceProfile.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetIamInstanceProfile.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-iaminstanceprofile.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetIamInstanceProfile where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SpotFleetIamInstanceProfile. See
+-- | 'ec2SpotFleetIamInstanceProfile' for a more convenient constructor.
+data EC2SpotFleetIamInstanceProfile =
+  EC2SpotFleetIamInstanceProfile
+  { _eC2SpotFleetIamInstanceProfileArn :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SpotFleetIamInstanceProfile where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+instance FromJSON EC2SpotFleetIamInstanceProfile where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+-- | Constructor for 'EC2SpotFleetIamInstanceProfile' containing required
+-- | fields as arguments.
+ec2SpotFleetIamInstanceProfile
+  :: EC2SpotFleetIamInstanceProfile
+ec2SpotFleetIamInstanceProfile  =
+  EC2SpotFleetIamInstanceProfile
+  { _eC2SpotFleetIamInstanceProfileArn = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-iaminstanceprofile.html#cfn-ec2-spotfleet-iaminstanceprofile-arn
+ecsfiipArn :: Lens' EC2SpotFleetIamInstanceProfile (Maybe (Val Text))
+ecsfiipArn = lens _eC2SpotFleetIamInstanceProfileArn (\s a -> s { _eC2SpotFleetIamInstanceProfileArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetInstanceIpv6Address.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetInstanceIpv6Address.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetInstanceIpv6Address.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instanceipv6address.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetInstanceIpv6Address where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SpotFleetInstanceIpv6Address. See
+-- | 'ec2SpotFleetInstanceIpv6Address' for a more convenient constructor.
+data EC2SpotFleetInstanceIpv6Address =
+  EC2SpotFleetInstanceIpv6Address
+  { _eC2SpotFleetInstanceIpv6AddressIpv6Address :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SpotFleetInstanceIpv6Address where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+instance FromJSON EC2SpotFleetInstanceIpv6Address where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+-- | Constructor for 'EC2SpotFleetInstanceIpv6Address' containing required
+-- | fields as arguments.
+ec2SpotFleetInstanceIpv6Address
+  :: Val Text -- ^ 'ecsfiiaIpv6Address'
+  -> EC2SpotFleetInstanceIpv6Address
+ec2SpotFleetInstanceIpv6Address ipv6Addressarg =
+  EC2SpotFleetInstanceIpv6Address
+  { _eC2SpotFleetInstanceIpv6AddressIpv6Address = ipv6Addressarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instanceipv6address.html#cfn-ec2-spotfleet-instanceipv6address-ipv6address
+ecsfiiaIpv6Address :: Lens' EC2SpotFleetInstanceIpv6Address (Val Text)
+ecsfiiaIpv6Address = lens _eC2SpotFleetInstanceIpv6AddressIpv6Address (\s a -> s { _eC2SpotFleetInstanceIpv6AddressIpv6Address = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchSpecifications.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchSpecifications.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchSpecifications.hs
@@ -0,0 +1,138 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetLaunchSpecifications where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMappings
+import Stratosphere.ResourceProperties.EC2SpotFleetIamInstanceProfile
+import Stratosphere.ResourceProperties.EC2SpotFleetMonitoring
+import Stratosphere.ResourceProperties.EC2SpotFleetNetworkInterfaces
+import Stratosphere.ResourceProperties.EC2SpotFleetPlacement
+import Stratosphere.ResourceProperties.EC2SpotFleetSecurityGroups
+
+-- | Full data type definition for EC2SpotFleetLaunchSpecifications. See
+-- | 'ec2SpotFleetLaunchSpecifications' for a more convenient constructor.
+data EC2SpotFleetLaunchSpecifications =
+  EC2SpotFleetLaunchSpecifications
+  { _eC2SpotFleetLaunchSpecificationsBlockDeviceMappings :: Maybe [EC2SpotFleetBlockDeviceMappings]
+  , _eC2SpotFleetLaunchSpecificationsEbsOptimized :: Maybe (Val Bool')
+  , _eC2SpotFleetLaunchSpecificationsIamInstanceProfile :: Maybe EC2SpotFleetIamInstanceProfile
+  , _eC2SpotFleetLaunchSpecificationsImageId :: Val Text
+  , _eC2SpotFleetLaunchSpecificationsInstanceType :: Val Text
+  , _eC2SpotFleetLaunchSpecificationsKernelId :: Maybe (Val Text)
+  , _eC2SpotFleetLaunchSpecificationsKeyName :: Maybe (Val Text)
+  , _eC2SpotFleetLaunchSpecificationsMonitoring :: Maybe EC2SpotFleetMonitoring
+  , _eC2SpotFleetLaunchSpecificationsNetworkInterfaces :: Maybe [EC2SpotFleetNetworkInterfaces]
+  , _eC2SpotFleetLaunchSpecificationsPlacement :: Maybe EC2SpotFleetPlacement
+  , _eC2SpotFleetLaunchSpecificationsRamdiskId :: Maybe (Val Text)
+  , _eC2SpotFleetLaunchSpecificationsSecurityGroups :: Maybe [EC2SpotFleetSecurityGroups]
+  , _eC2SpotFleetLaunchSpecificationsSpotPrice :: Maybe (Val Text)
+  , _eC2SpotFleetLaunchSpecificationsSubnetId :: Maybe (Val Text)
+  , _eC2SpotFleetLaunchSpecificationsUserData :: Maybe (Val Text)
+  , _eC2SpotFleetLaunchSpecificationsWeightedCapacity :: Maybe (Val Double')
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SpotFleetLaunchSpecifications where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+instance FromJSON EC2SpotFleetLaunchSpecifications where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+-- | Constructor for 'EC2SpotFleetLaunchSpecifications' containing required
+-- | fields as arguments.
+ec2SpotFleetLaunchSpecifications
+  :: Val Text -- ^ 'ecsflsImageId'
+  -> Val Text -- ^ 'ecsflsInstanceType'
+  -> EC2SpotFleetLaunchSpecifications
+ec2SpotFleetLaunchSpecifications imageIdarg instanceTypearg =
+  EC2SpotFleetLaunchSpecifications
+  { _eC2SpotFleetLaunchSpecificationsBlockDeviceMappings = Nothing
+  , _eC2SpotFleetLaunchSpecificationsEbsOptimized = Nothing
+  , _eC2SpotFleetLaunchSpecificationsIamInstanceProfile = Nothing
+  , _eC2SpotFleetLaunchSpecificationsImageId = imageIdarg
+  , _eC2SpotFleetLaunchSpecificationsInstanceType = instanceTypearg
+  , _eC2SpotFleetLaunchSpecificationsKernelId = Nothing
+  , _eC2SpotFleetLaunchSpecificationsKeyName = Nothing
+  , _eC2SpotFleetLaunchSpecificationsMonitoring = Nothing
+  , _eC2SpotFleetLaunchSpecificationsNetworkInterfaces = Nothing
+  , _eC2SpotFleetLaunchSpecificationsPlacement = Nothing
+  , _eC2SpotFleetLaunchSpecificationsRamdiskId = Nothing
+  , _eC2SpotFleetLaunchSpecificationsSecurityGroups = Nothing
+  , _eC2SpotFleetLaunchSpecificationsSpotPrice = Nothing
+  , _eC2SpotFleetLaunchSpecificationsSubnetId = Nothing
+  , _eC2SpotFleetLaunchSpecificationsUserData = Nothing
+  , _eC2SpotFleetLaunchSpecificationsWeightedCapacity = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-blockdevicemappings
+ecsflsBlockDeviceMappings :: Lens' EC2SpotFleetLaunchSpecifications (Maybe [EC2SpotFleetBlockDeviceMappings])
+ecsflsBlockDeviceMappings = lens _eC2SpotFleetLaunchSpecificationsBlockDeviceMappings (\s a -> s { _eC2SpotFleetLaunchSpecificationsBlockDeviceMappings = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-ebsoptimized
+ecsflsEbsOptimized :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Bool'))
+ecsflsEbsOptimized = lens _eC2SpotFleetLaunchSpecificationsEbsOptimized (\s a -> s { _eC2SpotFleetLaunchSpecificationsEbsOptimized = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-iaminstanceprofile
+ecsflsIamInstanceProfile :: Lens' EC2SpotFleetLaunchSpecifications (Maybe EC2SpotFleetIamInstanceProfile)
+ecsflsIamInstanceProfile = lens _eC2SpotFleetLaunchSpecificationsIamInstanceProfile (\s a -> s { _eC2SpotFleetLaunchSpecificationsIamInstanceProfile = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-imageid
+ecsflsImageId :: Lens' EC2SpotFleetLaunchSpecifications (Val Text)
+ecsflsImageId = lens _eC2SpotFleetLaunchSpecificationsImageId (\s a -> s { _eC2SpotFleetLaunchSpecificationsImageId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-instancetype
+ecsflsInstanceType :: Lens' EC2SpotFleetLaunchSpecifications (Val Text)
+ecsflsInstanceType = lens _eC2SpotFleetLaunchSpecificationsInstanceType (\s a -> s { _eC2SpotFleetLaunchSpecificationsInstanceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-kernelid
+ecsflsKernelId :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
+ecsflsKernelId = lens _eC2SpotFleetLaunchSpecificationsKernelId (\s a -> s { _eC2SpotFleetLaunchSpecificationsKernelId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-keyname
+ecsflsKeyName :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
+ecsflsKeyName = lens _eC2SpotFleetLaunchSpecificationsKeyName (\s a -> s { _eC2SpotFleetLaunchSpecificationsKeyName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-monitoring
+ecsflsMonitoring :: Lens' EC2SpotFleetLaunchSpecifications (Maybe EC2SpotFleetMonitoring)
+ecsflsMonitoring = lens _eC2SpotFleetLaunchSpecificationsMonitoring (\s a -> s { _eC2SpotFleetLaunchSpecificationsMonitoring = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-networkinterfaces
+ecsflsNetworkInterfaces :: Lens' EC2SpotFleetLaunchSpecifications (Maybe [EC2SpotFleetNetworkInterfaces])
+ecsflsNetworkInterfaces = lens _eC2SpotFleetLaunchSpecificationsNetworkInterfaces (\s a -> s { _eC2SpotFleetLaunchSpecificationsNetworkInterfaces = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-placement
+ecsflsPlacement :: Lens' EC2SpotFleetLaunchSpecifications (Maybe EC2SpotFleetPlacement)
+ecsflsPlacement = lens _eC2SpotFleetLaunchSpecificationsPlacement (\s a -> s { _eC2SpotFleetLaunchSpecificationsPlacement = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-ramdiskid
+ecsflsRamdiskId :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
+ecsflsRamdiskId = lens _eC2SpotFleetLaunchSpecificationsRamdiskId (\s a -> s { _eC2SpotFleetLaunchSpecificationsRamdiskId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-securitygroups
+ecsflsSecurityGroups :: Lens' EC2SpotFleetLaunchSpecifications (Maybe [EC2SpotFleetSecurityGroups])
+ecsflsSecurityGroups = lens _eC2SpotFleetLaunchSpecificationsSecurityGroups (\s a -> s { _eC2SpotFleetLaunchSpecificationsSecurityGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-spotprice
+ecsflsSpotPrice :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
+ecsflsSpotPrice = lens _eC2SpotFleetLaunchSpecificationsSpotPrice (\s a -> s { _eC2SpotFleetLaunchSpecificationsSpotPrice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-subnetid
+ecsflsSubnetId :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
+ecsflsSubnetId = lens _eC2SpotFleetLaunchSpecificationsSubnetId (\s a -> s { _eC2SpotFleetLaunchSpecificationsSubnetId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-userdata
+ecsflsUserData :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
+ecsflsUserData = lens _eC2SpotFleetLaunchSpecificationsUserData (\s a -> s { _eC2SpotFleetLaunchSpecificationsUserData = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-weightedcapacity
+ecsflsWeightedCapacity :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Double'))
+ecsflsWeightedCapacity = lens _eC2SpotFleetLaunchSpecificationsWeightedCapacity (\s a -> s { _eC2SpotFleetLaunchSpecificationsWeightedCapacity = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetMonitoring.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetMonitoring.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetMonitoring.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-monitoring.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetMonitoring where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SpotFleetMonitoring. See
+-- | 'ec2SpotFleetMonitoring' for a more convenient constructor.
+data EC2SpotFleetMonitoring =
+  EC2SpotFleetMonitoring
+  { _eC2SpotFleetMonitoringEnabled :: Maybe (Val Bool')
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SpotFleetMonitoring where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+instance FromJSON EC2SpotFleetMonitoring where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+-- | Constructor for 'EC2SpotFleetMonitoring' containing required fields as
+-- | arguments.
+ec2SpotFleetMonitoring
+  :: EC2SpotFleetMonitoring
+ec2SpotFleetMonitoring  =
+  EC2SpotFleetMonitoring
+  { _eC2SpotFleetMonitoringEnabled = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-monitoring.html#cfn-ec2-spotfleet-monitoring-enabled
+ecsfmEnabled :: Lens' EC2SpotFleetMonitoring (Maybe (Val Bool'))
+ecsfmEnabled = lens _eC2SpotFleetMonitoringEnabled (\s a -> s { _eC2SpotFleetMonitoringEnabled = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetNetworkInterfaces.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetNetworkInterfaces.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetNetworkInterfaces.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetNetworkInterfaces where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EC2SpotFleetInstanceIpv6Address
+import Stratosphere.ResourceProperties.EC2SpotFleetPrivateIpAddresses
+
+-- | Full data type definition for EC2SpotFleetNetworkInterfaces. See
+-- | 'ec2SpotFleetNetworkInterfaces' for a more convenient constructor.
+data EC2SpotFleetNetworkInterfaces =
+  EC2SpotFleetNetworkInterfaces
+  { _eC2SpotFleetNetworkInterfacesAssociatePublicIpAddress :: Maybe (Val Bool')
+  , _eC2SpotFleetNetworkInterfacesDeleteOnTermination :: Maybe (Val Bool')
+  , _eC2SpotFleetNetworkInterfacesDescription :: Maybe (Val Text)
+  , _eC2SpotFleetNetworkInterfacesDeviceIndex :: Val Integer'
+  , _eC2SpotFleetNetworkInterfacesGroups :: Maybe [Val Text]
+  , _eC2SpotFleetNetworkInterfacesIpv6AddressCount :: Maybe (Val Integer')
+  , _eC2SpotFleetNetworkInterfacesIpv6Addresses :: Maybe EC2SpotFleetInstanceIpv6Address
+  , _eC2SpotFleetNetworkInterfacesNetworkInterfaceId :: Maybe (Val Text)
+  , _eC2SpotFleetNetworkInterfacesPrivateIpAddresses :: Maybe [EC2SpotFleetPrivateIpAddresses]
+  , _eC2SpotFleetNetworkInterfacesSecondaryPrivateIpAddressCount :: Maybe (Val Integer')
+  , _eC2SpotFleetNetworkInterfacesSubnetId :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SpotFleetNetworkInterfaces where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+instance FromJSON EC2SpotFleetNetworkInterfaces where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+-- | Constructor for 'EC2SpotFleetNetworkInterfaces' containing required
+-- | fields as arguments.
+ec2SpotFleetNetworkInterfaces
+  :: Val Integer' -- ^ 'ecsfniDeviceIndex'
+  -> EC2SpotFleetNetworkInterfaces
+ec2SpotFleetNetworkInterfaces deviceIndexarg =
+  EC2SpotFleetNetworkInterfaces
+  { _eC2SpotFleetNetworkInterfacesAssociatePublicIpAddress = Nothing
+  , _eC2SpotFleetNetworkInterfacesDeleteOnTermination = Nothing
+  , _eC2SpotFleetNetworkInterfacesDescription = Nothing
+  , _eC2SpotFleetNetworkInterfacesDeviceIndex = deviceIndexarg
+  , _eC2SpotFleetNetworkInterfacesGroups = Nothing
+  , _eC2SpotFleetNetworkInterfacesIpv6AddressCount = Nothing
+  , _eC2SpotFleetNetworkInterfacesIpv6Addresses = Nothing
+  , _eC2SpotFleetNetworkInterfacesNetworkInterfaceId = Nothing
+  , _eC2SpotFleetNetworkInterfacesPrivateIpAddresses = Nothing
+  , _eC2SpotFleetNetworkInterfacesSecondaryPrivateIpAddressCount = Nothing
+  , _eC2SpotFleetNetworkInterfacesSubnetId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-associatepublicipaddress
+ecsfniAssociatePublicIpAddress :: Lens' EC2SpotFleetNetworkInterfaces (Maybe (Val Bool'))
+ecsfniAssociatePublicIpAddress = lens _eC2SpotFleetNetworkInterfacesAssociatePublicIpAddress (\s a -> s { _eC2SpotFleetNetworkInterfacesAssociatePublicIpAddress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-deleteontermination
+ecsfniDeleteOnTermination :: Lens' EC2SpotFleetNetworkInterfaces (Maybe (Val Bool'))
+ecsfniDeleteOnTermination = lens _eC2SpotFleetNetworkInterfacesDeleteOnTermination (\s a -> s { _eC2SpotFleetNetworkInterfacesDeleteOnTermination = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-description
+ecsfniDescription :: Lens' EC2SpotFleetNetworkInterfaces (Maybe (Val Text))
+ecsfniDescription = lens _eC2SpotFleetNetworkInterfacesDescription (\s a -> s { _eC2SpotFleetNetworkInterfacesDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-deviceindex
+ecsfniDeviceIndex :: Lens' EC2SpotFleetNetworkInterfaces (Val Integer')
+ecsfniDeviceIndex = lens _eC2SpotFleetNetworkInterfacesDeviceIndex (\s a -> s { _eC2SpotFleetNetworkInterfacesDeviceIndex = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-groups
+ecsfniGroups :: Lens' EC2SpotFleetNetworkInterfaces (Maybe [Val Text])
+ecsfniGroups = lens _eC2SpotFleetNetworkInterfacesGroups (\s a -> s { _eC2SpotFleetNetworkInterfacesGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-ipv6addresscount
+ecsfniIpv6AddressCount :: Lens' EC2SpotFleetNetworkInterfaces (Maybe (Val Integer'))
+ecsfniIpv6AddressCount = lens _eC2SpotFleetNetworkInterfacesIpv6AddressCount (\s a -> s { _eC2SpotFleetNetworkInterfacesIpv6AddressCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-ipv6addresses
+ecsfniIpv6Addresses :: Lens' EC2SpotFleetNetworkInterfaces (Maybe EC2SpotFleetInstanceIpv6Address)
+ecsfniIpv6Addresses = lens _eC2SpotFleetNetworkInterfacesIpv6Addresses (\s a -> s { _eC2SpotFleetNetworkInterfacesIpv6Addresses = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-networkinterfaceid
+ecsfniNetworkInterfaceId :: Lens' EC2SpotFleetNetworkInterfaces (Maybe (Val Text))
+ecsfniNetworkInterfaceId = lens _eC2SpotFleetNetworkInterfacesNetworkInterfaceId (\s a -> s { _eC2SpotFleetNetworkInterfacesNetworkInterfaceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-privateipaddresses
+ecsfniPrivateIpAddresses :: Lens' EC2SpotFleetNetworkInterfaces (Maybe [EC2SpotFleetPrivateIpAddresses])
+ecsfniPrivateIpAddresses = lens _eC2SpotFleetNetworkInterfacesPrivateIpAddresses (\s a -> s { _eC2SpotFleetNetworkInterfacesPrivateIpAddresses = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-secondaryprivateipaddresscount
+ecsfniSecondaryPrivateIpAddressCount :: Lens' EC2SpotFleetNetworkInterfaces (Maybe (Val Integer'))
+ecsfniSecondaryPrivateIpAddressCount = lens _eC2SpotFleetNetworkInterfacesSecondaryPrivateIpAddressCount (\s a -> s { _eC2SpotFleetNetworkInterfacesSecondaryPrivateIpAddressCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-subnetid
+ecsfniSubnetId :: Lens' EC2SpotFleetNetworkInterfaces (Maybe (Val Text))
+ecsfniSubnetId = lens _eC2SpotFleetNetworkInterfacesSubnetId (\s a -> s { _eC2SpotFleetNetworkInterfacesSubnetId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPlacement.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPlacement.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPlacement.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-placement.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetPlacement where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SpotFleetPlacement. See
+-- | 'ec2SpotFleetPlacement' for a more convenient constructor.
+data EC2SpotFleetPlacement =
+  EC2SpotFleetPlacement
+  { _eC2SpotFleetPlacementAvailabilityZone :: Maybe (Val Text)
+  , _eC2SpotFleetPlacementGroupName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SpotFleetPlacement where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+instance FromJSON EC2SpotFleetPlacement where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+-- | Constructor for 'EC2SpotFleetPlacement' containing required fields as
+-- | arguments.
+ec2SpotFleetPlacement
+  :: EC2SpotFleetPlacement
+ec2SpotFleetPlacement  =
+  EC2SpotFleetPlacement
+  { _eC2SpotFleetPlacementAvailabilityZone = Nothing
+  , _eC2SpotFleetPlacementGroupName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-placement.html#cfn-ec2-spotfleet-placement-availabilityzone
+ecsfpAvailabilityZone :: Lens' EC2SpotFleetPlacement (Maybe (Val Text))
+ecsfpAvailabilityZone = lens _eC2SpotFleetPlacementAvailabilityZone (\s a -> s { _eC2SpotFleetPlacementAvailabilityZone = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-placement.html#cfn-ec2-spotfleet-placement-groupname
+ecsfpGroupName :: Lens' EC2SpotFleetPlacement (Maybe (Val Text))
+ecsfpGroupName = lens _eC2SpotFleetPlacementGroupName (\s a -> s { _eC2SpotFleetPlacementGroupName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPrivateIpAddresses.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPrivateIpAddresses.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPrivateIpAddresses.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces-privateipaddresses.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetPrivateIpAddresses where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SpotFleetPrivateIpAddresses. See
+-- | 'ec2SpotFleetPrivateIpAddresses' for a more convenient constructor.
+data EC2SpotFleetPrivateIpAddresses =
+  EC2SpotFleetPrivateIpAddresses
+  { _eC2SpotFleetPrivateIpAddressesPrimary :: Maybe (Val Bool')
+  , _eC2SpotFleetPrivateIpAddressesPrivateIpAddress :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SpotFleetPrivateIpAddresses where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+instance FromJSON EC2SpotFleetPrivateIpAddresses where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+-- | Constructor for 'EC2SpotFleetPrivateIpAddresses' containing required
+-- | fields as arguments.
+ec2SpotFleetPrivateIpAddresses
+  :: Val Text -- ^ 'ecsfpiaPrivateIpAddress'
+  -> EC2SpotFleetPrivateIpAddresses
+ec2SpotFleetPrivateIpAddresses privateIpAddressarg =
+  EC2SpotFleetPrivateIpAddresses
+  { _eC2SpotFleetPrivateIpAddressesPrimary = Nothing
+  , _eC2SpotFleetPrivateIpAddressesPrivateIpAddress = privateIpAddressarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces-privateipaddresses.html#cfn-ec2-spotfleet-privateipaddresses-primary
+ecsfpiaPrimary :: Lens' EC2SpotFleetPrivateIpAddresses (Maybe (Val Bool'))
+ecsfpiaPrimary = lens _eC2SpotFleetPrivateIpAddressesPrimary (\s a -> s { _eC2SpotFleetPrivateIpAddressesPrimary = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces-privateipaddresses.html#cfn-ec2-spotfleet-privateipaddresses-privateipaddress
+ecsfpiaPrivateIpAddress :: Lens' EC2SpotFleetPrivateIpAddresses (Val Text)
+ecsfpiaPrivateIpAddress = lens _eC2SpotFleetPrivateIpAddressesPrivateIpAddress (\s a -> s { _eC2SpotFleetPrivateIpAddressesPrivateIpAddress = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSecurityGroups.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSecurityGroups.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSecurityGroups.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-securitygroups.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetSecurityGroups where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SpotFleetSecurityGroups. See
+-- | 'ec2SpotFleetSecurityGroups' for a more convenient constructor.
+data EC2SpotFleetSecurityGroups =
+  EC2SpotFleetSecurityGroups
+  { _eC2SpotFleetSecurityGroupsGroupId :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SpotFleetSecurityGroups where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON EC2SpotFleetSecurityGroups where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'EC2SpotFleetSecurityGroups' containing required fields
+-- | as arguments.
+ec2SpotFleetSecurityGroups
+  :: EC2SpotFleetSecurityGroups
+ec2SpotFleetSecurityGroups  =
+  EC2SpotFleetSecurityGroups
+  { _eC2SpotFleetSecurityGroupsGroupId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-securitygroups.html#cfn-ec2-spotfleet-securitygroups-groupid
+ecsfsgGroupId :: Lens' EC2SpotFleetSecurityGroups (Maybe (Val Text))
+ecsfsgGroupId = lens _eC2SpotFleetSecurityGroupsGroupId (\s a -> s { _eC2SpotFleetSecurityGroupsGroupId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetRequestConfigData.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetRequestConfigData.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetRequestConfigData.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetRequestConfigData where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EC2SpotFleetLaunchSpecifications
+
+-- | Full data type definition for EC2SpotFleetSpotFleetRequestConfigData. See
+-- | 'ec2SpotFleetSpotFleetRequestConfigData' for a more convenient
+-- | constructor.
+data EC2SpotFleetSpotFleetRequestConfigData =
+  EC2SpotFleetSpotFleetRequestConfigData
+  { _eC2SpotFleetSpotFleetRequestConfigDataAllocationStrategy :: Maybe (Val Text)
+  , _eC2SpotFleetSpotFleetRequestConfigDataExcessCapacityTerminationPolicy :: Maybe (Val Text)
+  , _eC2SpotFleetSpotFleetRequestConfigDataIamFleetRole :: Val Text
+  , _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications :: [EC2SpotFleetLaunchSpecifications]
+  , _eC2SpotFleetSpotFleetRequestConfigDataSpotPrice :: Val Text
+  , _eC2SpotFleetSpotFleetRequestConfigDataTargetCapacity :: Val Integer'
+  , _eC2SpotFleetSpotFleetRequestConfigDataTerminateInstancesWithExpiration :: Maybe (Val Bool')
+  , _eC2SpotFleetSpotFleetRequestConfigDataValidFrom :: Maybe (Val Text)
+  , _eC2SpotFleetSpotFleetRequestConfigDataValidUntil :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SpotFleetSpotFleetRequestConfigData where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+instance FromJSON EC2SpotFleetSpotFleetRequestConfigData where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+-- | Constructor for 'EC2SpotFleetSpotFleetRequestConfigData' containing
+-- | required fields as arguments.
+ec2SpotFleetSpotFleetRequestConfigData
+  :: Val Text -- ^ 'ecsfsfrcdIamFleetRole'
+  -> [EC2SpotFleetLaunchSpecifications] -- ^ 'ecsfsfrcdLaunchSpecifications'
+  -> Val Text -- ^ 'ecsfsfrcdSpotPrice'
+  -> Val Integer' -- ^ 'ecsfsfrcdTargetCapacity'
+  -> EC2SpotFleetSpotFleetRequestConfigData
+ec2SpotFleetSpotFleetRequestConfigData iamFleetRolearg launchSpecificationsarg spotPricearg targetCapacityarg =
+  EC2SpotFleetSpotFleetRequestConfigData
+  { _eC2SpotFleetSpotFleetRequestConfigDataAllocationStrategy = Nothing
+  , _eC2SpotFleetSpotFleetRequestConfigDataExcessCapacityTerminationPolicy = Nothing
+  , _eC2SpotFleetSpotFleetRequestConfigDataIamFleetRole = iamFleetRolearg
+  , _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications = launchSpecificationsarg
+  , _eC2SpotFleetSpotFleetRequestConfigDataSpotPrice = spotPricearg
+  , _eC2SpotFleetSpotFleetRequestConfigDataTargetCapacity = targetCapacityarg
+  , _eC2SpotFleetSpotFleetRequestConfigDataTerminateInstancesWithExpiration = Nothing
+  , _eC2SpotFleetSpotFleetRequestConfigDataValidFrom = Nothing
+  , _eC2SpotFleetSpotFleetRequestConfigDataValidUntil = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-allocationstrategy
+ecsfsfrcdAllocationStrategy :: Lens' EC2SpotFleetSpotFleetRequestConfigData (Maybe (Val Text))
+ecsfsfrcdAllocationStrategy = lens _eC2SpotFleetSpotFleetRequestConfigDataAllocationStrategy (\s a -> s { _eC2SpotFleetSpotFleetRequestConfigDataAllocationStrategy = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-excesscapacityterminationpolicy
+ecsfsfrcdExcessCapacityTerminationPolicy :: Lens' EC2SpotFleetSpotFleetRequestConfigData (Maybe (Val Text))
+ecsfsfrcdExcessCapacityTerminationPolicy = lens _eC2SpotFleetSpotFleetRequestConfigDataExcessCapacityTerminationPolicy (\s a -> s { _eC2SpotFleetSpotFleetRequestConfigDataExcessCapacityTerminationPolicy = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-iamfleetrole
+ecsfsfrcdIamFleetRole :: Lens' EC2SpotFleetSpotFleetRequestConfigData (Val Text)
+ecsfsfrcdIamFleetRole = lens _eC2SpotFleetSpotFleetRequestConfigDataIamFleetRole (\s a -> s { _eC2SpotFleetSpotFleetRequestConfigDataIamFleetRole = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications
+ecsfsfrcdLaunchSpecifications :: Lens' EC2SpotFleetSpotFleetRequestConfigData [EC2SpotFleetLaunchSpecifications]
+ecsfsfrcdLaunchSpecifications = lens _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications (\s a -> s { _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-spotprice
+ecsfsfrcdSpotPrice :: Lens' EC2SpotFleetSpotFleetRequestConfigData (Val Text)
+ecsfsfrcdSpotPrice = lens _eC2SpotFleetSpotFleetRequestConfigDataSpotPrice (\s a -> s { _eC2SpotFleetSpotFleetRequestConfigDataSpotPrice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-targetcapacity
+ecsfsfrcdTargetCapacity :: Lens' EC2SpotFleetSpotFleetRequestConfigData (Val Integer')
+ecsfsfrcdTargetCapacity = lens _eC2SpotFleetSpotFleetRequestConfigDataTargetCapacity (\s a -> s { _eC2SpotFleetSpotFleetRequestConfigDataTargetCapacity = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-terminateinstanceswithexpiration
+ecsfsfrcdTerminateInstancesWithExpiration :: Lens' EC2SpotFleetSpotFleetRequestConfigData (Maybe (Val Bool'))
+ecsfsfrcdTerminateInstancesWithExpiration = lens _eC2SpotFleetSpotFleetRequestConfigDataTerminateInstancesWithExpiration (\s a -> s { _eC2SpotFleetSpotFleetRequestConfigDataTerminateInstancesWithExpiration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-validfrom
+ecsfsfrcdValidFrom :: Lens' EC2SpotFleetSpotFleetRequestConfigData (Maybe (Val Text))
+ecsfsfrcdValidFrom = lens _eC2SpotFleetSpotFleetRequestConfigDataValidFrom (\s a -> s { _eC2SpotFleetSpotFleetRequestConfigDataValidFrom = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-validuntil
+ecsfsfrcdValidUntil :: Lens' EC2SpotFleetSpotFleetRequestConfigData (Maybe (Val Text))
+ecsfsfrcdValidUntil = lens _eC2SpotFleetSpotFleetRequestConfigDataValidUntil (\s a -> s { _eC2SpotFleetSpotFleetRequestConfigDataValidUntil = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SsmAssociationParameters.hs b/library-gen/Stratosphere/ResourceProperties/EC2SsmAssociationParameters.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/EC2SsmAssociationParameters.hs
+++ /dev/null
@@ -1,51 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | AssociationParameters is a property of the Amazon EC2 Instance
--- SsmAssociations property that specifies input parameter values for an
--- Amazon EC2 Simple Systems Manager (SSM) document.
-
-module Stratosphere.ResourceProperties.EC2SsmAssociationParameters where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for EC2SsmAssociationParameters. See
--- 'ec2SsmAssociationParameters' for a more convenient constructor.
-data EC2SsmAssociationParameters =
-  EC2SsmAssociationParameters
-  { _eC2SsmAssociationParametersKey :: Val Text
-  , _eC2SsmAssociationParametersValue :: [Val Text]
-  } deriving (Show, Generic)
-
-instance ToJSON EC2SsmAssociationParameters where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
-
-instance FromJSON EC2SsmAssociationParameters where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
-
--- | Constructor for 'EC2SsmAssociationParameters' containing required fields
--- as arguments.
-ec2SsmAssociationParameters
-  :: Val Text -- ^ 'ecsapKey'
-  -> [Val Text] -- ^ 'ecsapValue'
-  -> EC2SsmAssociationParameters
-ec2SsmAssociationParameters keyarg valuearg =
-  EC2SsmAssociationParameters
-  { _eC2SsmAssociationParametersKey = keyarg
-  , _eC2SsmAssociationParametersValue = valuearg
-  }
-
--- | The name of an input parameter that is in the associated SSM document.
-ecsapKey :: Lens' EC2SsmAssociationParameters (Val Text)
-ecsapKey = lens _eC2SsmAssociationParametersKey (\s a -> s { _eC2SsmAssociationParametersKey = a })
-
--- | The value of an input parameter.
-ecsapValue :: Lens' EC2SsmAssociationParameters [Val Text]
-ecsapValue = lens _eC2SsmAssociationParametersValue (\s a -> s { _eC2SsmAssociationParametersValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SsmAssociations.hs b/library-gen/Stratosphere/ResourceProperties/EC2SsmAssociations.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/EC2SsmAssociations.hs
+++ /dev/null
@@ -1,50 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | SsmAssociations is a property of the AWS::EC2::Instance resource that
--- specifies the Amazon EC2 Simple Systems Manager (SSM) document and
--- parameter values to associate with an instance.
-
-module Stratosphere.ResourceProperties.EC2SsmAssociations where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.EC2SsmAssociationParameters
-
--- | Full data type definition for EC2SsmAssociations. See
--- 'ec2SsmAssociations' for a more convenient constructor.
-data EC2SsmAssociations =
-  EC2SsmAssociations
-  { _eC2SsmAssociationsAssociationParameters :: Maybe [EC2SsmAssociationParameters]
-  , _eC2SsmAssociationsDocumentName :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON EC2SsmAssociations where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
-
-instance FromJSON EC2SsmAssociations where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
-
--- | Constructor for 'EC2SsmAssociations' containing required fields as
--- arguments.
-ec2SsmAssociations
-  :: Val Text -- ^ 'ecsaDocumentName'
-  -> EC2SsmAssociations
-ec2SsmAssociations documentNamearg =
-  EC2SsmAssociations
-  { _eC2SsmAssociationsAssociationParameters = Nothing
-  , _eC2SsmAssociationsDocumentName = documentNamearg
-  }
-
--- | The input parameter values to use with the associated SSM document.
-ecsaAssociationParameters :: Lens' EC2SsmAssociations (Maybe [EC2SsmAssociationParameters])
-ecsaAssociationParameters = lens _eC2SsmAssociationsAssociationParameters (\s a -> s { _eC2SsmAssociationsAssociationParameters = a })
-
--- | The name of an SSM document to associate with the instance.
-ecsaDocumentName :: Lens' EC2SsmAssociations (Val Text)
-ecsaDocumentName = lens _eC2SsmAssociationsDocumentName (\s a -> s { _eC2SsmAssociationsDocumentName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSServiceDeploymentConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/ECSServiceDeploymentConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ECSServiceDeploymentConfiguration.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentconfiguration.html
+
+module Stratosphere.ResourceProperties.ECSServiceDeploymentConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ECSServiceDeploymentConfiguration. See
+-- | 'ecsServiceDeploymentConfiguration' for a more convenient constructor.
+data ECSServiceDeploymentConfiguration =
+  ECSServiceDeploymentConfiguration
+  { _eCSServiceDeploymentConfigurationMaximumPercent :: Maybe (Val Integer')
+  , _eCSServiceDeploymentConfigurationMinimumHealthyPercent :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON ECSServiceDeploymentConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON ECSServiceDeploymentConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'ECSServiceDeploymentConfiguration' containing required
+-- | fields as arguments.
+ecsServiceDeploymentConfiguration
+  :: ECSServiceDeploymentConfiguration
+ecsServiceDeploymentConfiguration  =
+  ECSServiceDeploymentConfiguration
+  { _eCSServiceDeploymentConfigurationMaximumPercent = Nothing
+  , _eCSServiceDeploymentConfigurationMinimumHealthyPercent = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentconfiguration.html#cfn-ecs-service-deploymentconfiguration-maximumpercent
+ecssdcMaximumPercent :: Lens' ECSServiceDeploymentConfiguration (Maybe (Val Integer'))
+ecssdcMaximumPercent = lens _eCSServiceDeploymentConfigurationMaximumPercent (\s a -> s { _eCSServiceDeploymentConfigurationMaximumPercent = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentconfiguration.html#cfn-ecs-service-deploymentconfiguration-minimumhealthypercent
+ecssdcMinimumHealthyPercent :: Lens' ECSServiceDeploymentConfiguration (Maybe (Val Integer'))
+ecssdcMinimumHealthyPercent = lens _eCSServiceDeploymentConfigurationMinimumHealthyPercent (\s a -> s { _eCSServiceDeploymentConfigurationMinimumHealthyPercent = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSServiceLoadBalancer.hs b/library-gen/Stratosphere/ResourceProperties/ECSServiceLoadBalancer.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ECSServiceLoadBalancer.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-loadbalancers.html
+
+module Stratosphere.ResourceProperties.ECSServiceLoadBalancer where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ECSServiceLoadBalancer. See
+-- | 'ecsServiceLoadBalancer' for a more convenient constructor.
+data ECSServiceLoadBalancer =
+  ECSServiceLoadBalancer
+  { _eCSServiceLoadBalancerContainerName :: Maybe (Val Text)
+  , _eCSServiceLoadBalancerContainerPort :: Val Integer'
+  , _eCSServiceLoadBalancerLoadBalancerName :: Maybe (Val Text)
+  , _eCSServiceLoadBalancerTargetGroupArn :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ECSServiceLoadBalancer where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+instance FromJSON ECSServiceLoadBalancer where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+-- | Constructor for 'ECSServiceLoadBalancer' containing required fields as
+-- | arguments.
+ecsServiceLoadBalancer
+  :: Val Integer' -- ^ 'ecsslbContainerPort'
+  -> ECSServiceLoadBalancer
+ecsServiceLoadBalancer containerPortarg =
+  ECSServiceLoadBalancer
+  { _eCSServiceLoadBalancerContainerName = Nothing
+  , _eCSServiceLoadBalancerContainerPort = containerPortarg
+  , _eCSServiceLoadBalancerLoadBalancerName = Nothing
+  , _eCSServiceLoadBalancerTargetGroupArn = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-loadbalancers.html#cfn-ecs-service-loadbalancers-containername
+ecsslbContainerName :: Lens' ECSServiceLoadBalancer (Maybe (Val Text))
+ecsslbContainerName = lens _eCSServiceLoadBalancerContainerName (\s a -> s { _eCSServiceLoadBalancerContainerName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-loadbalancers.html#cfn-ecs-service-loadbalancers-containerport
+ecsslbContainerPort :: Lens' ECSServiceLoadBalancer (Val Integer')
+ecsslbContainerPort = lens _eCSServiceLoadBalancerContainerPort (\s a -> s { _eCSServiceLoadBalancerContainerPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-loadbalancers.html#cfn-ecs-service-loadbalancers-loadbalancername
+ecsslbLoadBalancerName :: Lens' ECSServiceLoadBalancer (Maybe (Val Text))
+ecsslbLoadBalancerName = lens _eCSServiceLoadBalancerLoadBalancerName (\s a -> s { _eCSServiceLoadBalancerLoadBalancerName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-loadbalancers.html#cfn-ecs-service-loadbalancers-targetgrouparn
+ecsslbTargetGroupArn :: Lens' ECSServiceLoadBalancer (Maybe (Val Text))
+ecsslbTargetGroupArn = lens _eCSServiceLoadBalancerTargetGroupArn (\s a -> s { _eCSServiceLoadBalancerTargetGroupArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionContainerDefinition.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionContainerDefinition.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionContainerDefinition.hs
@@ -0,0 +1,197 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html
+
+module Stratosphere.ResourceProperties.ECSTaskDefinitionContainerDefinition where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ECSTaskDefinitionKeyValuePair
+import Stratosphere.ResourceProperties.ECSTaskDefinitionHostEntry
+import Stratosphere.ResourceProperties.ECSTaskDefinitionLogConfiguration
+import Stratosphere.ResourceProperties.ECSTaskDefinitionMountPoint
+import Stratosphere.ResourceProperties.ECSTaskDefinitionPortMapping
+import Stratosphere.ResourceProperties.ECSTaskDefinitionUlimit
+import Stratosphere.ResourceProperties.ECSTaskDefinitionVolumeFrom
+
+-- | Full data type definition for ECSTaskDefinitionContainerDefinition. See
+-- | 'ecsTaskDefinitionContainerDefinition' for a more convenient constructor.
+data ECSTaskDefinitionContainerDefinition =
+  ECSTaskDefinitionContainerDefinition
+  { _eCSTaskDefinitionContainerDefinitionCommand :: Maybe [Val Text]
+  , _eCSTaskDefinitionContainerDefinitionCpu :: Maybe (Val Integer')
+  , _eCSTaskDefinitionContainerDefinitionDisableNetworking :: Maybe (Val Bool')
+  , _eCSTaskDefinitionContainerDefinitionDnsSearchDomains :: Maybe [Val Text]
+  , _eCSTaskDefinitionContainerDefinitionDnsServers :: Maybe [Val Text]
+  , _eCSTaskDefinitionContainerDefinitionDockerLabels :: Maybe Object
+  , _eCSTaskDefinitionContainerDefinitionDockerSecurityOptions :: Maybe [Val Text]
+  , _eCSTaskDefinitionContainerDefinitionEntryPoint :: Maybe [Val Text]
+  , _eCSTaskDefinitionContainerDefinitionEnvironment :: Maybe [ECSTaskDefinitionKeyValuePair]
+  , _eCSTaskDefinitionContainerDefinitionEssential :: Maybe (Val Bool')
+  , _eCSTaskDefinitionContainerDefinitionExtraHosts :: Maybe [ECSTaskDefinitionHostEntry]
+  , _eCSTaskDefinitionContainerDefinitionHostname :: Maybe (Val Text)
+  , _eCSTaskDefinitionContainerDefinitionImage :: Maybe (Val Text)
+  , _eCSTaskDefinitionContainerDefinitionLinks :: Maybe [Val Text]
+  , _eCSTaskDefinitionContainerDefinitionLogConfiguration :: Maybe ECSTaskDefinitionLogConfiguration
+  , _eCSTaskDefinitionContainerDefinitionMemory :: Maybe (Val Integer')
+  , _eCSTaskDefinitionContainerDefinitionMemoryReservation :: Maybe (Val Integer')
+  , _eCSTaskDefinitionContainerDefinitionMountPoints :: Maybe [ECSTaskDefinitionMountPoint]
+  , _eCSTaskDefinitionContainerDefinitionName :: Maybe (Val Text)
+  , _eCSTaskDefinitionContainerDefinitionPortMappings :: Maybe [ECSTaskDefinitionPortMapping]
+  , _eCSTaskDefinitionContainerDefinitionPrivileged :: Maybe (Val Bool')
+  , _eCSTaskDefinitionContainerDefinitionReadonlyRootFilesystem :: Maybe (Val Bool')
+  , _eCSTaskDefinitionContainerDefinitionUlimits :: Maybe [ECSTaskDefinitionUlimit]
+  , _eCSTaskDefinitionContainerDefinitionUser :: Maybe (Val Text)
+  , _eCSTaskDefinitionContainerDefinitionVolumesFrom :: Maybe [ECSTaskDefinitionVolumeFrom]
+  , _eCSTaskDefinitionContainerDefinitionWorkingDirectory :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ECSTaskDefinitionContainerDefinition where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+instance FromJSON ECSTaskDefinitionContainerDefinition where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+-- | Constructor for 'ECSTaskDefinitionContainerDefinition' containing
+-- | required fields as arguments.
+ecsTaskDefinitionContainerDefinition
+  :: ECSTaskDefinitionContainerDefinition
+ecsTaskDefinitionContainerDefinition  =
+  ECSTaskDefinitionContainerDefinition
+  { _eCSTaskDefinitionContainerDefinitionCommand = Nothing
+  , _eCSTaskDefinitionContainerDefinitionCpu = Nothing
+  , _eCSTaskDefinitionContainerDefinitionDisableNetworking = Nothing
+  , _eCSTaskDefinitionContainerDefinitionDnsSearchDomains = Nothing
+  , _eCSTaskDefinitionContainerDefinitionDnsServers = Nothing
+  , _eCSTaskDefinitionContainerDefinitionDockerLabels = Nothing
+  , _eCSTaskDefinitionContainerDefinitionDockerSecurityOptions = Nothing
+  , _eCSTaskDefinitionContainerDefinitionEntryPoint = Nothing
+  , _eCSTaskDefinitionContainerDefinitionEnvironment = Nothing
+  , _eCSTaskDefinitionContainerDefinitionEssential = Nothing
+  , _eCSTaskDefinitionContainerDefinitionExtraHosts = Nothing
+  , _eCSTaskDefinitionContainerDefinitionHostname = Nothing
+  , _eCSTaskDefinitionContainerDefinitionImage = Nothing
+  , _eCSTaskDefinitionContainerDefinitionLinks = Nothing
+  , _eCSTaskDefinitionContainerDefinitionLogConfiguration = Nothing
+  , _eCSTaskDefinitionContainerDefinitionMemory = Nothing
+  , _eCSTaskDefinitionContainerDefinitionMemoryReservation = Nothing
+  , _eCSTaskDefinitionContainerDefinitionMountPoints = Nothing
+  , _eCSTaskDefinitionContainerDefinitionName = Nothing
+  , _eCSTaskDefinitionContainerDefinitionPortMappings = Nothing
+  , _eCSTaskDefinitionContainerDefinitionPrivileged = Nothing
+  , _eCSTaskDefinitionContainerDefinitionReadonlyRootFilesystem = Nothing
+  , _eCSTaskDefinitionContainerDefinitionUlimits = Nothing
+  , _eCSTaskDefinitionContainerDefinitionUser = Nothing
+  , _eCSTaskDefinitionContainerDefinitionVolumesFrom = Nothing
+  , _eCSTaskDefinitionContainerDefinitionWorkingDirectory = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-command
+ecstdcdCommand :: Lens' ECSTaskDefinitionContainerDefinition (Maybe [Val Text])
+ecstdcdCommand = lens _eCSTaskDefinitionContainerDefinitionCommand (\s a -> s { _eCSTaskDefinitionContainerDefinitionCommand = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-cpu
+ecstdcdCpu :: Lens' ECSTaskDefinitionContainerDefinition (Maybe (Val Integer'))
+ecstdcdCpu = lens _eCSTaskDefinitionContainerDefinitionCpu (\s a -> s { _eCSTaskDefinitionContainerDefinitionCpu = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-disablenetworking
+ecstdcdDisableNetworking :: Lens' ECSTaskDefinitionContainerDefinition (Maybe (Val Bool'))
+ecstdcdDisableNetworking = lens _eCSTaskDefinitionContainerDefinitionDisableNetworking (\s a -> s { _eCSTaskDefinitionContainerDefinitionDisableNetworking = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-dnssearchdomains
+ecstdcdDnsSearchDomains :: Lens' ECSTaskDefinitionContainerDefinition (Maybe [Val Text])
+ecstdcdDnsSearchDomains = lens _eCSTaskDefinitionContainerDefinitionDnsSearchDomains (\s a -> s { _eCSTaskDefinitionContainerDefinitionDnsSearchDomains = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-dnsservers
+ecstdcdDnsServers :: Lens' ECSTaskDefinitionContainerDefinition (Maybe [Val Text])
+ecstdcdDnsServers = lens _eCSTaskDefinitionContainerDefinitionDnsServers (\s a -> s { _eCSTaskDefinitionContainerDefinitionDnsServers = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-dockerlabels
+ecstdcdDockerLabels :: Lens' ECSTaskDefinitionContainerDefinition (Maybe Object)
+ecstdcdDockerLabels = lens _eCSTaskDefinitionContainerDefinitionDockerLabels (\s a -> s { _eCSTaskDefinitionContainerDefinitionDockerLabels = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-dockersecurityoptions
+ecstdcdDockerSecurityOptions :: Lens' ECSTaskDefinitionContainerDefinition (Maybe [Val Text])
+ecstdcdDockerSecurityOptions = lens _eCSTaskDefinitionContainerDefinitionDockerSecurityOptions (\s a -> s { _eCSTaskDefinitionContainerDefinitionDockerSecurityOptions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-entrypoint
+ecstdcdEntryPoint :: Lens' ECSTaskDefinitionContainerDefinition (Maybe [Val Text])
+ecstdcdEntryPoint = lens _eCSTaskDefinitionContainerDefinitionEntryPoint (\s a -> s { _eCSTaskDefinitionContainerDefinitionEntryPoint = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-environment
+ecstdcdEnvironment :: Lens' ECSTaskDefinitionContainerDefinition (Maybe [ECSTaskDefinitionKeyValuePair])
+ecstdcdEnvironment = lens _eCSTaskDefinitionContainerDefinitionEnvironment (\s a -> s { _eCSTaskDefinitionContainerDefinitionEnvironment = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-essential
+ecstdcdEssential :: Lens' ECSTaskDefinitionContainerDefinition (Maybe (Val Bool'))
+ecstdcdEssential = lens _eCSTaskDefinitionContainerDefinitionEssential (\s a -> s { _eCSTaskDefinitionContainerDefinitionEssential = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-extrahosts
+ecstdcdExtraHosts :: Lens' ECSTaskDefinitionContainerDefinition (Maybe [ECSTaskDefinitionHostEntry])
+ecstdcdExtraHosts = lens _eCSTaskDefinitionContainerDefinitionExtraHosts (\s a -> s { _eCSTaskDefinitionContainerDefinitionExtraHosts = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-hostname
+ecstdcdHostname :: Lens' ECSTaskDefinitionContainerDefinition (Maybe (Val Text))
+ecstdcdHostname = lens _eCSTaskDefinitionContainerDefinitionHostname (\s a -> s { _eCSTaskDefinitionContainerDefinitionHostname = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-image
+ecstdcdImage :: Lens' ECSTaskDefinitionContainerDefinition (Maybe (Val Text))
+ecstdcdImage = lens _eCSTaskDefinitionContainerDefinitionImage (\s a -> s { _eCSTaskDefinitionContainerDefinitionImage = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-links
+ecstdcdLinks :: Lens' ECSTaskDefinitionContainerDefinition (Maybe [Val Text])
+ecstdcdLinks = lens _eCSTaskDefinitionContainerDefinitionLinks (\s a -> s { _eCSTaskDefinitionContainerDefinitionLinks = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-logconfiguration
+ecstdcdLogConfiguration :: Lens' ECSTaskDefinitionContainerDefinition (Maybe ECSTaskDefinitionLogConfiguration)
+ecstdcdLogConfiguration = lens _eCSTaskDefinitionContainerDefinitionLogConfiguration (\s a -> s { _eCSTaskDefinitionContainerDefinitionLogConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-memory
+ecstdcdMemory :: Lens' ECSTaskDefinitionContainerDefinition (Maybe (Val Integer'))
+ecstdcdMemory = lens _eCSTaskDefinitionContainerDefinitionMemory (\s a -> s { _eCSTaskDefinitionContainerDefinitionMemory = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-memoryreservation
+ecstdcdMemoryReservation :: Lens' ECSTaskDefinitionContainerDefinition (Maybe (Val Integer'))
+ecstdcdMemoryReservation = lens _eCSTaskDefinitionContainerDefinitionMemoryReservation (\s a -> s { _eCSTaskDefinitionContainerDefinitionMemoryReservation = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-mountpoints
+ecstdcdMountPoints :: Lens' ECSTaskDefinitionContainerDefinition (Maybe [ECSTaskDefinitionMountPoint])
+ecstdcdMountPoints = lens _eCSTaskDefinitionContainerDefinitionMountPoints (\s a -> s { _eCSTaskDefinitionContainerDefinitionMountPoints = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-name
+ecstdcdName :: Lens' ECSTaskDefinitionContainerDefinition (Maybe (Val Text))
+ecstdcdName = lens _eCSTaskDefinitionContainerDefinitionName (\s a -> s { _eCSTaskDefinitionContainerDefinitionName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-portmappings
+ecstdcdPortMappings :: Lens' ECSTaskDefinitionContainerDefinition (Maybe [ECSTaskDefinitionPortMapping])
+ecstdcdPortMappings = lens _eCSTaskDefinitionContainerDefinitionPortMappings (\s a -> s { _eCSTaskDefinitionContainerDefinitionPortMappings = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-privileged
+ecstdcdPrivileged :: Lens' ECSTaskDefinitionContainerDefinition (Maybe (Val Bool'))
+ecstdcdPrivileged = lens _eCSTaskDefinitionContainerDefinitionPrivileged (\s a -> s { _eCSTaskDefinitionContainerDefinitionPrivileged = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-readonlyrootfilesystem
+ecstdcdReadonlyRootFilesystem :: Lens' ECSTaskDefinitionContainerDefinition (Maybe (Val Bool'))
+ecstdcdReadonlyRootFilesystem = lens _eCSTaskDefinitionContainerDefinitionReadonlyRootFilesystem (\s a -> s { _eCSTaskDefinitionContainerDefinitionReadonlyRootFilesystem = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-ulimits
+ecstdcdUlimits :: Lens' ECSTaskDefinitionContainerDefinition (Maybe [ECSTaskDefinitionUlimit])
+ecstdcdUlimits = lens _eCSTaskDefinitionContainerDefinitionUlimits (\s a -> s { _eCSTaskDefinitionContainerDefinitionUlimits = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-user
+ecstdcdUser :: Lens' ECSTaskDefinitionContainerDefinition (Maybe (Val Text))
+ecstdcdUser = lens _eCSTaskDefinitionContainerDefinitionUser (\s a -> s { _eCSTaskDefinitionContainerDefinitionUser = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-volumesfrom
+ecstdcdVolumesFrom :: Lens' ECSTaskDefinitionContainerDefinition (Maybe [ECSTaskDefinitionVolumeFrom])
+ecstdcdVolumesFrom = lens _eCSTaskDefinitionContainerDefinitionVolumesFrom (\s a -> s { _eCSTaskDefinitionContainerDefinitionVolumesFrom = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-workingdirectory
+ecstdcdWorkingDirectory :: Lens' ECSTaskDefinitionContainerDefinition (Maybe (Val Text))
+ecstdcdWorkingDirectory = lens _eCSTaskDefinitionContainerDefinitionWorkingDirectory (\s a -> s { _eCSTaskDefinitionContainerDefinitionWorkingDirectory = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionHostEntry.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionHostEntry.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionHostEntry.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-hostentry.html
+
+module Stratosphere.ResourceProperties.ECSTaskDefinitionHostEntry where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ECSTaskDefinitionHostEntry. See
+-- | 'ecsTaskDefinitionHostEntry' for a more convenient constructor.
+data ECSTaskDefinitionHostEntry =
+  ECSTaskDefinitionHostEntry
+  { _eCSTaskDefinitionHostEntryHostname :: Val Text
+  , _eCSTaskDefinitionHostEntryIpAddress :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ECSTaskDefinitionHostEntry where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON ECSTaskDefinitionHostEntry where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'ECSTaskDefinitionHostEntry' containing required fields
+-- | as arguments.
+ecsTaskDefinitionHostEntry
+  :: Val Text -- ^ 'ecstdheHostname'
+  -> Val Text -- ^ 'ecstdheIpAddress'
+  -> ECSTaskDefinitionHostEntry
+ecsTaskDefinitionHostEntry hostnamearg ipAddressarg =
+  ECSTaskDefinitionHostEntry
+  { _eCSTaskDefinitionHostEntryHostname = hostnamearg
+  , _eCSTaskDefinitionHostEntryIpAddress = ipAddressarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-hostentry.html#cfn-ecs-taskdefinition-containerdefinition-hostentry-hostname
+ecstdheHostname :: Lens' ECSTaskDefinitionHostEntry (Val Text)
+ecstdheHostname = lens _eCSTaskDefinitionHostEntryHostname (\s a -> s { _eCSTaskDefinitionHostEntryHostname = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-hostentry.html#cfn-ecs-taskdefinition-containerdefinition-hostentry-ipaddress
+ecstdheIpAddress :: Lens' ECSTaskDefinitionHostEntry (Val Text)
+ecstdheIpAddress = lens _eCSTaskDefinitionHostEntryIpAddress (\s a -> s { _eCSTaskDefinitionHostEntryIpAddress = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionHostVolumeProperties.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionHostVolumeProperties.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionHostVolumeProperties.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes-host.html
+
+module Stratosphere.ResourceProperties.ECSTaskDefinitionHostVolumeProperties where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ECSTaskDefinitionHostVolumeProperties. See
+-- | 'ecsTaskDefinitionHostVolumeProperties' for a more convenient
+-- | constructor.
+data ECSTaskDefinitionHostVolumeProperties =
+  ECSTaskDefinitionHostVolumeProperties
+  { _eCSTaskDefinitionHostVolumePropertiesSourcePath :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ECSTaskDefinitionHostVolumeProperties where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+
+instance FromJSON ECSTaskDefinitionHostVolumeProperties where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+
+-- | Constructor for 'ECSTaskDefinitionHostVolumeProperties' containing
+-- | required fields as arguments.
+ecsTaskDefinitionHostVolumeProperties
+  :: ECSTaskDefinitionHostVolumeProperties
+ecsTaskDefinitionHostVolumeProperties  =
+  ECSTaskDefinitionHostVolumeProperties
+  { _eCSTaskDefinitionHostVolumePropertiesSourcePath = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes-host.html#cfn-ecs-taskdefinition-volumes-host-sourcepath
+ecstdhvpSourcePath :: Lens' ECSTaskDefinitionHostVolumeProperties (Maybe (Val Text))
+ecstdhvpSourcePath = lens _eCSTaskDefinitionHostVolumePropertiesSourcePath (\s a -> s { _eCSTaskDefinitionHostVolumePropertiesSourcePath = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionKeyValuePair.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionKeyValuePair.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionKeyValuePair.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-environment.html
+
+module Stratosphere.ResourceProperties.ECSTaskDefinitionKeyValuePair where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ECSTaskDefinitionKeyValuePair. See
+-- | 'ecsTaskDefinitionKeyValuePair' for a more convenient constructor.
+data ECSTaskDefinitionKeyValuePair =
+  ECSTaskDefinitionKeyValuePair
+  { _eCSTaskDefinitionKeyValuePairName :: Maybe (Val Text)
+  , _eCSTaskDefinitionKeyValuePairValue :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ECSTaskDefinitionKeyValuePair where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+instance FromJSON ECSTaskDefinitionKeyValuePair where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+-- | Constructor for 'ECSTaskDefinitionKeyValuePair' containing required
+-- | fields as arguments.
+ecsTaskDefinitionKeyValuePair
+  :: ECSTaskDefinitionKeyValuePair
+ecsTaskDefinitionKeyValuePair  =
+  ECSTaskDefinitionKeyValuePair
+  { _eCSTaskDefinitionKeyValuePairName = Nothing
+  , _eCSTaskDefinitionKeyValuePairValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-environment.html#cfn-ecs-taskdefinition-containerdefinition-environment-name
+ecstdkvpName :: Lens' ECSTaskDefinitionKeyValuePair (Maybe (Val Text))
+ecstdkvpName = lens _eCSTaskDefinitionKeyValuePairName (\s a -> s { _eCSTaskDefinitionKeyValuePairName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-environment.html#cfn-ecs-taskdefinition-containerdefinition-environment-value
+ecstdkvpValue :: Lens' ECSTaskDefinitionKeyValuePair (Maybe (Val Text))
+ecstdkvpValue = lens _eCSTaskDefinitionKeyValuePairValue (\s a -> s { _eCSTaskDefinitionKeyValuePairValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionLogConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionLogConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionLogConfiguration.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-logconfiguration.html
+
+module Stratosphere.ResourceProperties.ECSTaskDefinitionLogConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ECSTaskDefinitionLogConfiguration. See
+-- | 'ecsTaskDefinitionLogConfiguration' for a more convenient constructor.
+data ECSTaskDefinitionLogConfiguration =
+  ECSTaskDefinitionLogConfiguration
+  { _eCSTaskDefinitionLogConfigurationLogDriver :: Val Text
+  , _eCSTaskDefinitionLogConfigurationOptions :: Maybe Object
+  } deriving (Show, Generic)
+
+instance ToJSON ECSTaskDefinitionLogConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON ECSTaskDefinitionLogConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'ECSTaskDefinitionLogConfiguration' containing required
+-- | fields as arguments.
+ecsTaskDefinitionLogConfiguration
+  :: Val Text -- ^ 'ecstdlcLogDriver'
+  -> ECSTaskDefinitionLogConfiguration
+ecsTaskDefinitionLogConfiguration logDriverarg =
+  ECSTaskDefinitionLogConfiguration
+  { _eCSTaskDefinitionLogConfigurationLogDriver = logDriverarg
+  , _eCSTaskDefinitionLogConfigurationOptions = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-logconfiguration.html#cfn-ecs-taskdefinition-containerdefinition-logconfiguration-logdriver
+ecstdlcLogDriver :: Lens' ECSTaskDefinitionLogConfiguration (Val Text)
+ecstdlcLogDriver = lens _eCSTaskDefinitionLogConfigurationLogDriver (\s a -> s { _eCSTaskDefinitionLogConfigurationLogDriver = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-logconfiguration.html#cfn-ecs-taskdefinition-containerdefinition-logconfiguration-options
+ecstdlcOptions :: Lens' ECSTaskDefinitionLogConfiguration (Maybe Object)
+ecstdlcOptions = lens _eCSTaskDefinitionLogConfigurationOptions (\s a -> s { _eCSTaskDefinitionLogConfigurationOptions = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionMountPoint.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionMountPoint.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionMountPoint.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-mountpoints.html
+
+module Stratosphere.ResourceProperties.ECSTaskDefinitionMountPoint where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ECSTaskDefinitionMountPoint. See
+-- | 'ecsTaskDefinitionMountPoint' for a more convenient constructor.
+data ECSTaskDefinitionMountPoint =
+  ECSTaskDefinitionMountPoint
+  { _eCSTaskDefinitionMountPointContainerPath :: Maybe (Val Text)
+  , _eCSTaskDefinitionMountPointReadOnly :: Maybe (Val Bool')
+  , _eCSTaskDefinitionMountPointSourceVolume :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ECSTaskDefinitionMountPoint where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON ECSTaskDefinitionMountPoint where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'ECSTaskDefinitionMountPoint' containing required fields
+-- | as arguments.
+ecsTaskDefinitionMountPoint
+  :: ECSTaskDefinitionMountPoint
+ecsTaskDefinitionMountPoint  =
+  ECSTaskDefinitionMountPoint
+  { _eCSTaskDefinitionMountPointContainerPath = Nothing
+  , _eCSTaskDefinitionMountPointReadOnly = Nothing
+  , _eCSTaskDefinitionMountPointSourceVolume = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-mountpoints.html#cfn-ecs-taskdefinition-containerdefinition-mountpoints-containerpath
+ecstdmpContainerPath :: Lens' ECSTaskDefinitionMountPoint (Maybe (Val Text))
+ecstdmpContainerPath = lens _eCSTaskDefinitionMountPointContainerPath (\s a -> s { _eCSTaskDefinitionMountPointContainerPath = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-mountpoints.html#cfn-ecs-taskdefinition-containerdefinition-mountpoints-readonly
+ecstdmpReadOnly :: Lens' ECSTaskDefinitionMountPoint (Maybe (Val Bool'))
+ecstdmpReadOnly = lens _eCSTaskDefinitionMountPointReadOnly (\s a -> s { _eCSTaskDefinitionMountPointReadOnly = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-mountpoints.html#cfn-ecs-taskdefinition-containerdefinition-mountpoints-sourcevolume
+ecstdmpSourceVolume :: Lens' ECSTaskDefinitionMountPoint (Maybe (Val Text))
+ecstdmpSourceVolume = lens _eCSTaskDefinitionMountPointSourceVolume (\s a -> s { _eCSTaskDefinitionMountPointSourceVolume = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionPortMapping.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionPortMapping.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionPortMapping.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-portmappings.html
+
+module Stratosphere.ResourceProperties.ECSTaskDefinitionPortMapping where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ECSTaskDefinitionPortMapping. See
+-- | 'ecsTaskDefinitionPortMapping' for a more convenient constructor.
+data ECSTaskDefinitionPortMapping =
+  ECSTaskDefinitionPortMapping
+  { _eCSTaskDefinitionPortMappingContainerPort :: Maybe (Val Integer')
+  , _eCSTaskDefinitionPortMappingHostPort :: Maybe (Val Integer')
+  , _eCSTaskDefinitionPortMappingProtocol :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ECSTaskDefinitionPortMapping where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+instance FromJSON ECSTaskDefinitionPortMapping where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+-- | Constructor for 'ECSTaskDefinitionPortMapping' containing required fields
+-- | as arguments.
+ecsTaskDefinitionPortMapping
+  :: ECSTaskDefinitionPortMapping
+ecsTaskDefinitionPortMapping  =
+  ECSTaskDefinitionPortMapping
+  { _eCSTaskDefinitionPortMappingContainerPort = Nothing
+  , _eCSTaskDefinitionPortMappingHostPort = Nothing
+  , _eCSTaskDefinitionPortMappingProtocol = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-portmappings.html#cfn-ecs-taskdefinition-containerdefinition-portmappings-containerport
+ecstdpmContainerPort :: Lens' ECSTaskDefinitionPortMapping (Maybe (Val Integer'))
+ecstdpmContainerPort = lens _eCSTaskDefinitionPortMappingContainerPort (\s a -> s { _eCSTaskDefinitionPortMappingContainerPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-portmappings.html#cfn-ecs-taskdefinition-containerdefinition-portmappings-readonly
+ecstdpmHostPort :: Lens' ECSTaskDefinitionPortMapping (Maybe (Val Integer'))
+ecstdpmHostPort = lens _eCSTaskDefinitionPortMappingHostPort (\s a -> s { _eCSTaskDefinitionPortMappingHostPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-portmappings.html#cfn-ecs-taskdefinition-containerdefinition-portmappings-sourcevolume
+ecstdpmProtocol :: Lens' ECSTaskDefinitionPortMapping (Maybe (Val Text))
+ecstdpmProtocol = lens _eCSTaskDefinitionPortMappingProtocol (\s a -> s { _eCSTaskDefinitionPortMappingProtocol = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionUlimit.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionUlimit.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionUlimit.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-ulimit.html
+
+module Stratosphere.ResourceProperties.ECSTaskDefinitionUlimit where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ECSTaskDefinitionUlimit. See
+-- | 'ecsTaskDefinitionUlimit' for a more convenient constructor.
+data ECSTaskDefinitionUlimit =
+  ECSTaskDefinitionUlimit
+  { _eCSTaskDefinitionUlimitHardLimit :: Val Integer'
+  , _eCSTaskDefinitionUlimitName :: Val Text
+  , _eCSTaskDefinitionUlimitSoftLimit :: Val Integer'
+  } deriving (Show, Generic)
+
+instance ToJSON ECSTaskDefinitionUlimit where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+instance FromJSON ECSTaskDefinitionUlimit where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+-- | Constructor for 'ECSTaskDefinitionUlimit' containing required fields as
+-- | arguments.
+ecsTaskDefinitionUlimit
+  :: Val Integer' -- ^ 'ecstduHardLimit'
+  -> Val Text -- ^ 'ecstduName'
+  -> Val Integer' -- ^ 'ecstduSoftLimit'
+  -> ECSTaskDefinitionUlimit
+ecsTaskDefinitionUlimit hardLimitarg namearg softLimitarg =
+  ECSTaskDefinitionUlimit
+  { _eCSTaskDefinitionUlimitHardLimit = hardLimitarg
+  , _eCSTaskDefinitionUlimitName = namearg
+  , _eCSTaskDefinitionUlimitSoftLimit = softLimitarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-ulimit.html#cfn-ecs-taskdefinition-containerdefinition-ulimit-hardlimit
+ecstduHardLimit :: Lens' ECSTaskDefinitionUlimit (Val Integer')
+ecstduHardLimit = lens _eCSTaskDefinitionUlimitHardLimit (\s a -> s { _eCSTaskDefinitionUlimitHardLimit = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-ulimit.html#cfn-ecs-taskdefinition-containerdefinition-ulimit-name
+ecstduName :: Lens' ECSTaskDefinitionUlimit (Val Text)
+ecstduName = lens _eCSTaskDefinitionUlimitName (\s a -> s { _eCSTaskDefinitionUlimitName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-ulimit.html#cfn-ecs-taskdefinition-containerdefinition-ulimit-softlimit
+ecstduSoftLimit :: Lens' ECSTaskDefinitionUlimit (Val Integer')
+ecstduSoftLimit = lens _eCSTaskDefinitionUlimitSoftLimit (\s a -> s { _eCSTaskDefinitionUlimitSoftLimit = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionVolume.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionVolume.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionVolume.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes.html
+
+module Stratosphere.ResourceProperties.ECSTaskDefinitionVolume where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ECSTaskDefinitionHostVolumeProperties
+
+-- | Full data type definition for ECSTaskDefinitionVolume. See
+-- | 'ecsTaskDefinitionVolume' for a more convenient constructor.
+data ECSTaskDefinitionVolume =
+  ECSTaskDefinitionVolume
+  { _eCSTaskDefinitionVolumeHost :: Maybe ECSTaskDefinitionHostVolumeProperties
+  , _eCSTaskDefinitionVolumeName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ECSTaskDefinitionVolume where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+instance FromJSON ECSTaskDefinitionVolume where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+-- | Constructor for 'ECSTaskDefinitionVolume' containing required fields as
+-- | arguments.
+ecsTaskDefinitionVolume
+  :: ECSTaskDefinitionVolume
+ecsTaskDefinitionVolume  =
+  ECSTaskDefinitionVolume
+  { _eCSTaskDefinitionVolumeHost = Nothing
+  , _eCSTaskDefinitionVolumeName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes.html#cfn-ecs-taskdefinition-volumes-host
+ecstdvHost :: Lens' ECSTaskDefinitionVolume (Maybe ECSTaskDefinitionHostVolumeProperties)
+ecstdvHost = lens _eCSTaskDefinitionVolumeHost (\s a -> s { _eCSTaskDefinitionVolumeHost = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes.html#cfn-ecs-taskdefinition-volumes-name
+ecstdvName :: Lens' ECSTaskDefinitionVolume (Maybe (Val Text))
+ecstdvName = lens _eCSTaskDefinitionVolumeName (\s a -> s { _eCSTaskDefinitionVolumeName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionVolumeFrom.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionVolumeFrom.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionVolumeFrom.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-volumesfrom.html
+
+module Stratosphere.ResourceProperties.ECSTaskDefinitionVolumeFrom where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ECSTaskDefinitionVolumeFrom. See
+-- | 'ecsTaskDefinitionVolumeFrom' for a more convenient constructor.
+data ECSTaskDefinitionVolumeFrom =
+  ECSTaskDefinitionVolumeFrom
+  { _eCSTaskDefinitionVolumeFromReadOnly :: Maybe (Val Bool')
+  , _eCSTaskDefinitionVolumeFromSourceContainer :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ECSTaskDefinitionVolumeFrom where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON ECSTaskDefinitionVolumeFrom where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'ECSTaskDefinitionVolumeFrom' containing required fields
+-- | as arguments.
+ecsTaskDefinitionVolumeFrom
+  :: ECSTaskDefinitionVolumeFrom
+ecsTaskDefinitionVolumeFrom  =
+  ECSTaskDefinitionVolumeFrom
+  { _eCSTaskDefinitionVolumeFromReadOnly = Nothing
+  , _eCSTaskDefinitionVolumeFromSourceContainer = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-volumesfrom.html#cfn-ecs-taskdefinition-containerdefinition-volumesfrom-readonly
+ecstdvfReadOnly :: Lens' ECSTaskDefinitionVolumeFrom (Maybe (Val Bool'))
+ecstdvfReadOnly = lens _eCSTaskDefinitionVolumeFromReadOnly (\s a -> s { _eCSTaskDefinitionVolumeFromReadOnly = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-volumesfrom.html#cfn-ecs-taskdefinition-containerdefinition-volumesfrom-sourcecontainer
+ecstdvfSourceContainer :: Lens' ECSTaskDefinitionVolumeFrom (Maybe (Val Text))
+ecstdvfSourceContainer = lens _eCSTaskDefinitionVolumeFromSourceContainer (\s a -> s { _eCSTaskDefinitionVolumeFromSourceContainer = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EFSFileSystemElasticFileSystemTag.hs b/library-gen/Stratosphere/ResourceProperties/EFSFileSystemElasticFileSystemTag.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EFSFileSystemElasticFileSystemTag.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-efs-filesystem-filesystemtags.html
+
+module Stratosphere.ResourceProperties.EFSFileSystemElasticFileSystemTag where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EFSFileSystemElasticFileSystemTag. See
+-- | 'efsFileSystemElasticFileSystemTag' for a more convenient constructor.
+data EFSFileSystemElasticFileSystemTag =
+  EFSFileSystemElasticFileSystemTag
+  { _eFSFileSystemElasticFileSystemTagKey :: Val Text
+  , _eFSFileSystemElasticFileSystemTagValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EFSFileSystemElasticFileSystemTag where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON EFSFileSystemElasticFileSystemTag where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'EFSFileSystemElasticFileSystemTag' containing required
+-- | fields as arguments.
+efsFileSystemElasticFileSystemTag
+  :: Val Text -- ^ 'efsfsefstKey'
+  -> Val Text -- ^ 'efsfsefstValue'
+  -> EFSFileSystemElasticFileSystemTag
+efsFileSystemElasticFileSystemTag keyarg valuearg =
+  EFSFileSystemElasticFileSystemTag
+  { _eFSFileSystemElasticFileSystemTagKey = keyarg
+  , _eFSFileSystemElasticFileSystemTagValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-efs-filesystem-filesystemtags.html#cfn-efs-filesystem-filesystemtags-key
+efsfsefstKey :: Lens' EFSFileSystemElasticFileSystemTag (Val Text)
+efsfsefstKey = lens _eFSFileSystemElasticFileSystemTagKey (\s a -> s { _eFSFileSystemElasticFileSystemTagKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-efs-filesystem-filesystemtags.html#cfn-efs-filesystem-filesystemtags-value
+efsfsefstValue :: Lens' EFSFileSystemElasticFileSystemTag (Val Text)
+efsfsefstValue = lens _eFSFileSystemElasticFileSystemTagValue (\s a -> s { _eFSFileSystemElasticFileSystemTagValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ELBPolicy.hs b/library-gen/Stratosphere/ResourceProperties/ELBPolicy.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/ELBPolicy.hs
+++ /dev/null
@@ -1,74 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The ElasticLoadBalancing policy type is an embedded property of the
--- AWS::ElasticLoadBalancing::LoadBalancer resource. You associate policies
--- with a listener by referencing a policy's name in the listener's
--- PolicyNames property.
-
-module Stratosphere.ResourceProperties.ELBPolicy where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.NameValuePair
-
--- | Full data type definition for ELBPolicy. See 'elbPolicy' for a more
--- convenient constructor.
-data ELBPolicy =
-  ELBPolicy
-  { _eLBPolicyAttributes :: [NameValuePair]
-  , _eLBPolicyInstancePorts :: Maybe [Val Text]
-  , _eLBPolicyLoadBalancerPorts :: Maybe [Val Text]
-  , _eLBPolicyPolicyName :: Val Text
-  , _eLBPolicyPolicyType :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON ELBPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
-
-instance FromJSON ELBPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
-
--- | Constructor for 'ELBPolicy' containing required fields as arguments.
-elbPolicy
-  :: [NameValuePair] -- ^ 'elbpAttributes'
-  -> Val Text -- ^ 'elbpPolicyName'
-  -> Val Text -- ^ 'elbpPolicyType'
-  -> ELBPolicy
-elbPolicy attributesarg policyNamearg policyTypearg =
-  ELBPolicy
-  { _eLBPolicyAttributes = attributesarg
-  , _eLBPolicyInstancePorts = Nothing
-  , _eLBPolicyLoadBalancerPorts = Nothing
-  , _eLBPolicyPolicyName = policyNamearg
-  , _eLBPolicyPolicyType = policyTypearg
-  }
-
--- | A list of arbitrary attributes for this policy. If you don't need to
--- specify any policy attributes, specify an empty list ([]).
-elbpAttributes :: Lens' ELBPolicy [NameValuePair]
-elbpAttributes = lens _eLBPolicyAttributes (\s a -> s { _eLBPolicyAttributes = a })
-
--- | A list of instance ports for the policy. These are the ports associated
--- with the back-end server.
-elbpInstancePorts :: Lens' ELBPolicy (Maybe [Val Text])
-elbpInstancePorts = lens _eLBPolicyInstancePorts (\s a -> s { _eLBPolicyInstancePorts = a })
-
--- | A list of external load balancer ports for the policy.
-elbpLoadBalancerPorts :: Lens' ELBPolicy (Maybe [Val Text])
-elbpLoadBalancerPorts = lens _eLBPolicyLoadBalancerPorts (\s a -> s { _eLBPolicyLoadBalancerPorts = a })
-
--- | A name for this policy that is unique to the load balancer.
-elbpPolicyName :: Lens' ELBPolicy (Val Text)
-elbpPolicyName = lens _eLBPolicyPolicyName (\s a -> s { _eLBPolicyPolicyName = a })
-
--- | The name of the policy type for this policy. This must be one of the
--- types reported by the Elastic Load Balancing
--- DescribeLoadBalancerPolicyTypes action.
-elbpPolicyType :: Lens' ELBPolicy (Val Text)
-elbpPolicyType = lens _eLBPolicyPolicyType (\s a -> s { _eLBPolicyPolicyType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterApplication.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterApplication.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterApplication.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-application.html
+
+module Stratosphere.ResourceProperties.EMRClusterApplication where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EMRClusterApplication. See
+-- | 'emrClusterApplication' for a more convenient constructor.
+data EMRClusterApplication =
+  EMRClusterApplication
+  { _eMRClusterApplicationAdditionalInfo :: Maybe Object
+  , _eMRClusterApplicationArgs :: Maybe [Val Text]
+  , _eMRClusterApplicationName :: Maybe (Val Text)
+  , _eMRClusterApplicationVersion :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EMRClusterApplication where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+instance FromJSON EMRClusterApplication where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+-- | Constructor for 'EMRClusterApplication' containing required fields as
+-- | arguments.
+emrClusterApplication
+  :: EMRClusterApplication
+emrClusterApplication  =
+  EMRClusterApplication
+  { _eMRClusterApplicationAdditionalInfo = Nothing
+  , _eMRClusterApplicationArgs = Nothing
+  , _eMRClusterApplicationName = Nothing
+  , _eMRClusterApplicationVersion = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-application.html#cfn-emr-cluster-application-additionalinfo
+emrcaAdditionalInfo :: Lens' EMRClusterApplication (Maybe Object)
+emrcaAdditionalInfo = lens _eMRClusterApplicationAdditionalInfo (\s a -> s { _eMRClusterApplicationAdditionalInfo = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-application.html#cfn-emr-cluster-application-args
+emrcaArgs :: Lens' EMRClusterApplication (Maybe [Val Text])
+emrcaArgs = lens _eMRClusterApplicationArgs (\s a -> s { _eMRClusterApplicationArgs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-application.html#cfn-emr-cluster-application-name
+emrcaName :: Lens' EMRClusterApplication (Maybe (Val Text))
+emrcaName = lens _eMRClusterApplicationName (\s a -> s { _eMRClusterApplicationName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-application.html#cfn-emr-cluster-application-version
+emrcaVersion :: Lens' EMRClusterApplication (Maybe (Val Text))
+emrcaVersion = lens _eMRClusterApplicationVersion (\s a -> s { _eMRClusterApplicationVersion = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterBootstrapActionConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterBootstrapActionConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterBootstrapActionConfig.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-bootstrapactionconfig.html
+
+module Stratosphere.ResourceProperties.EMRClusterBootstrapActionConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRClusterScriptBootstrapActionConfig
+
+-- | Full data type definition for EMRClusterBootstrapActionConfig. See
+-- | 'emrClusterBootstrapActionConfig' for a more convenient constructor.
+data EMRClusterBootstrapActionConfig =
+  EMRClusterBootstrapActionConfig
+  { _eMRClusterBootstrapActionConfigName :: Val Text
+  , _eMRClusterBootstrapActionConfigScriptBootstrapAction :: EMRClusterScriptBootstrapActionConfig
+  } deriving (Show, Generic)
+
+instance ToJSON EMRClusterBootstrapActionConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+instance FromJSON EMRClusterBootstrapActionConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+-- | Constructor for 'EMRClusterBootstrapActionConfig' containing required
+-- | fields as arguments.
+emrClusterBootstrapActionConfig
+  :: Val Text -- ^ 'emrcbacName'
+  -> EMRClusterScriptBootstrapActionConfig -- ^ 'emrcbacScriptBootstrapAction'
+  -> EMRClusterBootstrapActionConfig
+emrClusterBootstrapActionConfig namearg scriptBootstrapActionarg =
+  EMRClusterBootstrapActionConfig
+  { _eMRClusterBootstrapActionConfigName = namearg
+  , _eMRClusterBootstrapActionConfigScriptBootstrapAction = scriptBootstrapActionarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-bootstrapactionconfig.html#cfn-emr-cluster-bootstrapactionconfig-name
+emrcbacName :: Lens' EMRClusterBootstrapActionConfig (Val Text)
+emrcbacName = lens _eMRClusterBootstrapActionConfigName (\s a -> s { _eMRClusterBootstrapActionConfigName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-bootstrapactionconfig.html#cfn-emr-cluster-bootstrapactionconfig-scriptbootstrapaction
+emrcbacScriptBootstrapAction :: Lens' EMRClusterBootstrapActionConfig EMRClusterScriptBootstrapActionConfig
+emrcbacScriptBootstrapAction = lens _eMRClusterBootstrapActionConfigScriptBootstrapAction (\s a -> s { _eMRClusterBootstrapActionConfigScriptBootstrapAction = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterConfiguration.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-configuration.html
+
+module Stratosphere.ResourceProperties.EMRClusterConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EMRClusterConfiguration. See
+-- | 'emrClusterConfiguration' for a more convenient constructor.
+data EMRClusterConfiguration =
+  EMRClusterConfiguration
+  { _eMRClusterConfigurationClassification :: Maybe (Val Text)
+  , _eMRClusterConfigurationConfigurationProperties :: Maybe Object
+  , _eMRClusterConfigurationConfigurations :: Maybe [EMRClusterConfiguration]
+  } deriving (Show, Generic)
+
+instance ToJSON EMRClusterConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+instance FromJSON EMRClusterConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+-- | Constructor for 'EMRClusterConfiguration' containing required fields as
+-- | arguments.
+emrClusterConfiguration
+  :: EMRClusterConfiguration
+emrClusterConfiguration  =
+  EMRClusterConfiguration
+  { _eMRClusterConfigurationClassification = Nothing
+  , _eMRClusterConfigurationConfigurationProperties = Nothing
+  , _eMRClusterConfigurationConfigurations = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-configuration.html#cfn-emr-cluster-configuration-classification
+emrccClassification :: Lens' EMRClusterConfiguration (Maybe (Val Text))
+emrccClassification = lens _eMRClusterConfigurationClassification (\s a -> s { _eMRClusterConfigurationClassification = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-configuration.html#cfn-emr-cluster-configuration-configurationproperties
+emrccConfigurationProperties :: Lens' EMRClusterConfiguration (Maybe Object)
+emrccConfigurationProperties = lens _eMRClusterConfigurationConfigurationProperties (\s a -> s { _eMRClusterConfigurationConfigurationProperties = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-configuration.html#cfn-emr-cluster-configuration-configurations
+emrccConfigurations :: Lens' EMRClusterConfiguration (Maybe [EMRClusterConfiguration])
+emrccConfigurations = lens _eMRClusterConfigurationConfigurations (\s a -> s { _eMRClusterConfigurationConfigurations = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterEbsBlockDeviceConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterEbsBlockDeviceConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterEbsBlockDeviceConfig.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig.html
+
+module Stratosphere.ResourceProperties.EMRClusterEbsBlockDeviceConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRClusterVolumeSpecification
+
+-- | Full data type definition for EMRClusterEbsBlockDeviceConfig. See
+-- | 'emrClusterEbsBlockDeviceConfig' for a more convenient constructor.
+data EMRClusterEbsBlockDeviceConfig =
+  EMRClusterEbsBlockDeviceConfig
+  { _eMRClusterEbsBlockDeviceConfigVolumeSpecification :: EMRClusterVolumeSpecification
+  , _eMRClusterEbsBlockDeviceConfigVolumesPerInstance :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON EMRClusterEbsBlockDeviceConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+instance FromJSON EMRClusterEbsBlockDeviceConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+-- | Constructor for 'EMRClusterEbsBlockDeviceConfig' containing required
+-- | fields as arguments.
+emrClusterEbsBlockDeviceConfig
+  :: EMRClusterVolumeSpecification -- ^ 'emrcebdcVolumeSpecification'
+  -> EMRClusterEbsBlockDeviceConfig
+emrClusterEbsBlockDeviceConfig volumeSpecificationarg =
+  EMRClusterEbsBlockDeviceConfig
+  { _eMRClusterEbsBlockDeviceConfigVolumeSpecification = volumeSpecificationarg
+  , _eMRClusterEbsBlockDeviceConfigVolumesPerInstance = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification
+emrcebdcVolumeSpecification :: Lens' EMRClusterEbsBlockDeviceConfig EMRClusterVolumeSpecification
+emrcebdcVolumeSpecification = lens _eMRClusterEbsBlockDeviceConfigVolumeSpecification (\s a -> s { _eMRClusterEbsBlockDeviceConfigVolumeSpecification = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfig-volumesperinstance
+emrcebdcVolumesPerInstance :: Lens' EMRClusterEbsBlockDeviceConfig (Maybe (Val Integer'))
+emrcebdcVolumesPerInstance = lens _eMRClusterEbsBlockDeviceConfigVolumesPerInstance (\s a -> s { _eMRClusterEbsBlockDeviceConfigVolumesPerInstance = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterEbsConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterEbsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterEbsConfiguration.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration.html
+
+module Stratosphere.ResourceProperties.EMRClusterEbsConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRClusterEbsBlockDeviceConfig
+
+-- | Full data type definition for EMRClusterEbsConfiguration. See
+-- | 'emrClusterEbsConfiguration' for a more convenient constructor.
+data EMRClusterEbsConfiguration =
+  EMRClusterEbsConfiguration
+  { _eMRClusterEbsConfigurationEbsBlockDeviceConfigs :: Maybe [EMRClusterEbsBlockDeviceConfig]
+  , _eMRClusterEbsConfigurationEbsOptimized :: Maybe (Val Bool')
+  } deriving (Show, Generic)
+
+instance ToJSON EMRClusterEbsConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON EMRClusterEbsConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'EMRClusterEbsConfiguration' containing required fields
+-- | as arguments.
+emrClusterEbsConfiguration
+  :: EMRClusterEbsConfiguration
+emrClusterEbsConfiguration  =
+  EMRClusterEbsConfiguration
+  { _eMRClusterEbsConfigurationEbsBlockDeviceConfigs = Nothing
+  , _eMRClusterEbsConfigurationEbsOptimized = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfigs
+emrcecEbsBlockDeviceConfigs :: Lens' EMRClusterEbsConfiguration (Maybe [EMRClusterEbsBlockDeviceConfig])
+emrcecEbsBlockDeviceConfigs = lens _eMRClusterEbsConfigurationEbsBlockDeviceConfigs (\s a -> s { _eMRClusterEbsConfigurationEbsBlockDeviceConfigs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration.html#cfn-emr-ebsconfiguration-ebsoptimized
+emrcecEbsOptimized :: Lens' EMRClusterEbsConfiguration (Maybe (Val Bool'))
+emrcecEbsOptimized = lens _eMRClusterEbsConfigurationEbsOptimized (\s a -> s { _eMRClusterEbsConfigurationEbsOptimized = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceGroupConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceGroupConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceGroupConfig.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig-instancegroupconfig.html
+
+module Stratosphere.ResourceProperties.EMRClusterInstanceGroupConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRClusterConfiguration
+import Stratosphere.ResourceProperties.EMRClusterEbsConfiguration
+
+-- | Full data type definition for EMRClusterInstanceGroupConfig. See
+-- | 'emrClusterInstanceGroupConfig' for a more convenient constructor.
+data EMRClusterInstanceGroupConfig =
+  EMRClusterInstanceGroupConfig
+  { _eMRClusterInstanceGroupConfigBidPrice :: Maybe (Val Text)
+  , _eMRClusterInstanceGroupConfigConfigurations :: Maybe [EMRClusterConfiguration]
+  , _eMRClusterInstanceGroupConfigEbsConfiguration :: Maybe EMRClusterEbsConfiguration
+  , _eMRClusterInstanceGroupConfigInstanceCount :: Val Integer'
+  , _eMRClusterInstanceGroupConfigInstanceType :: Val Text
+  , _eMRClusterInstanceGroupConfigMarket :: Maybe (Val Text)
+  , _eMRClusterInstanceGroupConfigName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EMRClusterInstanceGroupConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+instance FromJSON EMRClusterInstanceGroupConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+-- | Constructor for 'EMRClusterInstanceGroupConfig' containing required
+-- | fields as arguments.
+emrClusterInstanceGroupConfig
+  :: Val Integer' -- ^ 'emrcigcInstanceCount'
+  -> Val Text -- ^ 'emrcigcInstanceType'
+  -> EMRClusterInstanceGroupConfig
+emrClusterInstanceGroupConfig instanceCountarg instanceTypearg =
+  EMRClusterInstanceGroupConfig
+  { _eMRClusterInstanceGroupConfigBidPrice = Nothing
+  , _eMRClusterInstanceGroupConfigConfigurations = Nothing
+  , _eMRClusterInstanceGroupConfigEbsConfiguration = Nothing
+  , _eMRClusterInstanceGroupConfigInstanceCount = instanceCountarg
+  , _eMRClusterInstanceGroupConfigInstanceType = instanceTypearg
+  , _eMRClusterInstanceGroupConfigMarket = Nothing
+  , _eMRClusterInstanceGroupConfigName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig-instancegroupconfig.html#cfn-emr-cluster-jobflowinstancesconfig-instancegroupconfig-bidprice
+emrcigcBidPrice :: Lens' EMRClusterInstanceGroupConfig (Maybe (Val Text))
+emrcigcBidPrice = lens _eMRClusterInstanceGroupConfigBidPrice (\s a -> s { _eMRClusterInstanceGroupConfigBidPrice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig-instancegroupconfig.html#cfn-emr-cluster-jobflowinstancesconfig-instancegroupconfig-configurations
+emrcigcConfigurations :: Lens' EMRClusterInstanceGroupConfig (Maybe [EMRClusterConfiguration])
+emrcigcConfigurations = lens _eMRClusterInstanceGroupConfigConfigurations (\s a -> s { _eMRClusterInstanceGroupConfigConfigurations = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig-instancegroupconfig.html#cfn-emr-cluster-jobflowinstancesconfig-instancegroupconfigConfigurations-ebsconfiguration
+emrcigcEbsConfiguration :: Lens' EMRClusterInstanceGroupConfig (Maybe EMRClusterEbsConfiguration)
+emrcigcEbsConfiguration = lens _eMRClusterInstanceGroupConfigEbsConfiguration (\s a -> s { _eMRClusterInstanceGroupConfigEbsConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig-instancegroupconfig.html#cfn-emr-cluster-jobflowinstancesconfig-instancegroupconfig-instancecount
+emrcigcInstanceCount :: Lens' EMRClusterInstanceGroupConfig (Val Integer')
+emrcigcInstanceCount = lens _eMRClusterInstanceGroupConfigInstanceCount (\s a -> s { _eMRClusterInstanceGroupConfigInstanceCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig-instancegroupconfig.html#cfn-emr-cluster-jobflowinstancesconfig-instancegroupconfig-instancetype
+emrcigcInstanceType :: Lens' EMRClusterInstanceGroupConfig (Val Text)
+emrcigcInstanceType = lens _eMRClusterInstanceGroupConfigInstanceType (\s a -> s { _eMRClusterInstanceGroupConfigInstanceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig-instancegroupconfig.html#cfn-emr-cluster-jobflowinstancesconfig-instancegroupconfig-market
+emrcigcMarket :: Lens' EMRClusterInstanceGroupConfig (Maybe (Val Text))
+emrcigcMarket = lens _eMRClusterInstanceGroupConfigMarket (\s a -> s { _eMRClusterInstanceGroupConfigMarket = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig-instancegroupconfig.html#cfn-emr-cluster-jobflowinstancesconfig-instancegroupconfig-name
+emrcigcName :: Lens' EMRClusterInstanceGroupConfig (Maybe (Val Text))
+emrcigcName = lens _eMRClusterInstanceGroupConfigName (\s a -> s { _eMRClusterInstanceGroupConfigName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterJobFlowInstancesConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterJobFlowInstancesConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterJobFlowInstancesConfig.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html
+
+module Stratosphere.ResourceProperties.EMRClusterJobFlowInstancesConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRClusterInstanceGroupConfig
+import Stratosphere.ResourceProperties.EMRClusterPlacementType
+
+-- | Full data type definition for EMRClusterJobFlowInstancesConfig. See
+-- | 'emrClusterJobFlowInstancesConfig' for a more convenient constructor.
+data EMRClusterJobFlowInstancesConfig =
+  EMRClusterJobFlowInstancesConfig
+  { _eMRClusterJobFlowInstancesConfigAdditionalMasterSecurityGroups :: Maybe [Val Text]
+  , _eMRClusterJobFlowInstancesConfigAdditionalSlaveSecurityGroups :: Maybe [Val Text]
+  , _eMRClusterJobFlowInstancesConfigCoreInstanceGroup :: EMRClusterInstanceGroupConfig
+  , _eMRClusterJobFlowInstancesConfigEc2KeyName :: Maybe (Val Text)
+  , _eMRClusterJobFlowInstancesConfigEc2SubnetId :: Maybe (Val Text)
+  , _eMRClusterJobFlowInstancesConfigEmrManagedMasterSecurityGroup :: Maybe (Val Text)
+  , _eMRClusterJobFlowInstancesConfigEmrManagedSlaveSecurityGroup :: Maybe (Val Text)
+  , _eMRClusterJobFlowInstancesConfigHadoopVersion :: Maybe (Val Text)
+  , _eMRClusterJobFlowInstancesConfigMasterInstanceGroup :: EMRClusterInstanceGroupConfig
+  , _eMRClusterJobFlowInstancesConfigPlacement :: Maybe EMRClusterPlacementType
+  , _eMRClusterJobFlowInstancesConfigServiceAccessSecurityGroup :: Maybe (Val Text)
+  , _eMRClusterJobFlowInstancesConfigTerminationProtected :: Maybe (Val Bool')
+  } deriving (Show, Generic)
+
+instance ToJSON EMRClusterJobFlowInstancesConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+instance FromJSON EMRClusterJobFlowInstancesConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+-- | Constructor for 'EMRClusterJobFlowInstancesConfig' containing required
+-- | fields as arguments.
+emrClusterJobFlowInstancesConfig
+  :: EMRClusterInstanceGroupConfig -- ^ 'emrcjficCoreInstanceGroup'
+  -> EMRClusterInstanceGroupConfig -- ^ 'emrcjficMasterInstanceGroup'
+  -> EMRClusterJobFlowInstancesConfig
+emrClusterJobFlowInstancesConfig coreInstanceGrouparg masterInstanceGrouparg =
+  EMRClusterJobFlowInstancesConfig
+  { _eMRClusterJobFlowInstancesConfigAdditionalMasterSecurityGroups = Nothing
+  , _eMRClusterJobFlowInstancesConfigAdditionalSlaveSecurityGroups = Nothing
+  , _eMRClusterJobFlowInstancesConfigCoreInstanceGroup = coreInstanceGrouparg
+  , _eMRClusterJobFlowInstancesConfigEc2KeyName = Nothing
+  , _eMRClusterJobFlowInstancesConfigEc2SubnetId = Nothing
+  , _eMRClusterJobFlowInstancesConfigEmrManagedMasterSecurityGroup = Nothing
+  , _eMRClusterJobFlowInstancesConfigEmrManagedSlaveSecurityGroup = Nothing
+  , _eMRClusterJobFlowInstancesConfigHadoopVersion = Nothing
+  , _eMRClusterJobFlowInstancesConfigMasterInstanceGroup = masterInstanceGrouparg
+  , _eMRClusterJobFlowInstancesConfigPlacement = Nothing
+  , _eMRClusterJobFlowInstancesConfigServiceAccessSecurityGroup = Nothing
+  , _eMRClusterJobFlowInstancesConfigTerminationProtected = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-additionalmastersecuritygroups
+emrcjficAdditionalMasterSecurityGroups :: Lens' EMRClusterJobFlowInstancesConfig (Maybe [Val Text])
+emrcjficAdditionalMasterSecurityGroups = lens _eMRClusterJobFlowInstancesConfigAdditionalMasterSecurityGroups (\s a -> s { _eMRClusterJobFlowInstancesConfigAdditionalMasterSecurityGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-additionalslavesecuritygroups
+emrcjficAdditionalSlaveSecurityGroups :: Lens' EMRClusterJobFlowInstancesConfig (Maybe [Val Text])
+emrcjficAdditionalSlaveSecurityGroups = lens _eMRClusterJobFlowInstancesConfigAdditionalSlaveSecurityGroups (\s a -> s { _eMRClusterJobFlowInstancesConfigAdditionalSlaveSecurityGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-coreinstancegroup
+emrcjficCoreInstanceGroup :: Lens' EMRClusterJobFlowInstancesConfig EMRClusterInstanceGroupConfig
+emrcjficCoreInstanceGroup = lens _eMRClusterJobFlowInstancesConfigCoreInstanceGroup (\s a -> s { _eMRClusterJobFlowInstancesConfigCoreInstanceGroup = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-ec2keyname
+emrcjficEc2KeyName :: Lens' EMRClusterJobFlowInstancesConfig (Maybe (Val Text))
+emrcjficEc2KeyName = lens _eMRClusterJobFlowInstancesConfigEc2KeyName (\s a -> s { _eMRClusterJobFlowInstancesConfigEc2KeyName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-ec2subnetid
+emrcjficEc2SubnetId :: Lens' EMRClusterJobFlowInstancesConfig (Maybe (Val Text))
+emrcjficEc2SubnetId = lens _eMRClusterJobFlowInstancesConfigEc2SubnetId (\s a -> s { _eMRClusterJobFlowInstancesConfigEc2SubnetId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-emrmanagedmastersecuritygroup
+emrcjficEmrManagedMasterSecurityGroup :: Lens' EMRClusterJobFlowInstancesConfig (Maybe (Val Text))
+emrcjficEmrManagedMasterSecurityGroup = lens _eMRClusterJobFlowInstancesConfigEmrManagedMasterSecurityGroup (\s a -> s { _eMRClusterJobFlowInstancesConfigEmrManagedMasterSecurityGroup = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-emrmanagedslavesecuritygroup
+emrcjficEmrManagedSlaveSecurityGroup :: Lens' EMRClusterJobFlowInstancesConfig (Maybe (Val Text))
+emrcjficEmrManagedSlaveSecurityGroup = lens _eMRClusterJobFlowInstancesConfigEmrManagedSlaveSecurityGroup (\s a -> s { _eMRClusterJobFlowInstancesConfigEmrManagedSlaveSecurityGroup = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-hadoopversion
+emrcjficHadoopVersion :: Lens' EMRClusterJobFlowInstancesConfig (Maybe (Val Text))
+emrcjficHadoopVersion = lens _eMRClusterJobFlowInstancesConfigHadoopVersion (\s a -> s { _eMRClusterJobFlowInstancesConfigHadoopVersion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-masterinstancegroup
+emrcjficMasterInstanceGroup :: Lens' EMRClusterJobFlowInstancesConfig EMRClusterInstanceGroupConfig
+emrcjficMasterInstanceGroup = lens _eMRClusterJobFlowInstancesConfigMasterInstanceGroup (\s a -> s { _eMRClusterJobFlowInstancesConfigMasterInstanceGroup = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-placement
+emrcjficPlacement :: Lens' EMRClusterJobFlowInstancesConfig (Maybe EMRClusterPlacementType)
+emrcjficPlacement = lens _eMRClusterJobFlowInstancesConfigPlacement (\s a -> s { _eMRClusterJobFlowInstancesConfigPlacement = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-serviceaccesssecuritygroup
+emrcjficServiceAccessSecurityGroup :: Lens' EMRClusterJobFlowInstancesConfig (Maybe (Val Text))
+emrcjficServiceAccessSecurityGroup = lens _eMRClusterJobFlowInstancesConfigServiceAccessSecurityGroup (\s a -> s { _eMRClusterJobFlowInstancesConfigServiceAccessSecurityGroup = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-terminationprotected
+emrcjficTerminationProtected :: Lens' EMRClusterJobFlowInstancesConfig (Maybe (Val Bool'))
+emrcjficTerminationProtected = lens _eMRClusterJobFlowInstancesConfigTerminationProtected (\s a -> s { _eMRClusterJobFlowInstancesConfigTerminationProtected = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterPlacementType.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterPlacementType.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterPlacementType.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig-placementtype.html
+
+module Stratosphere.ResourceProperties.EMRClusterPlacementType where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EMRClusterPlacementType. See
+-- | 'emrClusterPlacementType' for a more convenient constructor.
+data EMRClusterPlacementType =
+  EMRClusterPlacementType
+  { _eMRClusterPlacementTypeAvailabilityZone :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EMRClusterPlacementType where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+instance FromJSON EMRClusterPlacementType where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+-- | Constructor for 'EMRClusterPlacementType' containing required fields as
+-- | arguments.
+emrClusterPlacementType
+  :: Val Text -- ^ 'emrcptAvailabilityZone'
+  -> EMRClusterPlacementType
+emrClusterPlacementType availabilityZonearg =
+  EMRClusterPlacementType
+  { _eMRClusterPlacementTypeAvailabilityZone = availabilityZonearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig-placementtype.html#aws-properties-emr-cluster-jobflowinstancesconfig-placementtype
+emrcptAvailabilityZone :: Lens' EMRClusterPlacementType (Val Text)
+emrcptAvailabilityZone = lens _eMRClusterPlacementTypeAvailabilityZone (\s a -> s { _eMRClusterPlacementTypeAvailabilityZone = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterScriptBootstrapActionConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterScriptBootstrapActionConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterScriptBootstrapActionConfig.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-bootstrapactionconfig-scriptbootstrapactionconfig.html
+
+module Stratosphere.ResourceProperties.EMRClusterScriptBootstrapActionConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EMRClusterScriptBootstrapActionConfig. See
+-- | 'emrClusterScriptBootstrapActionConfig' for a more convenient
+-- | constructor.
+data EMRClusterScriptBootstrapActionConfig =
+  EMRClusterScriptBootstrapActionConfig
+  { _eMRClusterScriptBootstrapActionConfigArgs :: Maybe [Val Text]
+  , _eMRClusterScriptBootstrapActionConfigPath :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EMRClusterScriptBootstrapActionConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+
+instance FromJSON EMRClusterScriptBootstrapActionConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+
+-- | Constructor for 'EMRClusterScriptBootstrapActionConfig' containing
+-- | required fields as arguments.
+emrClusterScriptBootstrapActionConfig
+  :: Val Text -- ^ 'emrcsbacPath'
+  -> EMRClusterScriptBootstrapActionConfig
+emrClusterScriptBootstrapActionConfig patharg =
+  EMRClusterScriptBootstrapActionConfig
+  { _eMRClusterScriptBootstrapActionConfigArgs = Nothing
+  , _eMRClusterScriptBootstrapActionConfigPath = patharg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-bootstrapactionconfig-scriptbootstrapactionconfig.html#cfn-emr-cluster-bootstrapactionconfig-scriptbootstrapaction-args
+emrcsbacArgs :: Lens' EMRClusterScriptBootstrapActionConfig (Maybe [Val Text])
+emrcsbacArgs = lens _eMRClusterScriptBootstrapActionConfigArgs (\s a -> s { _eMRClusterScriptBootstrapActionConfigArgs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-bootstrapactionconfig-scriptbootstrapactionconfig.html#cfn-emr-cluster-bootstrapactionconfig-scriptbootstrapaction-path
+emrcsbacPath :: Lens' EMRClusterScriptBootstrapActionConfig (Val Text)
+emrcsbacPath = lens _eMRClusterScriptBootstrapActionConfigPath (\s a -> s { _eMRClusterScriptBootstrapActionConfigPath = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterVolumeSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterVolumeSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterVolumeSpecification.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification.html
+
+module Stratosphere.ResourceProperties.EMRClusterVolumeSpecification where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EMRClusterVolumeSpecification. See
+-- | 'emrClusterVolumeSpecification' for a more convenient constructor.
+data EMRClusterVolumeSpecification =
+  EMRClusterVolumeSpecification
+  { _eMRClusterVolumeSpecificationIops :: Maybe (Val Integer')
+  , _eMRClusterVolumeSpecificationSizeInGB :: Val Integer'
+  , _eMRClusterVolumeSpecificationVolumeType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EMRClusterVolumeSpecification where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+instance FromJSON EMRClusterVolumeSpecification where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+-- | Constructor for 'EMRClusterVolumeSpecification' containing required
+-- | fields as arguments.
+emrClusterVolumeSpecification
+  :: Val Integer' -- ^ 'emrcvsSizeInGB'
+  -> Val Text -- ^ 'emrcvsVolumeType'
+  -> EMRClusterVolumeSpecification
+emrClusterVolumeSpecification sizeInGBarg volumeTypearg =
+  EMRClusterVolumeSpecification
+  { _eMRClusterVolumeSpecificationIops = Nothing
+  , _eMRClusterVolumeSpecificationSizeInGB = sizeInGBarg
+  , _eMRClusterVolumeSpecificationVolumeType = volumeTypearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification-iops
+emrcvsIops :: Lens' EMRClusterVolumeSpecification (Maybe (Val Integer'))
+emrcvsIops = lens _eMRClusterVolumeSpecificationIops (\s a -> s { _eMRClusterVolumeSpecificationIops = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification-sizeingb
+emrcvsSizeInGB :: Lens' EMRClusterVolumeSpecification (Val Integer')
+emrcvsSizeInGB = lens _eMRClusterVolumeSpecificationSizeInGB (\s a -> s { _eMRClusterVolumeSpecificationSizeInGB = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification-volumetype
+emrcvsVolumeType :: Lens' EMRClusterVolumeSpecification (Val Text)
+emrcvsVolumeType = lens _eMRClusterVolumeSpecificationVolumeType (\s a -> s { _eMRClusterVolumeSpecificationVolumeType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigConfiguration.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-configuration.html
+
+module Stratosphere.ResourceProperties.EMRInstanceGroupConfigConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EMRInstanceGroupConfigConfiguration. See
+-- | 'emrInstanceGroupConfigConfiguration' for a more convenient constructor.
+data EMRInstanceGroupConfigConfiguration =
+  EMRInstanceGroupConfigConfiguration
+  { _eMRInstanceGroupConfigConfigurationClassification :: Maybe (Val Text)
+  , _eMRInstanceGroupConfigConfigurationConfigurationProperties :: Maybe Object
+  , _eMRInstanceGroupConfigConfigurationConfigurations :: Maybe [EMRInstanceGroupConfigConfiguration]
+  } deriving (Show, Generic)
+
+instance ToJSON EMRInstanceGroupConfigConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+instance FromJSON EMRInstanceGroupConfigConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+-- | Constructor for 'EMRInstanceGroupConfigConfiguration' containing required
+-- | fields as arguments.
+emrInstanceGroupConfigConfiguration
+  :: EMRInstanceGroupConfigConfiguration
+emrInstanceGroupConfigConfiguration  =
+  EMRInstanceGroupConfigConfiguration
+  { _eMRInstanceGroupConfigConfigurationClassification = Nothing
+  , _eMRInstanceGroupConfigConfigurationConfigurationProperties = Nothing
+  , _eMRInstanceGroupConfigConfigurationConfigurations = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-configuration.html#cfn-emr-cluster-configuration-classification
+emrigccClassification :: Lens' EMRInstanceGroupConfigConfiguration (Maybe (Val Text))
+emrigccClassification = lens _eMRInstanceGroupConfigConfigurationClassification (\s a -> s { _eMRInstanceGroupConfigConfigurationClassification = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-configuration.html#cfn-emr-cluster-configuration-configurationproperties
+emrigccConfigurationProperties :: Lens' EMRInstanceGroupConfigConfiguration (Maybe Object)
+emrigccConfigurationProperties = lens _eMRInstanceGroupConfigConfigurationConfigurationProperties (\s a -> s { _eMRInstanceGroupConfigConfigurationConfigurationProperties = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-configuration.html#cfn-emr-cluster-configuration-configurations
+emrigccConfigurations :: Lens' EMRInstanceGroupConfigConfiguration (Maybe [EMRInstanceGroupConfigConfiguration])
+emrigccConfigurations = lens _eMRInstanceGroupConfigConfigurationConfigurations (\s a -> s { _eMRInstanceGroupConfigConfigurationConfigurations = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigEbsBlockDeviceConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigEbsBlockDeviceConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigEbsBlockDeviceConfig.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig.html
+
+module Stratosphere.ResourceProperties.EMRInstanceGroupConfigEbsBlockDeviceConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigVolumeSpecification
+
+-- | Full data type definition for EMRInstanceGroupConfigEbsBlockDeviceConfig.
+-- | See 'emrInstanceGroupConfigEbsBlockDeviceConfig' for a more convenient
+-- | constructor.
+data EMRInstanceGroupConfigEbsBlockDeviceConfig =
+  EMRInstanceGroupConfigEbsBlockDeviceConfig
+  { _eMRInstanceGroupConfigEbsBlockDeviceConfigVolumeSpecification :: EMRInstanceGroupConfigVolumeSpecification
+  , _eMRInstanceGroupConfigEbsBlockDeviceConfigVolumesPerInstance :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON EMRInstanceGroupConfigEbsBlockDeviceConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 43, omitNothingFields = True }
+
+instance FromJSON EMRInstanceGroupConfigEbsBlockDeviceConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 43, omitNothingFields = True }
+
+-- | Constructor for 'EMRInstanceGroupConfigEbsBlockDeviceConfig' containing
+-- | required fields as arguments.
+emrInstanceGroupConfigEbsBlockDeviceConfig
+  :: EMRInstanceGroupConfigVolumeSpecification -- ^ 'emrigcebdcVolumeSpecification'
+  -> EMRInstanceGroupConfigEbsBlockDeviceConfig
+emrInstanceGroupConfigEbsBlockDeviceConfig volumeSpecificationarg =
+  EMRInstanceGroupConfigEbsBlockDeviceConfig
+  { _eMRInstanceGroupConfigEbsBlockDeviceConfigVolumeSpecification = volumeSpecificationarg
+  , _eMRInstanceGroupConfigEbsBlockDeviceConfigVolumesPerInstance = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification
+emrigcebdcVolumeSpecification :: Lens' EMRInstanceGroupConfigEbsBlockDeviceConfig EMRInstanceGroupConfigVolumeSpecification
+emrigcebdcVolumeSpecification = lens _eMRInstanceGroupConfigEbsBlockDeviceConfigVolumeSpecification (\s a -> s { _eMRInstanceGroupConfigEbsBlockDeviceConfigVolumeSpecification = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfig-volumesperinstance
+emrigcebdcVolumesPerInstance :: Lens' EMRInstanceGroupConfigEbsBlockDeviceConfig (Maybe (Val Integer'))
+emrigcebdcVolumesPerInstance = lens _eMRInstanceGroupConfigEbsBlockDeviceConfigVolumesPerInstance (\s a -> s { _eMRInstanceGroupConfigEbsBlockDeviceConfigVolumesPerInstance = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigEbsConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigEbsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigEbsConfiguration.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration.html
+
+module Stratosphere.ResourceProperties.EMRInstanceGroupConfigEbsConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigEbsBlockDeviceConfig
+
+-- | Full data type definition for EMRInstanceGroupConfigEbsConfiguration. See
+-- | 'emrInstanceGroupConfigEbsConfiguration' for a more convenient
+-- | constructor.
+data EMRInstanceGroupConfigEbsConfiguration =
+  EMRInstanceGroupConfigEbsConfiguration
+  { _eMRInstanceGroupConfigEbsConfigurationEbsBlockDeviceConfigs :: Maybe [EMRInstanceGroupConfigEbsBlockDeviceConfig]
+  , _eMRInstanceGroupConfigEbsConfigurationEbsOptimized :: Maybe (Val Bool')
+  } deriving (Show, Generic)
+
+instance ToJSON EMRInstanceGroupConfigEbsConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+instance FromJSON EMRInstanceGroupConfigEbsConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+-- | Constructor for 'EMRInstanceGroupConfigEbsConfiguration' containing
+-- | required fields as arguments.
+emrInstanceGroupConfigEbsConfiguration
+  :: EMRInstanceGroupConfigEbsConfiguration
+emrInstanceGroupConfigEbsConfiguration  =
+  EMRInstanceGroupConfigEbsConfiguration
+  { _eMRInstanceGroupConfigEbsConfigurationEbsBlockDeviceConfigs = Nothing
+  , _eMRInstanceGroupConfigEbsConfigurationEbsOptimized = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfigs
+emrigcecEbsBlockDeviceConfigs :: Lens' EMRInstanceGroupConfigEbsConfiguration (Maybe [EMRInstanceGroupConfigEbsBlockDeviceConfig])
+emrigcecEbsBlockDeviceConfigs = lens _eMRInstanceGroupConfigEbsConfigurationEbsBlockDeviceConfigs (\s a -> s { _eMRInstanceGroupConfigEbsConfigurationEbsBlockDeviceConfigs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration.html#cfn-emr-ebsconfiguration-ebsoptimized
+emrigcecEbsOptimized :: Lens' EMRInstanceGroupConfigEbsConfiguration (Maybe (Val Bool'))
+emrigcecEbsOptimized = lens _eMRInstanceGroupConfigEbsConfigurationEbsOptimized (\s a -> s { _eMRInstanceGroupConfigEbsConfigurationEbsOptimized = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigVolumeSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigVolumeSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigVolumeSpecification.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification.html
+
+module Stratosphere.ResourceProperties.EMRInstanceGroupConfigVolumeSpecification where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EMRInstanceGroupConfigVolumeSpecification.
+-- | See 'emrInstanceGroupConfigVolumeSpecification' for a more convenient
+-- | constructor.
+data EMRInstanceGroupConfigVolumeSpecification =
+  EMRInstanceGroupConfigVolumeSpecification
+  { _eMRInstanceGroupConfigVolumeSpecificationIops :: Maybe (Val Integer')
+  , _eMRInstanceGroupConfigVolumeSpecificationSizeInGB :: Val Integer'
+  , _eMRInstanceGroupConfigVolumeSpecificationVolumeType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EMRInstanceGroupConfigVolumeSpecification where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+
+instance FromJSON EMRInstanceGroupConfigVolumeSpecification where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+
+-- | Constructor for 'EMRInstanceGroupConfigVolumeSpecification' containing
+-- | required fields as arguments.
+emrInstanceGroupConfigVolumeSpecification
+  :: Val Integer' -- ^ 'emrigcvsSizeInGB'
+  -> Val Text -- ^ 'emrigcvsVolumeType'
+  -> EMRInstanceGroupConfigVolumeSpecification
+emrInstanceGroupConfigVolumeSpecification sizeInGBarg volumeTypearg =
+  EMRInstanceGroupConfigVolumeSpecification
+  { _eMRInstanceGroupConfigVolumeSpecificationIops = Nothing
+  , _eMRInstanceGroupConfigVolumeSpecificationSizeInGB = sizeInGBarg
+  , _eMRInstanceGroupConfigVolumeSpecificationVolumeType = volumeTypearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification-iops
+emrigcvsIops :: Lens' EMRInstanceGroupConfigVolumeSpecification (Maybe (Val Integer'))
+emrigcvsIops = lens _eMRInstanceGroupConfigVolumeSpecificationIops (\s a -> s { _eMRInstanceGroupConfigVolumeSpecificationIops = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification-sizeingb
+emrigcvsSizeInGB :: Lens' EMRInstanceGroupConfigVolumeSpecification (Val Integer')
+emrigcvsSizeInGB = lens _eMRInstanceGroupConfigVolumeSpecificationSizeInGB (\s a -> s { _eMRInstanceGroupConfigVolumeSpecificationSizeInGB = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification-volumetype
+emrigcvsVolumeType :: Lens' EMRInstanceGroupConfigVolumeSpecification (Val Text)
+emrigcvsVolumeType = lens _eMRInstanceGroupConfigVolumeSpecificationVolumeType (\s a -> s { _eMRInstanceGroupConfigVolumeSpecificationVolumeType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRStepHadoopJarStepConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRStepHadoopJarStepConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRStepHadoopJarStepConfig.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-step-hadoopjarstepconfig.html
+
+module Stratosphere.ResourceProperties.EMRStepHadoopJarStepConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRStepKeyValue
+
+-- | Full data type definition for EMRStepHadoopJarStepConfig. See
+-- | 'emrStepHadoopJarStepConfig' for a more convenient constructor.
+data EMRStepHadoopJarStepConfig =
+  EMRStepHadoopJarStepConfig
+  { _eMRStepHadoopJarStepConfigArgs :: Maybe [Val Text]
+  , _eMRStepHadoopJarStepConfigJar :: Val Text
+  , _eMRStepHadoopJarStepConfigMainClass :: Maybe (Val Text)
+  , _eMRStepHadoopJarStepConfigStepProperties :: Maybe [EMRStepKeyValue]
+  } deriving (Show, Generic)
+
+instance ToJSON EMRStepHadoopJarStepConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON EMRStepHadoopJarStepConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'EMRStepHadoopJarStepConfig' containing required fields
+-- | as arguments.
+emrStepHadoopJarStepConfig
+  :: Val Text -- ^ 'emrshjscJar'
+  -> EMRStepHadoopJarStepConfig
+emrStepHadoopJarStepConfig jararg =
+  EMRStepHadoopJarStepConfig
+  { _eMRStepHadoopJarStepConfigArgs = Nothing
+  , _eMRStepHadoopJarStepConfigJar = jararg
+  , _eMRStepHadoopJarStepConfigMainClass = Nothing
+  , _eMRStepHadoopJarStepConfigStepProperties = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-step-hadoopjarstepconfig.html#cfn-elasticmapreduce-step-hadoopjarstepconfig-args
+emrshjscArgs :: Lens' EMRStepHadoopJarStepConfig (Maybe [Val Text])
+emrshjscArgs = lens _eMRStepHadoopJarStepConfigArgs (\s a -> s { _eMRStepHadoopJarStepConfigArgs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-step-hadoopjarstepconfig.html#cfn-elasticmapreduce-step-hadoopjarstepconfig-jar
+emrshjscJar :: Lens' EMRStepHadoopJarStepConfig (Val Text)
+emrshjscJar = lens _eMRStepHadoopJarStepConfigJar (\s a -> s { _eMRStepHadoopJarStepConfigJar = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-step-hadoopjarstepconfig.html#cfn-elasticmapreduce-step-hadoopjarstepconfig-mainclass
+emrshjscMainClass :: Lens' EMRStepHadoopJarStepConfig (Maybe (Val Text))
+emrshjscMainClass = lens _eMRStepHadoopJarStepConfigMainClass (\s a -> s { _eMRStepHadoopJarStepConfigMainClass = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-step-hadoopjarstepconfig.html#cfn-elasticmapreduce-step-hadoopjarstepconfig-stepproperties
+emrshjscStepProperties :: Lens' EMRStepHadoopJarStepConfig (Maybe [EMRStepKeyValue])
+emrshjscStepProperties = lens _eMRStepHadoopJarStepConfigStepProperties (\s a -> s { _eMRStepHadoopJarStepConfigStepProperties = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRStepKeyValue.hs b/library-gen/Stratosphere/ResourceProperties/EMRStepKeyValue.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRStepKeyValue.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-step-keyvalue.html
+
+module Stratosphere.ResourceProperties.EMRStepKeyValue where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EMRStepKeyValue. See 'emrStepKeyValue' for
+-- | a more convenient constructor.
+data EMRStepKeyValue =
+  EMRStepKeyValue
+  { _eMRStepKeyValueKey :: Maybe (Val Text)
+  , _eMRStepKeyValueValue :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EMRStepKeyValue where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+
+instance FromJSON EMRStepKeyValue where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+
+-- | Constructor for 'EMRStepKeyValue' containing required fields as
+-- | arguments.
+emrStepKeyValue
+  :: EMRStepKeyValue
+emrStepKeyValue  =
+  EMRStepKeyValue
+  { _eMRStepKeyValueKey = Nothing
+  , _eMRStepKeyValueValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-step-keyvalue.html#cfn-elasticmapreduce-step-keyvalue-key
+emrskvKey :: Lens' EMRStepKeyValue (Maybe (Val Text))
+emrskvKey = lens _eMRStepKeyValueKey (\s a -> s { _eMRStepKeyValueKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-step-keyvalue.html#cfn-elasticmapreduce-step-keyvalue-value
+emrskvValue :: Lens' EMRStepKeyValue (Maybe (Val Text))
+emrskvValue = lens _eMRStepKeyValueValue (\s a -> s { _eMRStepKeyValueValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElastiCacheReplicationGroupNodeGroupConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/ElastiCacheReplicationGroupNodeGroupConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElastiCacheReplicationGroupNodeGroupConfiguration.hs
@@ -0,0 +1,61 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-replicationgroup-nodegroupconfiguration.html
+
+module Stratosphere.ResourceProperties.ElastiCacheReplicationGroupNodeGroupConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ElastiCacheReplicationGroupNodeGroupConfiguration. See
+-- | 'elastiCacheReplicationGroupNodeGroupConfiguration' for a more convenient
+-- | constructor.
+data ElastiCacheReplicationGroupNodeGroupConfiguration =
+  ElastiCacheReplicationGroupNodeGroupConfiguration
+  { _elastiCacheReplicationGroupNodeGroupConfigurationPrimaryAvailabilityZone :: Maybe (Val Text)
+  , _elastiCacheReplicationGroupNodeGroupConfigurationReplicaAvailabilityZones :: Maybe [Val Text]
+  , _elastiCacheReplicationGroupNodeGroupConfigurationReplicaCount :: Maybe (Val Integer')
+  , _elastiCacheReplicationGroupNodeGroupConfigurationSlots :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ElastiCacheReplicationGroupNodeGroupConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 50, omitNothingFields = True }
+
+instance FromJSON ElastiCacheReplicationGroupNodeGroupConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 50, omitNothingFields = True }
+
+-- | Constructor for 'ElastiCacheReplicationGroupNodeGroupConfiguration'
+-- | containing required fields as arguments.
+elastiCacheReplicationGroupNodeGroupConfiguration
+  :: ElastiCacheReplicationGroupNodeGroupConfiguration
+elastiCacheReplicationGroupNodeGroupConfiguration  =
+  ElastiCacheReplicationGroupNodeGroupConfiguration
+  { _elastiCacheReplicationGroupNodeGroupConfigurationPrimaryAvailabilityZone = Nothing
+  , _elastiCacheReplicationGroupNodeGroupConfigurationReplicaAvailabilityZones = Nothing
+  , _elastiCacheReplicationGroupNodeGroupConfigurationReplicaCount = Nothing
+  , _elastiCacheReplicationGroupNodeGroupConfigurationSlots = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-replicationgroup-nodegroupconfiguration.html#cfn-elasticache-replicationgroup-nodegroupconfiguration-primaryavailabilityzone
+ecrgngcPrimaryAvailabilityZone :: Lens' ElastiCacheReplicationGroupNodeGroupConfiguration (Maybe (Val Text))
+ecrgngcPrimaryAvailabilityZone = lens _elastiCacheReplicationGroupNodeGroupConfigurationPrimaryAvailabilityZone (\s a -> s { _elastiCacheReplicationGroupNodeGroupConfigurationPrimaryAvailabilityZone = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-replicationgroup-nodegroupconfiguration.html#cfn-elasticache-replicationgroup-nodegroupconfiguration-replicaavailabilityzones
+ecrgngcReplicaAvailabilityZones :: Lens' ElastiCacheReplicationGroupNodeGroupConfiguration (Maybe [Val Text])
+ecrgngcReplicaAvailabilityZones = lens _elastiCacheReplicationGroupNodeGroupConfigurationReplicaAvailabilityZones (\s a -> s { _elastiCacheReplicationGroupNodeGroupConfigurationReplicaAvailabilityZones = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-replicationgroup-nodegroupconfiguration.html#cfn-elasticache-replicationgroup-nodegroupconfiguration-replicacount
+ecrgngcReplicaCount :: Lens' ElastiCacheReplicationGroupNodeGroupConfiguration (Maybe (Val Integer'))
+ecrgngcReplicaCount = lens _elastiCacheReplicationGroupNodeGroupConfigurationReplicaCount (\s a -> s { _elastiCacheReplicationGroupNodeGroupConfigurationReplicaCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-replicationgroup-nodegroupconfiguration.html#cfn-elasticache-replicationgroup-nodegroupconfiguration-slots
+ecrgngcSlots :: Lens' ElastiCacheReplicationGroupNodeGroupConfiguration (Maybe (Val Text))
+ecrgngcSlots = lens _elastiCacheReplicationGroupNodeGroupConfigurationSlots (\s a -> s { _elastiCacheReplicationGroupNodeGroupConfigurationSlots = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkApplicationVersionSourceBundle.hs b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkApplicationVersionSourceBundle.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkApplicationVersionSourceBundle.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-sourcebundle.html
+
+module Stratosphere.ResourceProperties.ElasticBeanstalkApplicationVersionSourceBundle where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ElasticBeanstalkApplicationVersionSourceBundle. See
+-- | 'elasticBeanstalkApplicationVersionSourceBundle' for a more convenient
+-- | constructor.
+data ElasticBeanstalkApplicationVersionSourceBundle =
+  ElasticBeanstalkApplicationVersionSourceBundle
+  { _elasticBeanstalkApplicationVersionSourceBundleS3Bucket :: Val Text
+  , _elasticBeanstalkApplicationVersionSourceBundleS3Key :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticBeanstalkApplicationVersionSourceBundle where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 47, omitNothingFields = True }
+
+instance FromJSON ElasticBeanstalkApplicationVersionSourceBundle where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 47, omitNothingFields = True }
+
+-- | Constructor for 'ElasticBeanstalkApplicationVersionSourceBundle'
+-- | containing required fields as arguments.
+elasticBeanstalkApplicationVersionSourceBundle
+  :: Val Text -- ^ 'ebavsbS3Bucket'
+  -> Val Text -- ^ 'ebavsbS3Key'
+  -> ElasticBeanstalkApplicationVersionSourceBundle
+elasticBeanstalkApplicationVersionSourceBundle s3Bucketarg s3Keyarg =
+  ElasticBeanstalkApplicationVersionSourceBundle
+  { _elasticBeanstalkApplicationVersionSourceBundleS3Bucket = s3Bucketarg
+  , _elasticBeanstalkApplicationVersionSourceBundleS3Key = s3Keyarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-sourcebundle.html#cfn-beanstalk-sourcebundle-s3bucket
+ebavsbS3Bucket :: Lens' ElasticBeanstalkApplicationVersionSourceBundle (Val Text)
+ebavsbS3Bucket = lens _elasticBeanstalkApplicationVersionSourceBundleS3Bucket (\s a -> s { _elasticBeanstalkApplicationVersionSourceBundleS3Bucket = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-sourcebundle.html#cfn-beanstalk-sourcebundle-s3key
+ebavsbS3Key :: Lens' ElasticBeanstalkApplicationVersionSourceBundle (Val Text)
+ebavsbS3Key = lens _elasticBeanstalkApplicationVersionSourceBundleS3Key (\s a -> s { _elasticBeanstalkApplicationVersionSourceBundleS3Key = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting.hs b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-option-settings.html
+
+module Stratosphere.ResourceProperties.ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting. See
+-- | 'elasticBeanstalkConfigurationTemplateConfigurationOptionSetting' for a
+-- | more convenient constructor.
+data ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting =
+  ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting
+  { _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingNamespace :: Val Text
+  , _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingOptionName :: Val Text
+  , _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 64, omitNothingFields = True }
+
+instance FromJSON ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 64, omitNothingFields = True }
+
+-- | Constructor for
+-- | 'ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting'
+-- | containing required fields as arguments.
+elasticBeanstalkConfigurationTemplateConfigurationOptionSetting
+  :: Val Text -- ^ 'ebctcosNamespace'
+  -> Val Text -- ^ 'ebctcosOptionName'
+  -> Val Text -- ^ 'ebctcosValue'
+  -> ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting
+elasticBeanstalkConfigurationTemplateConfigurationOptionSetting namespacearg optionNamearg valuearg =
+  ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting
+  { _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingNamespace = namespacearg
+  , _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingOptionName = optionNamearg
+  , _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-option-settings.html#cfn-beanstalk-optionsettings-namespace
+ebctcosNamespace :: Lens' ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting (Val Text)
+ebctcosNamespace = lens _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingNamespace (\s a -> s { _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingNamespace = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-option-settings.html#cfn-beanstalk-optionsettings-optionname
+ebctcosOptionName :: Lens' ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting (Val Text)
+ebctcosOptionName = lens _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingOptionName (\s a -> s { _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingOptionName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-option-settings.html#cfn-beanstalk-optionsettings-value
+ebctcosValue :: Lens' ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting (Val Text)
+ebctcosValue = lens _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingValue (\s a -> s { _elasticBeanstalkConfigurationTemplateConfigurationOptionSettingValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkConfigurationTemplateSourceConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkConfigurationTemplateSourceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkConfigurationTemplateSourceConfiguration.hs
@@ -0,0 +1,52 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-configurationtemplate-sourceconfiguration.html
+
+module Stratosphere.ResourceProperties.ElasticBeanstalkConfigurationTemplateSourceConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ElasticBeanstalkConfigurationTemplateSourceConfiguration. See
+-- | 'elasticBeanstalkConfigurationTemplateSourceConfiguration' for a more
+-- | convenient constructor.
+data ElasticBeanstalkConfigurationTemplateSourceConfiguration =
+  ElasticBeanstalkConfigurationTemplateSourceConfiguration
+  { _elasticBeanstalkConfigurationTemplateSourceConfigurationApplicationName :: Val Text
+  , _elasticBeanstalkConfigurationTemplateSourceConfigurationTemplateName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticBeanstalkConfigurationTemplateSourceConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 57, omitNothingFields = True }
+
+instance FromJSON ElasticBeanstalkConfigurationTemplateSourceConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 57, omitNothingFields = True }
+
+-- | Constructor for
+-- | 'ElasticBeanstalkConfigurationTemplateSourceConfiguration' containing
+-- | required fields as arguments.
+elasticBeanstalkConfigurationTemplateSourceConfiguration
+  :: Val Text -- ^ 'ebctscApplicationName'
+  -> Val Text -- ^ 'ebctscTemplateName'
+  -> ElasticBeanstalkConfigurationTemplateSourceConfiguration
+elasticBeanstalkConfigurationTemplateSourceConfiguration applicationNamearg templateNamearg =
+  ElasticBeanstalkConfigurationTemplateSourceConfiguration
+  { _elasticBeanstalkConfigurationTemplateSourceConfigurationApplicationName = applicationNamearg
+  , _elasticBeanstalkConfigurationTemplateSourceConfigurationTemplateName = templateNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-configurationtemplate-sourceconfiguration.html#cfn-beanstalk-configurationtemplate-sourceconfiguration-applicationname
+ebctscApplicationName :: Lens' ElasticBeanstalkConfigurationTemplateSourceConfiguration (Val Text)
+ebctscApplicationName = lens _elasticBeanstalkConfigurationTemplateSourceConfigurationApplicationName (\s a -> s { _elasticBeanstalkConfigurationTemplateSourceConfigurationApplicationName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-configurationtemplate-sourceconfiguration.html#cfn-beanstalk-configurationtemplate-sourceconfiguration-templatename
+ebctscTemplateName :: Lens' ElasticBeanstalkConfigurationTemplateSourceConfiguration (Val Text)
+ebctscTemplateName = lens _elasticBeanstalkConfigurationTemplateSourceConfigurationTemplateName (\s a -> s { _elasticBeanstalkConfigurationTemplateSourceConfigurationTemplateName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkEnvironmentOptionSettings.hs b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkEnvironmentOptionSettings.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkEnvironmentOptionSettings.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-option-settings.html
+
+module Stratosphere.ResourceProperties.ElasticBeanstalkEnvironmentOptionSettings where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ElasticBeanstalkEnvironmentOptionSettings.
+-- | See 'elasticBeanstalkEnvironmentOptionSettings' for a more convenient
+-- | constructor.
+data ElasticBeanstalkEnvironmentOptionSettings =
+  ElasticBeanstalkEnvironmentOptionSettings
+  { _elasticBeanstalkEnvironmentOptionSettingsNamespace :: Val Text
+  , _elasticBeanstalkEnvironmentOptionSettingsOptionName :: Val Text
+  , _elasticBeanstalkEnvironmentOptionSettingsValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticBeanstalkEnvironmentOptionSettings where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+
+instance FromJSON ElasticBeanstalkEnvironmentOptionSettings where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+
+-- | Constructor for 'ElasticBeanstalkEnvironmentOptionSettings' containing
+-- | required fields as arguments.
+elasticBeanstalkEnvironmentOptionSettings
+  :: Val Text -- ^ 'ebeosNamespace'
+  -> Val Text -- ^ 'ebeosOptionName'
+  -> Val Text -- ^ 'ebeosValue'
+  -> ElasticBeanstalkEnvironmentOptionSettings
+elasticBeanstalkEnvironmentOptionSettings namespacearg optionNamearg valuearg =
+  ElasticBeanstalkEnvironmentOptionSettings
+  { _elasticBeanstalkEnvironmentOptionSettingsNamespace = namespacearg
+  , _elasticBeanstalkEnvironmentOptionSettingsOptionName = optionNamearg
+  , _elasticBeanstalkEnvironmentOptionSettingsValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-option-settings.html#cfn-beanstalk-optionsettings-namespace
+ebeosNamespace :: Lens' ElasticBeanstalkEnvironmentOptionSettings (Val Text)
+ebeosNamespace = lens _elasticBeanstalkEnvironmentOptionSettingsNamespace (\s a -> s { _elasticBeanstalkEnvironmentOptionSettingsNamespace = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-option-settings.html#cfn-beanstalk-optionsettings-optionname
+ebeosOptionName :: Lens' ElasticBeanstalkEnvironmentOptionSettings (Val Text)
+ebeosOptionName = lens _elasticBeanstalkEnvironmentOptionSettingsOptionName (\s a -> s { _elasticBeanstalkEnvironmentOptionSettingsOptionName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-option-settings.html#cfn-beanstalk-optionsettings-value
+ebeosValue :: Lens' ElasticBeanstalkEnvironmentOptionSettings (Val Text)
+ebeosValue = lens _elasticBeanstalkEnvironmentOptionSettingsValue (\s a -> s { _elasticBeanstalkEnvironmentOptionSettingsValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkEnvironmentTier.hs b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkEnvironmentTier.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticBeanstalkEnvironmentTier.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment-tier.html
+
+module Stratosphere.ResourceProperties.ElasticBeanstalkEnvironmentTier where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ElasticBeanstalkEnvironmentTier. See
+-- | 'elasticBeanstalkEnvironmentTier' for a more convenient constructor.
+data ElasticBeanstalkEnvironmentTier =
+  ElasticBeanstalkEnvironmentTier
+  { _elasticBeanstalkEnvironmentTierName :: Maybe (Val Text)
+  , _elasticBeanstalkEnvironmentTierType :: Maybe (Val Text)
+  , _elasticBeanstalkEnvironmentTierVersion :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticBeanstalkEnvironmentTier where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+instance FromJSON ElasticBeanstalkEnvironmentTier where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+-- | Constructor for 'ElasticBeanstalkEnvironmentTier' containing required
+-- | fields as arguments.
+elasticBeanstalkEnvironmentTier
+  :: ElasticBeanstalkEnvironmentTier
+elasticBeanstalkEnvironmentTier  =
+  ElasticBeanstalkEnvironmentTier
+  { _elasticBeanstalkEnvironmentTierName = Nothing
+  , _elasticBeanstalkEnvironmentTierType = Nothing
+  , _elasticBeanstalkEnvironmentTierVersion = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment-tier.html#cfn-beanstalk-env-tier-name
+ebetName :: Lens' ElasticBeanstalkEnvironmentTier (Maybe (Val Text))
+ebetName = lens _elasticBeanstalkEnvironmentTierName (\s a -> s { _elasticBeanstalkEnvironmentTierName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment-tier.html#cfn-beanstalk-env-tier-type
+ebetType :: Lens' ElasticBeanstalkEnvironmentTier (Maybe (Val Text))
+ebetType = lens _elasticBeanstalkEnvironmentTierType (\s a -> s { _elasticBeanstalkEnvironmentTierType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment-tier.html#cfn-beanstalk-env-tier-version
+ebetVersion :: Lens' ElasticBeanstalkEnvironmentTier (Maybe (Val Text))
+ebetVersion = lens _elasticBeanstalkEnvironmentTierVersion (\s a -> s { _elasticBeanstalkEnvironmentTierVersion = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerAccessLoggingPolicy.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerAccessLoggingPolicy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerAccessLoggingPolicy.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-accessloggingpolicy.html
+
+module Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerAccessLoggingPolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ElasticLoadBalancingLoadBalancerAccessLoggingPolicy. See
+-- | 'elasticLoadBalancingLoadBalancerAccessLoggingPolicy' for a more
+-- | convenient constructor.
+data ElasticLoadBalancingLoadBalancerAccessLoggingPolicy =
+  ElasticLoadBalancingLoadBalancerAccessLoggingPolicy
+  { _elasticLoadBalancingLoadBalancerAccessLoggingPolicyEmitInterval :: Maybe (Val Integer')
+  , _elasticLoadBalancingLoadBalancerAccessLoggingPolicyEnabled :: Val Bool'
+  , _elasticLoadBalancingLoadBalancerAccessLoggingPolicyS3BucketName :: Val Text
+  , _elasticLoadBalancingLoadBalancerAccessLoggingPolicyS3BucketPrefix :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingLoadBalancerAccessLoggingPolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 52, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingLoadBalancerAccessLoggingPolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 52, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingLoadBalancerAccessLoggingPolicy'
+-- | containing required fields as arguments.
+elasticLoadBalancingLoadBalancerAccessLoggingPolicy
+  :: Val Bool' -- ^ 'elblbalpEnabled'
+  -> Val Text -- ^ 'elblbalpS3BucketName'
+  -> ElasticLoadBalancingLoadBalancerAccessLoggingPolicy
+elasticLoadBalancingLoadBalancerAccessLoggingPolicy enabledarg s3BucketNamearg =
+  ElasticLoadBalancingLoadBalancerAccessLoggingPolicy
+  { _elasticLoadBalancingLoadBalancerAccessLoggingPolicyEmitInterval = Nothing
+  , _elasticLoadBalancingLoadBalancerAccessLoggingPolicyEnabled = enabledarg
+  , _elasticLoadBalancingLoadBalancerAccessLoggingPolicyS3BucketName = s3BucketNamearg
+  , _elasticLoadBalancingLoadBalancerAccessLoggingPolicyS3BucketPrefix = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-accessloggingpolicy.html#cfn-elb-accessloggingpolicy-emitinterval
+elblbalpEmitInterval :: Lens' ElasticLoadBalancingLoadBalancerAccessLoggingPolicy (Maybe (Val Integer'))
+elblbalpEmitInterval = lens _elasticLoadBalancingLoadBalancerAccessLoggingPolicyEmitInterval (\s a -> s { _elasticLoadBalancingLoadBalancerAccessLoggingPolicyEmitInterval = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-accessloggingpolicy.html#cfn-elb-accessloggingpolicy-enabled
+elblbalpEnabled :: Lens' ElasticLoadBalancingLoadBalancerAccessLoggingPolicy (Val Bool')
+elblbalpEnabled = lens _elasticLoadBalancingLoadBalancerAccessLoggingPolicyEnabled (\s a -> s { _elasticLoadBalancingLoadBalancerAccessLoggingPolicyEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-accessloggingpolicy.html#cfn-elb-accessloggingpolicy-s3bucketname
+elblbalpS3BucketName :: Lens' ElasticLoadBalancingLoadBalancerAccessLoggingPolicy (Val Text)
+elblbalpS3BucketName = lens _elasticLoadBalancingLoadBalancerAccessLoggingPolicyS3BucketName (\s a -> s { _elasticLoadBalancingLoadBalancerAccessLoggingPolicyS3BucketName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-accessloggingpolicy.html#cfn-elb-accessloggingpolicy-s3bucketprefix
+elblbalpS3BucketPrefix :: Lens' ElasticLoadBalancingLoadBalancerAccessLoggingPolicy (Maybe (Val Text))
+elblbalpS3BucketPrefix = lens _elasticLoadBalancingLoadBalancerAccessLoggingPolicyS3BucketPrefix (\s a -> s { _elasticLoadBalancingLoadBalancerAccessLoggingPolicyS3BucketPrefix = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy.hs
@@ -0,0 +1,52 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-AppCookieStickinessPolicy.html
+
+module Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy. See
+-- | 'elasticLoadBalancingLoadBalancerAppCookieStickinessPolicy' for a more
+-- | convenient constructor.
+data ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy =
+  ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy
+  { _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicyCookieName :: Val Text
+  , _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicyPolicyName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 58, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 58, omitNothingFields = True }
+
+-- | Constructor for
+-- | 'ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy' containing
+-- | required fields as arguments.
+elasticLoadBalancingLoadBalancerAppCookieStickinessPolicy
+  :: Val Text -- ^ 'elblbacspCookieName'
+  -> Val Text -- ^ 'elblbacspPolicyName'
+  -> ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy
+elasticLoadBalancingLoadBalancerAppCookieStickinessPolicy cookieNamearg policyNamearg =
+  ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy
+  { _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicyCookieName = cookieNamearg
+  , _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicyPolicyName = policyNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-AppCookieStickinessPolicy.html#cfn-elb-appcookiestickinesspolicy-cookiename
+elblbacspCookieName :: Lens' ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy (Val Text)
+elblbacspCookieName = lens _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicyCookieName (\s a -> s { _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicyCookieName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-AppCookieStickinessPolicy.html#cfn-elb-appcookiestickinesspolicy-policyname
+elblbacspPolicyName :: Lens' ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy (Val Text)
+elblbacspPolicyName = lens _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicyPolicyName (\s a -> s { _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicyPolicyName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-connectiondrainingpolicy.html
+
+module Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy. See
+-- | 'elasticLoadBalancingLoadBalancerConnectionDrainingPolicy' for a more
+-- | convenient constructor.
+data ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy =
+  ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy
+  { _elasticLoadBalancingLoadBalancerConnectionDrainingPolicyEnabled :: Val Bool'
+  , _elasticLoadBalancingLoadBalancerConnectionDrainingPolicyTimeout :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 57, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 57, omitNothingFields = True }
+
+-- | Constructor for
+-- | 'ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy' containing
+-- | required fields as arguments.
+elasticLoadBalancingLoadBalancerConnectionDrainingPolicy
+  :: Val Bool' -- ^ 'elblbcdpEnabled'
+  -> ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy
+elasticLoadBalancingLoadBalancerConnectionDrainingPolicy enabledarg =
+  ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy
+  { _elasticLoadBalancingLoadBalancerConnectionDrainingPolicyEnabled = enabledarg
+  , _elasticLoadBalancingLoadBalancerConnectionDrainingPolicyTimeout = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-connectiondrainingpolicy.html#cfn-elb-connectiondrainingpolicy-enabled
+elblbcdpEnabled :: Lens' ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy (Val Bool')
+elblbcdpEnabled = lens _elasticLoadBalancingLoadBalancerConnectionDrainingPolicyEnabled (\s a -> s { _elasticLoadBalancingLoadBalancerConnectionDrainingPolicyEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-connectiondrainingpolicy.html#cfn-elb-connectiondrainingpolicy-timeout
+elblbcdpTimeout :: Lens' ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy (Maybe (Val Integer'))
+elblbcdpTimeout = lens _elasticLoadBalancingLoadBalancerConnectionDrainingPolicyTimeout (\s a -> s { _elasticLoadBalancingLoadBalancerConnectionDrainingPolicyTimeout = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerConnectionSettings.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerConnectionSettings.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerConnectionSettings.hs
@@ -0,0 +1,44 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-connectionsettings.html
+
+module Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerConnectionSettings where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ElasticLoadBalancingLoadBalancerConnectionSettings. See
+-- | 'elasticLoadBalancingLoadBalancerConnectionSettings' for a more
+-- | convenient constructor.
+data ElasticLoadBalancingLoadBalancerConnectionSettings =
+  ElasticLoadBalancingLoadBalancerConnectionSettings
+  { _elasticLoadBalancingLoadBalancerConnectionSettingsIdleTimeout :: Val Integer'
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingLoadBalancerConnectionSettings where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 51, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingLoadBalancerConnectionSettings where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 51, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingLoadBalancerConnectionSettings'
+-- | containing required fields as arguments.
+elasticLoadBalancingLoadBalancerConnectionSettings
+  :: Val Integer' -- ^ 'elblbcsIdleTimeout'
+  -> ElasticLoadBalancingLoadBalancerConnectionSettings
+elasticLoadBalancingLoadBalancerConnectionSettings idleTimeoutarg =
+  ElasticLoadBalancingLoadBalancerConnectionSettings
+  { _elasticLoadBalancingLoadBalancerConnectionSettingsIdleTimeout = idleTimeoutarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-connectionsettings.html#cfn-elb-connectionsettings-idletimeout
+elblbcsIdleTimeout :: Lens' ElasticLoadBalancingLoadBalancerConnectionSettings (Val Integer')
+elblbcsIdleTimeout = lens _elasticLoadBalancingLoadBalancerConnectionSettingsIdleTimeout (\s a -> s { _elasticLoadBalancingLoadBalancerConnectionSettingsIdleTimeout = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerHealthCheck.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerHealthCheck.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerHealthCheck.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-health-check.html
+
+module Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerHealthCheck where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ElasticLoadBalancingLoadBalancerHealthCheck. See
+-- | 'elasticLoadBalancingLoadBalancerHealthCheck' for a more convenient
+-- | constructor.
+data ElasticLoadBalancingLoadBalancerHealthCheck =
+  ElasticLoadBalancingLoadBalancerHealthCheck
+  { _elasticLoadBalancingLoadBalancerHealthCheckHealthyThreshold :: Val Text
+  , _elasticLoadBalancingLoadBalancerHealthCheckInterval :: Val Text
+  , _elasticLoadBalancingLoadBalancerHealthCheckTarget :: Val Text
+  , _elasticLoadBalancingLoadBalancerHealthCheckTimeout :: Val Text
+  , _elasticLoadBalancingLoadBalancerHealthCheckUnhealthyThreshold :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingLoadBalancerHealthCheck where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 44, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingLoadBalancerHealthCheck where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 44, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingLoadBalancerHealthCheck' containing
+-- | required fields as arguments.
+elasticLoadBalancingLoadBalancerHealthCheck
+  :: Val Text -- ^ 'elblbhcHealthyThreshold'
+  -> Val Text -- ^ 'elblbhcInterval'
+  -> Val Text -- ^ 'elblbhcTarget'
+  -> Val Text -- ^ 'elblbhcTimeout'
+  -> Val Text -- ^ 'elblbhcUnhealthyThreshold'
+  -> ElasticLoadBalancingLoadBalancerHealthCheck
+elasticLoadBalancingLoadBalancerHealthCheck healthyThresholdarg intervalarg targetarg timeoutarg unhealthyThresholdarg =
+  ElasticLoadBalancingLoadBalancerHealthCheck
+  { _elasticLoadBalancingLoadBalancerHealthCheckHealthyThreshold = healthyThresholdarg
+  , _elasticLoadBalancingLoadBalancerHealthCheckInterval = intervalarg
+  , _elasticLoadBalancingLoadBalancerHealthCheckTarget = targetarg
+  , _elasticLoadBalancingLoadBalancerHealthCheckTimeout = timeoutarg
+  , _elasticLoadBalancingLoadBalancerHealthCheckUnhealthyThreshold = unhealthyThresholdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-health-check.html#cfn-elb-healthcheck-healthythreshold
+elblbhcHealthyThreshold :: Lens' ElasticLoadBalancingLoadBalancerHealthCheck (Val Text)
+elblbhcHealthyThreshold = lens _elasticLoadBalancingLoadBalancerHealthCheckHealthyThreshold (\s a -> s { _elasticLoadBalancingLoadBalancerHealthCheckHealthyThreshold = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-health-check.html#cfn-elb-healthcheck-interval
+elblbhcInterval :: Lens' ElasticLoadBalancingLoadBalancerHealthCheck (Val Text)
+elblbhcInterval = lens _elasticLoadBalancingLoadBalancerHealthCheckInterval (\s a -> s { _elasticLoadBalancingLoadBalancerHealthCheckInterval = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-health-check.html#cfn-elb-healthcheck-target
+elblbhcTarget :: Lens' ElasticLoadBalancingLoadBalancerHealthCheck (Val Text)
+elblbhcTarget = lens _elasticLoadBalancingLoadBalancerHealthCheckTarget (\s a -> s { _elasticLoadBalancingLoadBalancerHealthCheckTarget = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-health-check.html#cfn-elb-healthcheck-timeout
+elblbhcTimeout :: Lens' ElasticLoadBalancingLoadBalancerHealthCheck (Val Text)
+elblbhcTimeout = lens _elasticLoadBalancingLoadBalancerHealthCheckTimeout (\s a -> s { _elasticLoadBalancingLoadBalancerHealthCheckTimeout = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-health-check.html#cfn-elb-healthcheck-unhealthythreshold
+elblbhcUnhealthyThreshold :: Lens' ElasticLoadBalancingLoadBalancerHealthCheck (Val Text)
+elblbhcUnhealthyThreshold = lens _elasticLoadBalancingLoadBalancerHealthCheckUnhealthyThreshold (\s a -> s { _elasticLoadBalancingLoadBalancerHealthCheckUnhealthyThreshold = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-LBCookieStickinessPolicy.html
+
+module Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy. See
+-- | 'elasticLoadBalancingLoadBalancerLBCookieStickinessPolicy' for a more
+-- | convenient constructor.
+data ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy =
+  ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy
+  { _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicyCookieExpirationPeriod :: Maybe (Val Text)
+  , _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicyPolicyName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 57, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 57, omitNothingFields = True }
+
+-- | Constructor for
+-- | 'ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy' containing
+-- | required fields as arguments.
+elasticLoadBalancingLoadBalancerLBCookieStickinessPolicy
+  :: ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy
+elasticLoadBalancingLoadBalancerLBCookieStickinessPolicy  =
+  ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy
+  { _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicyCookieExpirationPeriod = Nothing
+  , _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicyPolicyName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-LBCookieStickinessPolicy.html#cfn-elb-lbcookiestickinesspolicy-cookieexpirationperiod
+elblblbcspCookieExpirationPeriod :: Lens' ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy (Maybe (Val Text))
+elblblbcspCookieExpirationPeriod = lens _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicyCookieExpirationPeriod (\s a -> s { _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicyCookieExpirationPeriod = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-LBCookieStickinessPolicy.html#cfn-elb-lbcookiestickinesspolicy-policyname
+elblblbcspPolicyName :: Lens' ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy (Maybe (Val Text))
+elblblbcspPolicyName = lens _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicyPolicyName (\s a -> s { _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicyPolicyName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerListeners.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerListeners.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerListeners.hs
@@ -0,0 +1,75 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-listener.html
+
+module Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerListeners where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ElasticLoadBalancingLoadBalancerListeners.
+-- | See 'elasticLoadBalancingLoadBalancerListeners' for a more convenient
+-- | constructor.
+data ElasticLoadBalancingLoadBalancerListeners =
+  ElasticLoadBalancingLoadBalancerListeners
+  { _elasticLoadBalancingLoadBalancerListenersInstancePort :: Val Text
+  , _elasticLoadBalancingLoadBalancerListenersInstanceProtocol :: Maybe (Val Text)
+  , _elasticLoadBalancingLoadBalancerListenersLoadBalancerPort :: Val Text
+  , _elasticLoadBalancingLoadBalancerListenersPolicyNames :: Maybe [Val Text]
+  , _elasticLoadBalancingLoadBalancerListenersProtocol :: Val Text
+  , _elasticLoadBalancingLoadBalancerListenersSSLCertificateId :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingLoadBalancerListeners where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingLoadBalancerListeners where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingLoadBalancerListeners' containing
+-- | required fields as arguments.
+elasticLoadBalancingLoadBalancerListeners
+  :: Val Text -- ^ 'elblblInstancePort'
+  -> Val Text -- ^ 'elblblLoadBalancerPort'
+  -> Val Text -- ^ 'elblblProtocol'
+  -> ElasticLoadBalancingLoadBalancerListeners
+elasticLoadBalancingLoadBalancerListeners instancePortarg loadBalancerPortarg protocolarg =
+  ElasticLoadBalancingLoadBalancerListeners
+  { _elasticLoadBalancingLoadBalancerListenersInstancePort = instancePortarg
+  , _elasticLoadBalancingLoadBalancerListenersInstanceProtocol = Nothing
+  , _elasticLoadBalancingLoadBalancerListenersLoadBalancerPort = loadBalancerPortarg
+  , _elasticLoadBalancingLoadBalancerListenersPolicyNames = Nothing
+  , _elasticLoadBalancingLoadBalancerListenersProtocol = protocolarg
+  , _elasticLoadBalancingLoadBalancerListenersSSLCertificateId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-listener.html#cfn-ec2-elb-listener-instanceport
+elblblInstancePort :: Lens' ElasticLoadBalancingLoadBalancerListeners (Val Text)
+elblblInstancePort = lens _elasticLoadBalancingLoadBalancerListenersInstancePort (\s a -> s { _elasticLoadBalancingLoadBalancerListenersInstancePort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-listener.html#cfn-ec2-elb-listener-instanceprotocol
+elblblInstanceProtocol :: Lens' ElasticLoadBalancingLoadBalancerListeners (Maybe (Val Text))
+elblblInstanceProtocol = lens _elasticLoadBalancingLoadBalancerListenersInstanceProtocol (\s a -> s { _elasticLoadBalancingLoadBalancerListenersInstanceProtocol = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-listener.html#cfn-ec2-elb-listener-loadbalancerport
+elblblLoadBalancerPort :: Lens' ElasticLoadBalancingLoadBalancerListeners (Val Text)
+elblblLoadBalancerPort = lens _elasticLoadBalancingLoadBalancerListenersLoadBalancerPort (\s a -> s { _elasticLoadBalancingLoadBalancerListenersLoadBalancerPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-listener.html#cfn-ec2-elb-listener-policynames
+elblblPolicyNames :: Lens' ElasticLoadBalancingLoadBalancerListeners (Maybe [Val Text])
+elblblPolicyNames = lens _elasticLoadBalancingLoadBalancerListenersPolicyNames (\s a -> s { _elasticLoadBalancingLoadBalancerListenersPolicyNames = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-listener.html#cfn-ec2-elb-listener-protocol
+elblblProtocol :: Lens' ElasticLoadBalancingLoadBalancerListeners (Val Text)
+elblblProtocol = lens _elasticLoadBalancingLoadBalancerListenersProtocol (\s a -> s { _elasticLoadBalancingLoadBalancerListenersProtocol = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-listener.html#cfn-ec2-elb-listener-sslcertificateid
+elblblSSLCertificateId :: Lens' ElasticLoadBalancingLoadBalancerListeners (Maybe (Val Text))
+elblblSSLCertificateId = lens _elasticLoadBalancingLoadBalancerListenersSSLCertificateId (\s a -> s { _elasticLoadBalancingLoadBalancerListenersSSLCertificateId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerPolicies.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerPolicies.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingLoadBalancerPolicies.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-policy.html
+
+module Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerPolicies where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ElasticLoadBalancingLoadBalancerPolicies.
+-- | See 'elasticLoadBalancingLoadBalancerPolicies' for a more convenient
+-- | constructor.
+data ElasticLoadBalancingLoadBalancerPolicies =
+  ElasticLoadBalancingLoadBalancerPolicies
+  { _elasticLoadBalancingLoadBalancerPoliciesAttributes :: [Object]
+  , _elasticLoadBalancingLoadBalancerPoliciesInstancePorts :: Maybe [Val Text]
+  , _elasticLoadBalancingLoadBalancerPoliciesLoadBalancerPorts :: Maybe [Val Text]
+  , _elasticLoadBalancingLoadBalancerPoliciesPolicyName :: Val Text
+  , _elasticLoadBalancingLoadBalancerPoliciesPolicyType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingLoadBalancerPolicies where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingLoadBalancerPolicies where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingLoadBalancerPolicies' containing
+-- | required fields as arguments.
+elasticLoadBalancingLoadBalancerPolicies
+  :: [Object] -- ^ 'elblbpAttributes'
+  -> Val Text -- ^ 'elblbpPolicyName'
+  -> Val Text -- ^ 'elblbpPolicyType'
+  -> ElasticLoadBalancingLoadBalancerPolicies
+elasticLoadBalancingLoadBalancerPolicies attributesarg policyNamearg policyTypearg =
+  ElasticLoadBalancingLoadBalancerPolicies
+  { _elasticLoadBalancingLoadBalancerPoliciesAttributes = attributesarg
+  , _elasticLoadBalancingLoadBalancerPoliciesInstancePorts = Nothing
+  , _elasticLoadBalancingLoadBalancerPoliciesLoadBalancerPorts = Nothing
+  , _elasticLoadBalancingLoadBalancerPoliciesPolicyName = policyNamearg
+  , _elasticLoadBalancingLoadBalancerPoliciesPolicyType = policyTypearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-policy.html#cfn-ec2-elb-policy-attributes
+elblbpAttributes :: Lens' ElasticLoadBalancingLoadBalancerPolicies [Object]
+elblbpAttributes = lens _elasticLoadBalancingLoadBalancerPoliciesAttributes (\s a -> s { _elasticLoadBalancingLoadBalancerPoliciesAttributes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-policy.html#cfn-ec2-elb-policy-instanceports
+elblbpInstancePorts :: Lens' ElasticLoadBalancingLoadBalancerPolicies (Maybe [Val Text])
+elblbpInstancePorts = lens _elasticLoadBalancingLoadBalancerPoliciesInstancePorts (\s a -> s { _elasticLoadBalancingLoadBalancerPoliciesInstancePorts = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-policy.html#cfn-ec2-elb-policy-loadbalancerports
+elblbpLoadBalancerPorts :: Lens' ElasticLoadBalancingLoadBalancerPolicies (Maybe [Val Text])
+elblbpLoadBalancerPorts = lens _elasticLoadBalancingLoadBalancerPoliciesLoadBalancerPorts (\s a -> s { _elasticLoadBalancingLoadBalancerPoliciesLoadBalancerPorts = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-policy.html#cfn-ec2-elb-policy-policyname
+elblbpPolicyName :: Lens' ElasticLoadBalancingLoadBalancerPolicies (Val Text)
+elblbpPolicyName = lens _elasticLoadBalancingLoadBalancerPoliciesPolicyName (\s a -> s { _elasticLoadBalancingLoadBalancerPoliciesPolicyName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-policy.html#cfn-ec2-elb-policy-policytype
+elblbpPolicyType :: Lens' ElasticLoadBalancingLoadBalancerPolicies (Val Text)
+elblbpPolicyType = lens _elasticLoadBalancingLoadBalancerPoliciesPolicyType (\s a -> s { _elasticLoadBalancingLoadBalancerPoliciesPolicyType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerAction.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerAction.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-defaultactions.html
+
+module Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerAction where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ElasticLoadBalancingV2ListenerAction. See
+-- | 'elasticLoadBalancingV2ListenerAction' for a more convenient constructor.
+data ElasticLoadBalancingV2ListenerAction =
+  ElasticLoadBalancingV2ListenerAction
+  { _elasticLoadBalancingV2ListenerActionTargetGroupArn :: Val Text
+  , _elasticLoadBalancingV2ListenerActionType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingV2ListenerAction where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingV2ListenerAction where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingV2ListenerAction' containing
+-- | required fields as arguments.
+elasticLoadBalancingV2ListenerAction
+  :: Val Text -- ^ 'elbvlaTargetGroupArn'
+  -> Val Text -- ^ 'elbvlaType'
+  -> ElasticLoadBalancingV2ListenerAction
+elasticLoadBalancingV2ListenerAction targetGroupArnarg typearg =
+  ElasticLoadBalancingV2ListenerAction
+  { _elasticLoadBalancingV2ListenerActionTargetGroupArn = targetGroupArnarg
+  , _elasticLoadBalancingV2ListenerActionType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-defaultactions.html#cfn-elasticloadbalancingv2-listener-defaultactions-targetgrouparn
+elbvlaTargetGroupArn :: Lens' ElasticLoadBalancingV2ListenerAction (Val Text)
+elbvlaTargetGroupArn = lens _elasticLoadBalancingV2ListenerActionTargetGroupArn (\s a -> s { _elasticLoadBalancingV2ListenerActionTargetGroupArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-defaultactions.html#cfn-elasticloadbalancingv2-listener-defaultactions-type
+elbvlaType :: Lens' ElasticLoadBalancingV2ListenerAction (Val Text)
+elbvlaType = lens _elasticLoadBalancingV2ListenerActionType (\s a -> s { _elasticLoadBalancingV2ListenerActionType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerCertificate.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerCertificate.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerCertificate.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-certificates.html
+
+module Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerCertificate where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ElasticLoadBalancingV2ListenerCertificate.
+-- | See 'elasticLoadBalancingV2ListenerCertificate' for a more convenient
+-- | constructor.
+data ElasticLoadBalancingV2ListenerCertificate =
+  ElasticLoadBalancingV2ListenerCertificate
+  { _elasticLoadBalancingV2ListenerCertificateCertificateArn :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingV2ListenerCertificate where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingV2ListenerCertificate where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingV2ListenerCertificate' containing
+-- | required fields as arguments.
+elasticLoadBalancingV2ListenerCertificate
+  :: ElasticLoadBalancingV2ListenerCertificate
+elasticLoadBalancingV2ListenerCertificate  =
+  ElasticLoadBalancingV2ListenerCertificate
+  { _elasticLoadBalancingV2ListenerCertificateCertificateArn = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-certificates.html#cfn-elasticloadbalancingv2-listener-certificates-certificatearn
+elbvlcCertificateArn :: Lens' ElasticLoadBalancingV2ListenerCertificate (Maybe (Val Text))
+elbvlcCertificateArn = lens _elasticLoadBalancingV2ListenerCertificateCertificateArn (\s a -> s { _elasticLoadBalancingV2ListenerCertificateCertificateArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerRuleAction.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerRuleAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerRuleAction.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html
+
+module Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerRuleAction where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ElasticLoadBalancingV2ListenerRuleAction.
+-- | See 'elasticLoadBalancingV2ListenerRuleAction' for a more convenient
+-- | constructor.
+data ElasticLoadBalancingV2ListenerRuleAction =
+  ElasticLoadBalancingV2ListenerRuleAction
+  { _elasticLoadBalancingV2ListenerRuleActionTargetGroupArn :: Val Text
+  , _elasticLoadBalancingV2ListenerRuleActionType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingV2ListenerRuleAction where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingV2ListenerRuleAction where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingV2ListenerRuleAction' containing
+-- | required fields as arguments.
+elasticLoadBalancingV2ListenerRuleAction
+  :: Val Text -- ^ 'elbvlraTargetGroupArn'
+  -> Val Text -- ^ 'elbvlraType'
+  -> ElasticLoadBalancingV2ListenerRuleAction
+elasticLoadBalancingV2ListenerRuleAction targetGroupArnarg typearg =
+  ElasticLoadBalancingV2ListenerRuleAction
+  { _elasticLoadBalancingV2ListenerRuleActionTargetGroupArn = targetGroupArnarg
+  , _elasticLoadBalancingV2ListenerRuleActionType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listener-actions-targetgrouparn
+elbvlraTargetGroupArn :: Lens' ElasticLoadBalancingV2ListenerRuleAction (Val Text)
+elbvlraTargetGroupArn = lens _elasticLoadBalancingV2ListenerRuleActionTargetGroupArn (\s a -> s { _elasticLoadBalancingV2ListenerRuleActionTargetGroupArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listener-actions-type
+elbvlraType :: Lens' ElasticLoadBalancingV2ListenerRuleAction (Val Text)
+elbvlraType = lens _elasticLoadBalancingV2ListenerRuleActionType (\s a -> s { _elasticLoadBalancingV2ListenerRuleActionType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerRuleRuleCondition.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerRuleRuleCondition.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2ListenerRuleRuleCondition.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html
+
+module Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerRuleRuleCondition where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ElasticLoadBalancingV2ListenerRuleRuleCondition. See
+-- | 'elasticLoadBalancingV2ListenerRuleRuleCondition' for a more convenient
+-- | constructor.
+data ElasticLoadBalancingV2ListenerRuleRuleCondition =
+  ElasticLoadBalancingV2ListenerRuleRuleCondition
+  { _elasticLoadBalancingV2ListenerRuleRuleConditionField :: Maybe (Val Text)
+  , _elasticLoadBalancingV2ListenerRuleRuleConditionValues :: Maybe [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingV2ListenerRuleRuleCondition where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 48, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingV2ListenerRuleRuleCondition where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 48, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingV2ListenerRuleRuleCondition'
+-- | containing required fields as arguments.
+elasticLoadBalancingV2ListenerRuleRuleCondition
+  :: ElasticLoadBalancingV2ListenerRuleRuleCondition
+elasticLoadBalancingV2ListenerRuleRuleCondition  =
+  ElasticLoadBalancingV2ListenerRuleRuleCondition
+  { _elasticLoadBalancingV2ListenerRuleRuleConditionField = Nothing
+  , _elasticLoadBalancingV2ListenerRuleRuleConditionValues = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-conditions-field
+elbvlrrcField :: Lens' ElasticLoadBalancingV2ListenerRuleRuleCondition (Maybe (Val Text))
+elbvlrrcField = lens _elasticLoadBalancingV2ListenerRuleRuleConditionField (\s a -> s { _elasticLoadBalancingV2ListenerRuleRuleConditionField = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-conditions-values
+elbvlrrcValues :: Lens' ElasticLoadBalancingV2ListenerRuleRuleCondition (Maybe [Val Text])
+elbvlrrcValues = lens _elasticLoadBalancingV2ListenerRuleRuleConditionValues (\s a -> s { _elasticLoadBalancingV2ListenerRuleRuleConditionValues = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-loadbalancerattributes.html
+
+module Stratosphere.ResourceProperties.ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute. See
+-- | 'elasticLoadBalancingV2LoadBalancerLoadBalancerAttribute' for a more
+-- | convenient constructor.
+data ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute =
+  ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute
+  { _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributeKey :: Maybe (Val Text)
+  , _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributeValue :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 56, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 56, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute'
+-- | containing required fields as arguments.
+elasticLoadBalancingV2LoadBalancerLoadBalancerAttribute
+  :: ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute
+elasticLoadBalancingV2LoadBalancerLoadBalancerAttribute  =
+  ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute
+  { _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributeKey = Nothing
+  , _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributeValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-loadbalancerattributes.html#cfn-elasticloadbalancingv2-loadbalancer-loadbalancerattributes-key
+elbvlblbaKey :: Lens' ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute (Maybe (Val Text))
+elbvlblbaKey = lens _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributeKey (\s a -> s { _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributeKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-loadbalancerattributes.html#cfn-elasticloadbalancingv2-loadbalancer-loadbalancerattributes-value
+elbvlblbaValue :: Lens' ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute (Maybe (Val Text))
+elbvlblbaValue = lens _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributeValue (\s a -> s { _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributeValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupMatcher.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupMatcher.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupMatcher.hs
@@ -0,0 +1,43 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-matcher.html
+
+module Stratosphere.ResourceProperties.ElasticLoadBalancingV2TargetGroupMatcher where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ElasticLoadBalancingV2TargetGroupMatcher.
+-- | See 'elasticLoadBalancingV2TargetGroupMatcher' for a more convenient
+-- | constructor.
+data ElasticLoadBalancingV2TargetGroupMatcher =
+  ElasticLoadBalancingV2TargetGroupMatcher
+  { _elasticLoadBalancingV2TargetGroupMatcherHttpCode :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingV2TargetGroupMatcher where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingV2TargetGroupMatcher where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingV2TargetGroupMatcher' containing
+-- | required fields as arguments.
+elasticLoadBalancingV2TargetGroupMatcher
+  :: Val Text -- ^ 'elbvtgmHttpCode'
+  -> ElasticLoadBalancingV2TargetGroupMatcher
+elasticLoadBalancingV2TargetGroupMatcher httpCodearg =
+  ElasticLoadBalancingV2TargetGroupMatcher
+  { _elasticLoadBalancingV2TargetGroupMatcherHttpCode = httpCodearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-matcher.html#cfn-elasticloadbalancingv2-targetgroup-matcher-httpcode
+elbvtgmHttpCode :: Lens' ElasticLoadBalancingV2TargetGroupMatcher (Val Text)
+elbvtgmHttpCode = lens _elasticLoadBalancingV2TargetGroupMatcherHttpCode (\s a -> s { _elasticLoadBalancingV2TargetGroupMatcherHttpCode = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupTargetDescription.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupTargetDescription.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupTargetDescription.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-targetdescription.html
+
+module Stratosphere.ResourceProperties.ElasticLoadBalancingV2TargetGroupTargetDescription where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ElasticLoadBalancingV2TargetGroupTargetDescription. See
+-- | 'elasticLoadBalancingV2TargetGroupTargetDescription' for a more
+-- | convenient constructor.
+data ElasticLoadBalancingV2TargetGroupTargetDescription =
+  ElasticLoadBalancingV2TargetGroupTargetDescription
+  { _elasticLoadBalancingV2TargetGroupTargetDescriptionId :: Val Text
+  , _elasticLoadBalancingV2TargetGroupTargetDescriptionPort :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingV2TargetGroupTargetDescription where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 51, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingV2TargetGroupTargetDescription where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 51, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingV2TargetGroupTargetDescription'
+-- | containing required fields as arguments.
+elasticLoadBalancingV2TargetGroupTargetDescription
+  :: Val Text -- ^ 'elbvtgtdId'
+  -> ElasticLoadBalancingV2TargetGroupTargetDescription
+elasticLoadBalancingV2TargetGroupTargetDescription idarg =
+  ElasticLoadBalancingV2TargetGroupTargetDescription
+  { _elasticLoadBalancingV2TargetGroupTargetDescriptionId = idarg
+  , _elasticLoadBalancingV2TargetGroupTargetDescriptionPort = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-targetdescription.html#cfn-elasticloadbalancingv2-targetgroup-targetdescription-id
+elbvtgtdId :: Lens' ElasticLoadBalancingV2TargetGroupTargetDescription (Val Text)
+elbvtgtdId = lens _elasticLoadBalancingV2TargetGroupTargetDescriptionId (\s a -> s { _elasticLoadBalancingV2TargetGroupTargetDescriptionId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-targetdescription.html#cfn-elasticloadbalancingv2-targetgroup-targetdescription-port
+elbvtgtdPort :: Lens' ElasticLoadBalancingV2TargetGroupTargetDescription (Maybe (Val Integer'))
+elbvtgtdPort = lens _elasticLoadBalancingV2TargetGroupTargetDescriptionPort (\s a -> s { _elasticLoadBalancingV2TargetGroupTargetDescriptionPort = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupTargetGroupAttribute.hs b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupTargetGroupAttribute.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticLoadBalancingV2TargetGroupTargetGroupAttribute.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-targetgroupattributes.html
+
+module Stratosphere.ResourceProperties.ElasticLoadBalancingV2TargetGroupTargetGroupAttribute where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ElasticLoadBalancingV2TargetGroupTargetGroupAttribute. See
+-- | 'elasticLoadBalancingV2TargetGroupTargetGroupAttribute' for a more
+-- | convenient constructor.
+data ElasticLoadBalancingV2TargetGroupTargetGroupAttribute =
+  ElasticLoadBalancingV2TargetGroupTargetGroupAttribute
+  { _elasticLoadBalancingV2TargetGroupTargetGroupAttributeKey :: Maybe (Val Text)
+  , _elasticLoadBalancingV2TargetGroupTargetGroupAttributeValue :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingV2TargetGroupTargetGroupAttribute where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 54, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingV2TargetGroupTargetGroupAttribute where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 54, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingV2TargetGroupTargetGroupAttribute'
+-- | containing required fields as arguments.
+elasticLoadBalancingV2TargetGroupTargetGroupAttribute
+  :: ElasticLoadBalancingV2TargetGroupTargetGroupAttribute
+elasticLoadBalancingV2TargetGroupTargetGroupAttribute  =
+  ElasticLoadBalancingV2TargetGroupTargetGroupAttribute
+  { _elasticLoadBalancingV2TargetGroupTargetGroupAttributeKey = Nothing
+  , _elasticLoadBalancingV2TargetGroupTargetGroupAttributeValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-targetgroupattributes.html#cfn-elasticloadbalancingv2-targetgroup-targetgroupattributes-key
+elbvtgtgaKey :: Lens' ElasticLoadBalancingV2TargetGroupTargetGroupAttribute (Maybe (Val Text))
+elbvtgtgaKey = lens _elasticLoadBalancingV2TargetGroupTargetGroupAttributeKey (\s a -> s { _elasticLoadBalancingV2TargetGroupTargetGroupAttributeKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-targetgroupattributes.html#cfn-elasticloadbalancingv2-targetgroup-targetgroupattributes-value
+elbvtgtgaValue :: Lens' ElasticLoadBalancingV2TargetGroupTargetGroupAttribute (Maybe (Val Text))
+elbvtgtgaValue = lens _elasticLoadBalancingV2TargetGroupTargetGroupAttributeValue (\s a -> s { _elasticLoadBalancingV2TargetGroupTargetGroupAttributeValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainEBSOptions.hs b/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainEBSOptions.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainEBSOptions.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-ebsoptions.html
+
+module Stratosphere.ResourceProperties.ElasticsearchDomainEBSOptions where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ElasticsearchDomainEBSOptions. See
+-- | 'elasticsearchDomainEBSOptions' for a more convenient constructor.
+data ElasticsearchDomainEBSOptions =
+  ElasticsearchDomainEBSOptions
+  { _elasticsearchDomainEBSOptionsEBSEnabled :: Maybe (Val Bool')
+  , _elasticsearchDomainEBSOptionsIops :: Maybe (Val Integer')
+  , _elasticsearchDomainEBSOptionsVolumeSize :: Maybe (Val Integer')
+  , _elasticsearchDomainEBSOptionsVolumeType :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticsearchDomainEBSOptions where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+instance FromJSON ElasticsearchDomainEBSOptions where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+-- | Constructor for 'ElasticsearchDomainEBSOptions' containing required
+-- | fields as arguments.
+elasticsearchDomainEBSOptions
+  :: ElasticsearchDomainEBSOptions
+elasticsearchDomainEBSOptions  =
+  ElasticsearchDomainEBSOptions
+  { _elasticsearchDomainEBSOptionsEBSEnabled = Nothing
+  , _elasticsearchDomainEBSOptionsIops = Nothing
+  , _elasticsearchDomainEBSOptionsVolumeSize = Nothing
+  , _elasticsearchDomainEBSOptionsVolumeType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-ebsoptions.html#cfn-elasticsearch-domain-ebsoptions-ebsenabled
+edebsoEBSEnabled :: Lens' ElasticsearchDomainEBSOptions (Maybe (Val Bool'))
+edebsoEBSEnabled = lens _elasticsearchDomainEBSOptionsEBSEnabled (\s a -> s { _elasticsearchDomainEBSOptionsEBSEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-ebsoptions.html#cfn-elasticsearch-domain-ebsoptions-iops
+edebsoIops :: Lens' ElasticsearchDomainEBSOptions (Maybe (Val Integer'))
+edebsoIops = lens _elasticsearchDomainEBSOptionsIops (\s a -> s { _elasticsearchDomainEBSOptionsIops = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-ebsoptions.html#cfn-elasticsearch-domain-ebsoptions-volumesize
+edebsoVolumeSize :: Lens' ElasticsearchDomainEBSOptions (Maybe (Val Integer'))
+edebsoVolumeSize = lens _elasticsearchDomainEBSOptionsVolumeSize (\s a -> s { _elasticsearchDomainEBSOptionsVolumeSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-ebsoptions.html#cfn-elasticsearch-domain-ebsoptions-volumetype
+edebsoVolumeType :: Lens' ElasticsearchDomainEBSOptions (Maybe (Val Text))
+edebsoVolumeType = lens _elasticsearchDomainEBSOptionsVolumeType (\s a -> s { _elasticsearchDomainEBSOptionsVolumeType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainElasticsearchClusterConfig.hs b/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainElasticsearchClusterConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainElasticsearchClusterConfig.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html
+
+module Stratosphere.ResourceProperties.ElasticsearchDomainElasticsearchClusterConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | ElasticsearchDomainElasticsearchClusterConfig. See
+-- | 'elasticsearchDomainElasticsearchClusterConfig' for a more convenient
+-- | constructor.
+data ElasticsearchDomainElasticsearchClusterConfig =
+  ElasticsearchDomainElasticsearchClusterConfig
+  { _elasticsearchDomainElasticsearchClusterConfigDedicatedMasterCount :: Maybe (Val Integer')
+  , _elasticsearchDomainElasticsearchClusterConfigDedicatedMasterEnabled :: Maybe (Val Bool')
+  , _elasticsearchDomainElasticsearchClusterConfigDedicatedMasterType :: Maybe (Val Text)
+  , _elasticsearchDomainElasticsearchClusterConfigInstanceCount :: Maybe (Val Integer')
+  , _elasticsearchDomainElasticsearchClusterConfigInstanceType :: Maybe (Val Text)
+  , _elasticsearchDomainElasticsearchClusterConfigZoneAwarenessEnabled :: Maybe (Val Bool')
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticsearchDomainElasticsearchClusterConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 46, omitNothingFields = True }
+
+instance FromJSON ElasticsearchDomainElasticsearchClusterConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 46, omitNothingFields = True }
+
+-- | Constructor for 'ElasticsearchDomainElasticsearchClusterConfig'
+-- | containing required fields as arguments.
+elasticsearchDomainElasticsearchClusterConfig
+  :: ElasticsearchDomainElasticsearchClusterConfig
+elasticsearchDomainElasticsearchClusterConfig  =
+  ElasticsearchDomainElasticsearchClusterConfig
+  { _elasticsearchDomainElasticsearchClusterConfigDedicatedMasterCount = Nothing
+  , _elasticsearchDomainElasticsearchClusterConfigDedicatedMasterEnabled = Nothing
+  , _elasticsearchDomainElasticsearchClusterConfigDedicatedMasterType = Nothing
+  , _elasticsearchDomainElasticsearchClusterConfigInstanceCount = Nothing
+  , _elasticsearchDomainElasticsearchClusterConfigInstanceType = Nothing
+  , _elasticsearchDomainElasticsearchClusterConfigZoneAwarenessEnabled = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html#cfn-elasticsearch-domain-elasticseachclusterconfig-dedicatedmastercount
+edeccDedicatedMasterCount :: Lens' ElasticsearchDomainElasticsearchClusterConfig (Maybe (Val Integer'))
+edeccDedicatedMasterCount = lens _elasticsearchDomainElasticsearchClusterConfigDedicatedMasterCount (\s a -> s { _elasticsearchDomainElasticsearchClusterConfigDedicatedMasterCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html#cfn-elasticsearch-domain-elasticseachclusterconfig-dedicatedmasterenabled
+edeccDedicatedMasterEnabled :: Lens' ElasticsearchDomainElasticsearchClusterConfig (Maybe (Val Bool'))
+edeccDedicatedMasterEnabled = lens _elasticsearchDomainElasticsearchClusterConfigDedicatedMasterEnabled (\s a -> s { _elasticsearchDomainElasticsearchClusterConfigDedicatedMasterEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html#cfn-elasticsearch-domain-elasticseachclusterconfig-dedicatedmastertype
+edeccDedicatedMasterType :: Lens' ElasticsearchDomainElasticsearchClusterConfig (Maybe (Val Text))
+edeccDedicatedMasterType = lens _elasticsearchDomainElasticsearchClusterConfigDedicatedMasterType (\s a -> s { _elasticsearchDomainElasticsearchClusterConfigDedicatedMasterType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html#cfn-elasticsearch-domain-elasticseachclusterconfig-instancecount
+edeccInstanceCount :: Lens' ElasticsearchDomainElasticsearchClusterConfig (Maybe (Val Integer'))
+edeccInstanceCount = lens _elasticsearchDomainElasticsearchClusterConfigInstanceCount (\s a -> s { _elasticsearchDomainElasticsearchClusterConfigInstanceCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html#cfn-elasticsearch-domain-elasticseachclusterconfig-instnacetype
+edeccInstanceType :: Lens' ElasticsearchDomainElasticsearchClusterConfig (Maybe (Val Text))
+edeccInstanceType = lens _elasticsearchDomainElasticsearchClusterConfigInstanceType (\s a -> s { _elasticsearchDomainElasticsearchClusterConfigInstanceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html#cfn-elasticsearch-domain-elasticseachclusterconfig-zoneawarenessenabled
+edeccZoneAwarenessEnabled :: Lens' ElasticsearchDomainElasticsearchClusterConfig (Maybe (Val Bool'))
+edeccZoneAwarenessEnabled = lens _elasticsearchDomainElasticsearchClusterConfigZoneAwarenessEnabled (\s a -> s { _elasticsearchDomainElasticsearchClusterConfigZoneAwarenessEnabled = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainSnapshotOptions.hs b/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainSnapshotOptions.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ElasticsearchDomainSnapshotOptions.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-snapshotoptions.html
+
+module Stratosphere.ResourceProperties.ElasticsearchDomainSnapshotOptions where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ElasticsearchDomainSnapshotOptions. See
+-- | 'elasticsearchDomainSnapshotOptions' for a more convenient constructor.
+data ElasticsearchDomainSnapshotOptions =
+  ElasticsearchDomainSnapshotOptions
+  { _elasticsearchDomainSnapshotOptionsAutomatedSnapshotStartHour :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticsearchDomainSnapshotOptions where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+instance FromJSON ElasticsearchDomainSnapshotOptions where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+-- | Constructor for 'ElasticsearchDomainSnapshotOptions' containing required
+-- | fields as arguments.
+elasticsearchDomainSnapshotOptions
+  :: ElasticsearchDomainSnapshotOptions
+elasticsearchDomainSnapshotOptions  =
+  ElasticsearchDomainSnapshotOptions
+  { _elasticsearchDomainSnapshotOptionsAutomatedSnapshotStartHour = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-snapshotoptions.html#cfn-elasticsearch-domain-snapshotoptions-automatedsnapshotstarthour
+edsoAutomatedSnapshotStartHour :: Lens' ElasticsearchDomainSnapshotOptions (Maybe (Val Integer'))
+edsoAutomatedSnapshotStartHour = lens _elasticsearchDomainSnapshotOptionsAutomatedSnapshotStartHour (\s a -> s { _elasticsearchDomainSnapshotOptionsAutomatedSnapshotStartHour = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EventsRuleTarget.hs b/library-gen/Stratosphere/ResourceProperties/EventsRuleTarget.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EventsRuleTarget.hs
@@ -0,0 +1,61 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-target.html
+
+module Stratosphere.ResourceProperties.EventsRuleTarget where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EventsRuleTarget. See 'eventsRuleTarget'
+-- | for a more convenient constructor.
+data EventsRuleTarget =
+  EventsRuleTarget
+  { _eventsRuleTargetArn :: Val Text
+  , _eventsRuleTargetId :: Val Text
+  , _eventsRuleTargetInput :: Maybe (Val Text)
+  , _eventsRuleTargetInputPath :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EventsRuleTarget where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+instance FromJSON EventsRuleTarget where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+-- | Constructor for 'EventsRuleTarget' containing required fields as
+-- | arguments.
+eventsRuleTarget
+  :: Val Text -- ^ 'ertArn'
+  -> Val Text -- ^ 'ertId'
+  -> EventsRuleTarget
+eventsRuleTarget arnarg idarg =
+  EventsRuleTarget
+  { _eventsRuleTargetArn = arnarg
+  , _eventsRuleTargetId = idarg
+  , _eventsRuleTargetInput = Nothing
+  , _eventsRuleTargetInputPath = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-target.html#cfn-events-rule-target-arn
+ertArn :: Lens' EventsRuleTarget (Val Text)
+ertArn = lens _eventsRuleTargetArn (\s a -> s { _eventsRuleTargetArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-target.html#cfn-events-rule-target-id
+ertId :: Lens' EventsRuleTarget (Val Text)
+ertId = lens _eventsRuleTargetId (\s a -> s { _eventsRuleTargetId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-target.html#cfn-events-rule-target-input
+ertInput :: Lens' EventsRuleTarget (Maybe (Val Text))
+ertInput = lens _eventsRuleTargetInput (\s a -> s { _eventsRuleTargetInput = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-target.html#cfn-events-rule-target-inputpath
+ertInputPath :: Lens' EventsRuleTarget (Maybe (Val Text))
+ertInputPath = lens _eventsRuleTargetInputPath (\s a -> s { _eventsRuleTargetInputPath = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/GameLiftAliasRoutingStrategy.hs b/library-gen/Stratosphere/ResourceProperties/GameLiftAliasRoutingStrategy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/GameLiftAliasRoutingStrategy.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-alias-routingstrategy.html
+
+module Stratosphere.ResourceProperties.GameLiftAliasRoutingStrategy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for GameLiftAliasRoutingStrategy. See
+-- | 'gameLiftAliasRoutingStrategy' for a more convenient constructor.
+data GameLiftAliasRoutingStrategy =
+  GameLiftAliasRoutingStrategy
+  { _gameLiftAliasRoutingStrategyFleetId :: Maybe (Val Text)
+  , _gameLiftAliasRoutingStrategyMessage :: Maybe (Val Text)
+  , _gameLiftAliasRoutingStrategyType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON GameLiftAliasRoutingStrategy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+instance FromJSON GameLiftAliasRoutingStrategy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+-- | Constructor for 'GameLiftAliasRoutingStrategy' containing required fields
+-- | as arguments.
+gameLiftAliasRoutingStrategy
+  :: Val Text -- ^ 'glarsType'
+  -> GameLiftAliasRoutingStrategy
+gameLiftAliasRoutingStrategy typearg =
+  GameLiftAliasRoutingStrategy
+  { _gameLiftAliasRoutingStrategyFleetId = Nothing
+  , _gameLiftAliasRoutingStrategyMessage = Nothing
+  , _gameLiftAliasRoutingStrategyType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-alias-routingstrategy.html#cfn-gamelift-alias-routingstrategy-fleetid
+glarsFleetId :: Lens' GameLiftAliasRoutingStrategy (Maybe (Val Text))
+glarsFleetId = lens _gameLiftAliasRoutingStrategyFleetId (\s a -> s { _gameLiftAliasRoutingStrategyFleetId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-alias-routingstrategy.html#cfn-gamelift-alias-routingstrategy-message
+glarsMessage :: Lens' GameLiftAliasRoutingStrategy (Maybe (Val Text))
+glarsMessage = lens _gameLiftAliasRoutingStrategyMessage (\s a -> s { _gameLiftAliasRoutingStrategyMessage = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-alias-routingstrategy.html#cfn-gamelift-alias-routingstrategy-type
+glarsType :: Lens' GameLiftAliasRoutingStrategy (Val Text)
+glarsType = lens _gameLiftAliasRoutingStrategyType (\s a -> s { _gameLiftAliasRoutingStrategyType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/GameLiftBuildS3Location.hs b/library-gen/Stratosphere/ResourceProperties/GameLiftBuildS3Location.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/GameLiftBuildS3Location.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-build-storagelocation.html
+
+module Stratosphere.ResourceProperties.GameLiftBuildS3Location where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for GameLiftBuildS3Location. See
+-- | 'gameLiftBuildS3Location' for a more convenient constructor.
+data GameLiftBuildS3Location =
+  GameLiftBuildS3Location
+  { _gameLiftBuildS3LocationBucket :: Val Text
+  , _gameLiftBuildS3LocationKey :: Val Text
+  , _gameLiftBuildS3LocationRoleArn :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON GameLiftBuildS3Location where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+instance FromJSON GameLiftBuildS3Location where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+-- | Constructor for 'GameLiftBuildS3Location' containing required fields as
+-- | arguments.
+gameLiftBuildS3Location
+  :: Val Text -- ^ 'glbslBucket'
+  -> Val Text -- ^ 'glbslKey'
+  -> Val Text -- ^ 'glbslRoleArn'
+  -> GameLiftBuildS3Location
+gameLiftBuildS3Location bucketarg keyarg roleArnarg =
+  GameLiftBuildS3Location
+  { _gameLiftBuildS3LocationBucket = bucketarg
+  , _gameLiftBuildS3LocationKey = keyarg
+  , _gameLiftBuildS3LocationRoleArn = roleArnarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-build-storagelocation.html#cfn-gamelift-build-storage-bucket
+glbslBucket :: Lens' GameLiftBuildS3Location (Val Text)
+glbslBucket = lens _gameLiftBuildS3LocationBucket (\s a -> s { _gameLiftBuildS3LocationBucket = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-build-storagelocation.html#cfn-gamelift-build-storage-key
+glbslKey :: Lens' GameLiftBuildS3Location (Val Text)
+glbslKey = lens _gameLiftBuildS3LocationKey (\s a -> s { _gameLiftBuildS3LocationKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-build-storagelocation.html#cfn-gamelift-build-storage-rolearn
+glbslRoleArn :: Lens' GameLiftBuildS3Location (Val Text)
+glbslRoleArn = lens _gameLiftBuildS3LocationRoleArn (\s a -> s { _gameLiftBuildS3LocationRoleArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/GameLiftFleetIpPermission.hs b/library-gen/Stratosphere/ResourceProperties/GameLiftFleetIpPermission.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/GameLiftFleetIpPermission.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-ec2inboundpermission.html
+
+module Stratosphere.ResourceProperties.GameLiftFleetIpPermission where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for GameLiftFleetIpPermission. See
+-- | 'gameLiftFleetIpPermission' for a more convenient constructor.
+data GameLiftFleetIpPermission =
+  GameLiftFleetIpPermission
+  { _gameLiftFleetIpPermissionFromPort :: Val Integer'
+  , _gameLiftFleetIpPermissionIpRange :: Val Text
+  , _gameLiftFleetIpPermissionProtocol :: Val Text
+  , _gameLiftFleetIpPermissionToPort :: Val Integer'
+  } deriving (Show, Generic)
+
+instance ToJSON GameLiftFleetIpPermission where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+instance FromJSON GameLiftFleetIpPermission where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+-- | Constructor for 'GameLiftFleetIpPermission' containing required fields as
+-- | arguments.
+gameLiftFleetIpPermission
+  :: Val Integer' -- ^ 'glfipFromPort'
+  -> Val Text -- ^ 'glfipIpRange'
+  -> Val Text -- ^ 'glfipProtocol'
+  -> Val Integer' -- ^ 'glfipToPort'
+  -> GameLiftFleetIpPermission
+gameLiftFleetIpPermission fromPortarg ipRangearg protocolarg toPortarg =
+  GameLiftFleetIpPermission
+  { _gameLiftFleetIpPermissionFromPort = fromPortarg
+  , _gameLiftFleetIpPermissionIpRange = ipRangearg
+  , _gameLiftFleetIpPermissionProtocol = protocolarg
+  , _gameLiftFleetIpPermissionToPort = toPortarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-ec2inboundpermission.html#cfn-gamelift-fleet-ec2inboundpermissions-fromport
+glfipFromPort :: Lens' GameLiftFleetIpPermission (Val Integer')
+glfipFromPort = lens _gameLiftFleetIpPermissionFromPort (\s a -> s { _gameLiftFleetIpPermissionFromPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-ec2inboundpermission.html#cfn-gamelift-fleet-ec2inboundpermissions-iprange
+glfipIpRange :: Lens' GameLiftFleetIpPermission (Val Text)
+glfipIpRange = lens _gameLiftFleetIpPermissionIpRange (\s a -> s { _gameLiftFleetIpPermissionIpRange = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-ec2inboundpermission.html#cfn-gamelift-fleet-ec2inboundpermissions-protocol
+glfipProtocol :: Lens' GameLiftFleetIpPermission (Val Text)
+glfipProtocol = lens _gameLiftFleetIpPermissionProtocol (\s a -> s { _gameLiftFleetIpPermissionProtocol = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-ec2inboundpermission.html#cfn-gamelift-fleet-ec2inboundpermissions-toport
+glfipToPort :: Lens' GameLiftFleetIpPermission (Val Integer')
+glfipToPort = lens _gameLiftFleetIpPermissionToPort (\s a -> s { _gameLiftFleetIpPermissionToPort = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/HealthCheck.hs b/library-gen/Stratosphere/ResourceProperties/HealthCheck.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/HealthCheck.hs
+++ /dev/null
@@ -1,75 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The ElasticLoadBalancing HealthCheck is an embedded property of the
--- AWS::ElasticLoadBalancing::LoadBalancer type.
-
-module Stratosphere.ResourceProperties.HealthCheck where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for HealthCheck. See 'healthCheck' for a more
--- convenient constructor.
-data HealthCheck =
-  HealthCheck
-  { _healthCheckHealthyThreshold :: Val Text
-  , _healthCheckInterval :: Val Text
-  , _healthCheckTarget :: Val Text
-  , _healthCheckTimeout :: Val Text
-  , _healthCheckUnhealthyThreshold :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON HealthCheck where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
-
-instance FromJSON HealthCheck where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
-
--- | Constructor for 'HealthCheck' containing required fields as arguments.
-healthCheck
-  :: Val Text -- ^ 'hcHealthyThreshold'
-  -> Val Text -- ^ 'hcInterval'
-  -> Val Text -- ^ 'hcTarget'
-  -> Val Text -- ^ 'hcTimeout'
-  -> Val Text -- ^ 'hcUnhealthyThreshold'
-  -> HealthCheck
-healthCheck healthyThresholdarg intervalarg targetarg timeoutarg unhealthyThresholdarg =
-  HealthCheck
-  { _healthCheckHealthyThreshold = healthyThresholdarg
-  , _healthCheckInterval = intervalarg
-  , _healthCheckTarget = targetarg
-  , _healthCheckTimeout = timeoutarg
-  , _healthCheckUnhealthyThreshold = unhealthyThresholdarg
-  }
-
--- | Specifies the number of consecutive health probe successes required
--- before moving the instance to the Healthy state.
-hcHealthyThreshold :: Lens' HealthCheck (Val Text)
-hcHealthyThreshold = lens _healthCheckHealthyThreshold (\s a -> s { _healthCheckHealthyThreshold = a })
-
--- | Specifies the approximate interval, in seconds, between health checks of
--- an individual instance.
-hcInterval :: Lens' HealthCheck (Val Text)
-hcInterval = lens _healthCheckInterval (\s a -> s { _healthCheckInterval = a })
-
--- | Specifies the instance's protocol and port to check. The protocol can be
--- TCP, HTTP, HTTPS, or SSL. The range of valid ports is 1 through 65535.
-hcTarget :: Lens' HealthCheck (Val Text)
-hcTarget = lens _healthCheckTarget (\s a -> s { _healthCheckTarget = a })
-
--- | Specifies the amount of time, in seconds, during which no response means
--- a failed health probe. This value must be less than the value for Interval.
-hcTimeout :: Lens' HealthCheck (Val Text)
-hcTimeout = lens _healthCheckTimeout (\s a -> s { _healthCheckTimeout = a })
-
--- | Specifies the number of consecutive health probe failures required before
--- moving the instance to the Unhealthy state.
-hcUnhealthyThreshold :: Lens' HealthCheck (Val Text)
-hcUnhealthyThreshold = lens _healthCheckUnhealthyThreshold (\s a -> s { _healthCheckUnhealthyThreshold = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IAMGroupPolicy.hs b/library-gen/Stratosphere/ResourceProperties/IAMGroupPolicy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IAMGroupPolicy.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html
+
+module Stratosphere.ResourceProperties.IAMGroupPolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IAMGroupPolicy. See 'iamGroupPolicy' for a
+-- | more convenient constructor.
+data IAMGroupPolicy =
+  IAMGroupPolicy
+  { _iAMGroupPolicyPolicyDocument :: Object
+  , _iAMGroupPolicyPolicyName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IAMGroupPolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+instance FromJSON IAMGroupPolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+-- | Constructor for 'IAMGroupPolicy' containing required fields as arguments.
+iamGroupPolicy
+  :: Object -- ^ 'iamgpPolicyDocument'
+  -> Val Text -- ^ 'iamgpPolicyName'
+  -> IAMGroupPolicy
+iamGroupPolicy policyDocumentarg policyNamearg =
+  IAMGroupPolicy
+  { _iAMGroupPolicyPolicyDocument = policyDocumentarg
+  , _iAMGroupPolicyPolicyName = policyNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html#cfn-iam-policies-policydocument
+iamgpPolicyDocument :: Lens' IAMGroupPolicy Object
+iamgpPolicyDocument = lens _iAMGroupPolicyPolicyDocument (\s a -> s { _iAMGroupPolicyPolicyDocument = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html#cfn-iam-policies-policyname
+iamgpPolicyName :: Lens' IAMGroupPolicy (Val Text)
+iamgpPolicyName = lens _iAMGroupPolicyPolicyName (\s a -> s { _iAMGroupPolicyPolicyName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IAMPolicies.hs b/library-gen/Stratosphere/ResourceProperties/IAMPolicies.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/IAMPolicies.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Policies is a property of the AWS::IAM::Role, AWS::IAM::Group, and
--- AWS::IAM::User resources. The Policies property describes what actions are
--- allowed on what resources. For more information about IAM policies, see
--- Overview of Policies in IAM User Guide.
-
-module Stratosphere.ResourceProperties.IAMPolicies where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for IAMPolicies. See 'iamPolicies' for a more
--- convenient constructor.
-data IAMPolicies =
-  IAMPolicies
-  { _iAMPoliciesPolicyDocument :: Object
-  , _iAMPoliciesPolicyName :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON IAMPolicies where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
-
-instance FromJSON IAMPolicies where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
-
--- | Constructor for 'IAMPolicies' containing required fields as arguments.
-iamPolicies
-  :: Object -- ^ 'iampPolicyDocument'
-  -> Val Text -- ^ 'iampPolicyName'
-  -> IAMPolicies
-iamPolicies policyDocumentarg policyNamearg =
-  IAMPolicies
-  { _iAMPoliciesPolicyDocument = policyDocumentarg
-  , _iAMPoliciesPolicyName = policyNamearg
-  }
-
--- | A policy document that describes what actions are allowed on which
--- resources.
-iampPolicyDocument :: Lens' IAMPolicies Object
-iampPolicyDocument = lens _iAMPoliciesPolicyDocument (\s a -> s { _iAMPoliciesPolicyDocument = a })
-
--- | The name of the policy.
-iampPolicyName :: Lens' IAMPolicies (Val Text)
-iampPolicyName = lens _iAMPoliciesPolicyName (\s a -> s { _iAMPoliciesPolicyName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IAMRolePolicy.hs b/library-gen/Stratosphere/ResourceProperties/IAMRolePolicy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IAMRolePolicy.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html
+
+module Stratosphere.ResourceProperties.IAMRolePolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IAMRolePolicy. See 'iamRolePolicy' for a
+-- | more convenient constructor.
+data IAMRolePolicy =
+  IAMRolePolicy
+  { _iAMRolePolicyPolicyDocument :: Object
+  , _iAMRolePolicyPolicyName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IAMRolePolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+instance FromJSON IAMRolePolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+-- | Constructor for 'IAMRolePolicy' containing required fields as arguments.
+iamRolePolicy
+  :: Object -- ^ 'iamrpPolicyDocument'
+  -> Val Text -- ^ 'iamrpPolicyName'
+  -> IAMRolePolicy
+iamRolePolicy policyDocumentarg policyNamearg =
+  IAMRolePolicy
+  { _iAMRolePolicyPolicyDocument = policyDocumentarg
+  , _iAMRolePolicyPolicyName = policyNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html#cfn-iam-policies-policydocument
+iamrpPolicyDocument :: Lens' IAMRolePolicy Object
+iamrpPolicyDocument = lens _iAMRolePolicyPolicyDocument (\s a -> s { _iAMRolePolicyPolicyDocument = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html#cfn-iam-policies-policyname
+iamrpPolicyName :: Lens' IAMRolePolicy (Val Text)
+iamrpPolicyName = lens _iAMRolePolicyPolicyName (\s a -> s { _iAMRolePolicyPolicyName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IAMUserLoginProfile.hs b/library-gen/Stratosphere/ResourceProperties/IAMUserLoginProfile.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IAMUserLoginProfile.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user-loginprofile.html
+
+module Stratosphere.ResourceProperties.IAMUserLoginProfile where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IAMUserLoginProfile. See
+-- | 'iamUserLoginProfile' for a more convenient constructor.
+data IAMUserLoginProfile =
+  IAMUserLoginProfile
+  { _iAMUserLoginProfilePassword :: Val Text
+  , _iAMUserLoginProfilePasswordResetRequired :: Maybe (Val Bool')
+  } deriving (Show, Generic)
+
+instance ToJSON IAMUserLoginProfile where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+instance FromJSON IAMUserLoginProfile where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+-- | Constructor for 'IAMUserLoginProfile' containing required fields as
+-- | arguments.
+iamUserLoginProfile
+  :: Val Text -- ^ 'iamulpPassword'
+  -> IAMUserLoginProfile
+iamUserLoginProfile passwordarg =
+  IAMUserLoginProfile
+  { _iAMUserLoginProfilePassword = passwordarg
+  , _iAMUserLoginProfilePasswordResetRequired = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user-loginprofile.html#cfn-iam-user-loginprofile-password
+iamulpPassword :: Lens' IAMUserLoginProfile (Val Text)
+iamulpPassword = lens _iAMUserLoginProfilePassword (\s a -> s { _iAMUserLoginProfilePassword = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user-loginprofile.html#cfn-iam-user-loginprofile-passwordresetrequired
+iamulpPasswordResetRequired :: Lens' IAMUserLoginProfile (Maybe (Val Bool'))
+iamulpPasswordResetRequired = lens _iAMUserLoginProfilePasswordResetRequired (\s a -> s { _iAMUserLoginProfilePasswordResetRequired = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IAMUserPolicy.hs b/library-gen/Stratosphere/ResourceProperties/IAMUserPolicy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IAMUserPolicy.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html
+
+module Stratosphere.ResourceProperties.IAMUserPolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IAMUserPolicy. See 'iamUserPolicy' for a
+-- | more convenient constructor.
+data IAMUserPolicy =
+  IAMUserPolicy
+  { _iAMUserPolicyPolicyDocument :: Object
+  , _iAMUserPolicyPolicyName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IAMUserPolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+instance FromJSON IAMUserPolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+-- | Constructor for 'IAMUserPolicy' containing required fields as arguments.
+iamUserPolicy
+  :: Object -- ^ 'iamupPolicyDocument'
+  -> Val Text -- ^ 'iamupPolicyName'
+  -> IAMUserPolicy
+iamUserPolicy policyDocumentarg policyNamearg =
+  IAMUserPolicy
+  { _iAMUserPolicyPolicyDocument = policyDocumentarg
+  , _iAMUserPolicyPolicyName = policyNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html#cfn-iam-policies-policydocument
+iamupPolicyDocument :: Lens' IAMUserPolicy Object
+iamupPolicyDocument = lens _iAMUserPolicyPolicyDocument (\s a -> s { _iAMUserPolicyPolicyDocument = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html#cfn-iam-policies-policyname
+iamupPolicyName :: Lens' IAMUserPolicy (Val Text)
+iamupPolicyName = lens _iAMUserPolicyPolicyName (\s a -> s { _iAMUserPolicyPolicyName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTThingAttributePayload.hs b/library-gen/Stratosphere/ResourceProperties/IoTThingAttributePayload.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IoTThingAttributePayload.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-thing-attributepayload.html
+
+module Stratosphere.ResourceProperties.IoTThingAttributePayload where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IoTThingAttributePayload. See
+-- | 'ioTThingAttributePayload' for a more convenient constructor.
+data IoTThingAttributePayload =
+  IoTThingAttributePayload
+  { _ioTThingAttributePayloadAttributes :: Maybe Object
+  } deriving (Show, Generic)
+
+instance ToJSON IoTThingAttributePayload where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+instance FromJSON IoTThingAttributePayload where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+-- | Constructor for 'IoTThingAttributePayload' containing required fields as
+-- | arguments.
+ioTThingAttributePayload
+  :: IoTThingAttributePayload
+ioTThingAttributePayload  =
+  IoTThingAttributePayload
+  { _ioTThingAttributePayloadAttributes = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-thing-attributepayload.html#cfn-iot-thing-attributepayload-attributes
+ittapAttributes :: Lens' IoTThingAttributePayload (Maybe Object)
+ittapAttributes = lens _ioTThingAttributePayloadAttributes (\s a -> s { _ioTThingAttributePayloadAttributes = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleAction.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-actions.html
+
+module Stratosphere.ResourceProperties.IoTTopicRuleAction where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.IoTTopicRuleCloudwatchAlarmAction
+import Stratosphere.ResourceProperties.IoTTopicRuleCloudwatchMetricAction
+import Stratosphere.ResourceProperties.IoTTopicRuleDynamoDBAction
+import Stratosphere.ResourceProperties.IoTTopicRuleElasticsearchAction
+import Stratosphere.ResourceProperties.IoTTopicRuleFirehoseAction
+import Stratosphere.ResourceProperties.IoTTopicRuleKinesisAction
+import Stratosphere.ResourceProperties.IoTTopicRuleLambdaAction
+import Stratosphere.ResourceProperties.IoTTopicRuleRepublishAction
+import Stratosphere.ResourceProperties.IoTTopicRuleS3Action
+import Stratosphere.ResourceProperties.IoTTopicRuleSnsAction
+import Stratosphere.ResourceProperties.IoTTopicRuleSqsAction
+
+-- | Full data type definition for IoTTopicRuleAction. See
+-- | 'ioTTopicRuleAction' for a more convenient constructor.
+data IoTTopicRuleAction =
+  IoTTopicRuleAction
+  { _ioTTopicRuleActionCloudwatchAlarm :: Maybe IoTTopicRuleCloudwatchAlarmAction
+  , _ioTTopicRuleActionCloudwatchMetric :: Maybe IoTTopicRuleCloudwatchMetricAction
+  , _ioTTopicRuleActionDynamoDB :: Maybe IoTTopicRuleDynamoDBAction
+  , _ioTTopicRuleActionElasticsearch :: Maybe IoTTopicRuleElasticsearchAction
+  , _ioTTopicRuleActionFirehose :: Maybe IoTTopicRuleFirehoseAction
+  , _ioTTopicRuleActionKinesis :: Maybe IoTTopicRuleKinesisAction
+  , _ioTTopicRuleActionLambda :: Maybe IoTTopicRuleLambdaAction
+  , _ioTTopicRuleActionRepublish :: Maybe IoTTopicRuleRepublishAction
+  , _ioTTopicRuleActionS3 :: Maybe IoTTopicRuleS3Action
+  , _ioTTopicRuleActionSns :: Maybe IoTTopicRuleSnsAction
+  , _ioTTopicRuleActionSqs :: Maybe IoTTopicRuleSqsAction
+  } deriving (Show, Generic)
+
+instance ToJSON IoTTopicRuleAction where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+instance FromJSON IoTTopicRuleAction where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+-- | Constructor for 'IoTTopicRuleAction' containing required fields as
+-- | arguments.
+ioTTopicRuleAction
+  :: IoTTopicRuleAction
+ioTTopicRuleAction  =
+  IoTTopicRuleAction
+  { _ioTTopicRuleActionCloudwatchAlarm = Nothing
+  , _ioTTopicRuleActionCloudwatchMetric = Nothing
+  , _ioTTopicRuleActionDynamoDB = Nothing
+  , _ioTTopicRuleActionElasticsearch = Nothing
+  , _ioTTopicRuleActionFirehose = Nothing
+  , _ioTTopicRuleActionKinesis = Nothing
+  , _ioTTopicRuleActionLambda = Nothing
+  , _ioTTopicRuleActionRepublish = Nothing
+  , _ioTTopicRuleActionS3 = Nothing
+  , _ioTTopicRuleActionSns = Nothing
+  , _ioTTopicRuleActionSqs = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-actions.html#cfn-iot-action-cloudwatchalarm
+ittraCloudwatchAlarm :: Lens' IoTTopicRuleAction (Maybe IoTTopicRuleCloudwatchAlarmAction)
+ittraCloudwatchAlarm = lens _ioTTopicRuleActionCloudwatchAlarm (\s a -> s { _ioTTopicRuleActionCloudwatchAlarm = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-actions.html#cfn-iot-action-cloudwatchmetric
+ittraCloudwatchMetric :: Lens' IoTTopicRuleAction (Maybe IoTTopicRuleCloudwatchMetricAction)
+ittraCloudwatchMetric = lens _ioTTopicRuleActionCloudwatchMetric (\s a -> s { _ioTTopicRuleActionCloudwatchMetric = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-actions.html#cfn-iot-action-dynamodb
+ittraDynamoDB :: Lens' IoTTopicRuleAction (Maybe IoTTopicRuleDynamoDBAction)
+ittraDynamoDB = lens _ioTTopicRuleActionDynamoDB (\s a -> s { _ioTTopicRuleActionDynamoDB = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-actions.html#cfn-iot-action-elasticsearch
+ittraElasticsearch :: Lens' IoTTopicRuleAction (Maybe IoTTopicRuleElasticsearchAction)
+ittraElasticsearch = lens _ioTTopicRuleActionElasticsearch (\s a -> s { _ioTTopicRuleActionElasticsearch = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-actions.html#cfn-iot-action-firehose
+ittraFirehose :: Lens' IoTTopicRuleAction (Maybe IoTTopicRuleFirehoseAction)
+ittraFirehose = lens _ioTTopicRuleActionFirehose (\s a -> s { _ioTTopicRuleActionFirehose = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-actions.html#cfn-iot-action-kinesis
+ittraKinesis :: Lens' IoTTopicRuleAction (Maybe IoTTopicRuleKinesisAction)
+ittraKinesis = lens _ioTTopicRuleActionKinesis (\s a -> s { _ioTTopicRuleActionKinesis = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-actions.html#cfn-iot-action-lambda
+ittraLambda :: Lens' IoTTopicRuleAction (Maybe IoTTopicRuleLambdaAction)
+ittraLambda = lens _ioTTopicRuleActionLambda (\s a -> s { _ioTTopicRuleActionLambda = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-actions.html#cfn-iot-action-republish
+ittraRepublish :: Lens' IoTTopicRuleAction (Maybe IoTTopicRuleRepublishAction)
+ittraRepublish = lens _ioTTopicRuleActionRepublish (\s a -> s { _ioTTopicRuleActionRepublish = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-actions.html#cfn-iot-action-s3
+ittraS3 :: Lens' IoTTopicRuleAction (Maybe IoTTopicRuleS3Action)
+ittraS3 = lens _ioTTopicRuleActionS3 (\s a -> s { _ioTTopicRuleActionS3 = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-actions.html#cfn-iot-action-sns
+ittraSns :: Lens' IoTTopicRuleAction (Maybe IoTTopicRuleSnsAction)
+ittraSns = lens _ioTTopicRuleActionSns (\s a -> s { _ioTTopicRuleActionSns = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-actions.html#cfn-iot-action-sqs
+ittraSqs :: Lens' IoTTopicRuleAction (Maybe IoTTopicRuleSqsAction)
+ittraSqs = lens _ioTTopicRuleActionSqs (\s a -> s { _ioTTopicRuleActionSqs = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleCloudwatchAlarmAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleCloudwatchAlarmAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleCloudwatchAlarmAction.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-cloudwatchalarm.html
+
+module Stratosphere.ResourceProperties.IoTTopicRuleCloudwatchAlarmAction where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IoTTopicRuleCloudwatchAlarmAction. See
+-- | 'ioTTopicRuleCloudwatchAlarmAction' for a more convenient constructor.
+data IoTTopicRuleCloudwatchAlarmAction =
+  IoTTopicRuleCloudwatchAlarmAction
+  { _ioTTopicRuleCloudwatchAlarmActionAlarmName :: Val Text
+  , _ioTTopicRuleCloudwatchAlarmActionRoleArn :: Val Text
+  , _ioTTopicRuleCloudwatchAlarmActionStateReason :: Val Text
+  , _ioTTopicRuleCloudwatchAlarmActionStateValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IoTTopicRuleCloudwatchAlarmAction where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON IoTTopicRuleCloudwatchAlarmAction where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'IoTTopicRuleCloudwatchAlarmAction' containing required
+-- | fields as arguments.
+ioTTopicRuleCloudwatchAlarmAction
+  :: Val Text -- ^ 'ittrcaaAlarmName'
+  -> Val Text -- ^ 'ittrcaaRoleArn'
+  -> Val Text -- ^ 'ittrcaaStateReason'
+  -> Val Text -- ^ 'ittrcaaStateValue'
+  -> IoTTopicRuleCloudwatchAlarmAction
+ioTTopicRuleCloudwatchAlarmAction alarmNamearg roleArnarg stateReasonarg stateValuearg =
+  IoTTopicRuleCloudwatchAlarmAction
+  { _ioTTopicRuleCloudwatchAlarmActionAlarmName = alarmNamearg
+  , _ioTTopicRuleCloudwatchAlarmActionRoleArn = roleArnarg
+  , _ioTTopicRuleCloudwatchAlarmActionStateReason = stateReasonarg
+  , _ioTTopicRuleCloudwatchAlarmActionStateValue = stateValuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-cloudwatchalarm.html#cfn-iot-cloudwatchalarm-alarmname
+ittrcaaAlarmName :: Lens' IoTTopicRuleCloudwatchAlarmAction (Val Text)
+ittrcaaAlarmName = lens _ioTTopicRuleCloudwatchAlarmActionAlarmName (\s a -> s { _ioTTopicRuleCloudwatchAlarmActionAlarmName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-cloudwatchalarm.html#cfn-iot-cloudwatchalarm-rolearn
+ittrcaaRoleArn :: Lens' IoTTopicRuleCloudwatchAlarmAction (Val Text)
+ittrcaaRoleArn = lens _ioTTopicRuleCloudwatchAlarmActionRoleArn (\s a -> s { _ioTTopicRuleCloudwatchAlarmActionRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-cloudwatchalarm.html#cfn-iot-cloudwatchalarm-statereason
+ittrcaaStateReason :: Lens' IoTTopicRuleCloudwatchAlarmAction (Val Text)
+ittrcaaStateReason = lens _ioTTopicRuleCloudwatchAlarmActionStateReason (\s a -> s { _ioTTopicRuleCloudwatchAlarmActionStateReason = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-cloudwatchalarm.html#cfn-iot-cloudwatchalarm-statevalue
+ittrcaaStateValue :: Lens' IoTTopicRuleCloudwatchAlarmAction (Val Text)
+ittrcaaStateValue = lens _ioTTopicRuleCloudwatchAlarmActionStateValue (\s a -> s { _ioTTopicRuleCloudwatchAlarmActionStateValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleCloudwatchMetricAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleCloudwatchMetricAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleCloudwatchMetricAction.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-cloudwatchmetric.html
+
+module Stratosphere.ResourceProperties.IoTTopicRuleCloudwatchMetricAction where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IoTTopicRuleCloudwatchMetricAction. See
+-- | 'ioTTopicRuleCloudwatchMetricAction' for a more convenient constructor.
+data IoTTopicRuleCloudwatchMetricAction =
+  IoTTopicRuleCloudwatchMetricAction
+  { _ioTTopicRuleCloudwatchMetricActionMetricName :: Val Text
+  , _ioTTopicRuleCloudwatchMetricActionMetricNamespace :: Val Text
+  , _ioTTopicRuleCloudwatchMetricActionMetricTimestamp :: Maybe (Val Text)
+  , _ioTTopicRuleCloudwatchMetricActionMetricUnit :: Val Text
+  , _ioTTopicRuleCloudwatchMetricActionMetricValue :: Val Text
+  , _ioTTopicRuleCloudwatchMetricActionRoleArn :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IoTTopicRuleCloudwatchMetricAction where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+instance FromJSON IoTTopicRuleCloudwatchMetricAction where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+-- | Constructor for 'IoTTopicRuleCloudwatchMetricAction' containing required
+-- | fields as arguments.
+ioTTopicRuleCloudwatchMetricAction
+  :: Val Text -- ^ 'ittrcmaMetricName'
+  -> Val Text -- ^ 'ittrcmaMetricNamespace'
+  -> Val Text -- ^ 'ittrcmaMetricUnit'
+  -> Val Text -- ^ 'ittrcmaMetricValue'
+  -> Val Text -- ^ 'ittrcmaRoleArn'
+  -> IoTTopicRuleCloudwatchMetricAction
+ioTTopicRuleCloudwatchMetricAction metricNamearg metricNamespacearg metricUnitarg metricValuearg roleArnarg =
+  IoTTopicRuleCloudwatchMetricAction
+  { _ioTTopicRuleCloudwatchMetricActionMetricName = metricNamearg
+  , _ioTTopicRuleCloudwatchMetricActionMetricNamespace = metricNamespacearg
+  , _ioTTopicRuleCloudwatchMetricActionMetricTimestamp = Nothing
+  , _ioTTopicRuleCloudwatchMetricActionMetricUnit = metricUnitarg
+  , _ioTTopicRuleCloudwatchMetricActionMetricValue = metricValuearg
+  , _ioTTopicRuleCloudwatchMetricActionRoleArn = roleArnarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-cloudwatchmetric.html#cfn-iot-cloudwatchmetric-metricname
+ittrcmaMetricName :: Lens' IoTTopicRuleCloudwatchMetricAction (Val Text)
+ittrcmaMetricName = lens _ioTTopicRuleCloudwatchMetricActionMetricName (\s a -> s { _ioTTopicRuleCloudwatchMetricActionMetricName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-cloudwatchmetric.html#cfn-iot-cloudwatchmetric-metricnamespace
+ittrcmaMetricNamespace :: Lens' IoTTopicRuleCloudwatchMetricAction (Val Text)
+ittrcmaMetricNamespace = lens _ioTTopicRuleCloudwatchMetricActionMetricNamespace (\s a -> s { _ioTTopicRuleCloudwatchMetricActionMetricNamespace = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-cloudwatchmetric.html#cfn-iot-cloudwatchmetric-metrictimestamp
+ittrcmaMetricTimestamp :: Lens' IoTTopicRuleCloudwatchMetricAction (Maybe (Val Text))
+ittrcmaMetricTimestamp = lens _ioTTopicRuleCloudwatchMetricActionMetricTimestamp (\s a -> s { _ioTTopicRuleCloudwatchMetricActionMetricTimestamp = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-cloudwatchmetric.html#cfn-iot-cloudwatchmetric-metricunit
+ittrcmaMetricUnit :: Lens' IoTTopicRuleCloudwatchMetricAction (Val Text)
+ittrcmaMetricUnit = lens _ioTTopicRuleCloudwatchMetricActionMetricUnit (\s a -> s { _ioTTopicRuleCloudwatchMetricActionMetricUnit = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-cloudwatchmetric.html#cfn-iot-cloudwatchmetric-metricvalue
+ittrcmaMetricValue :: Lens' IoTTopicRuleCloudwatchMetricAction (Val Text)
+ittrcmaMetricValue = lens _ioTTopicRuleCloudwatchMetricActionMetricValue (\s a -> s { _ioTTopicRuleCloudwatchMetricActionMetricValue = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-cloudwatchmetric.html#cfn-iot-cloudwatchmetric-rolearn
+ittrcmaRoleArn :: Lens' IoTTopicRuleCloudwatchMetricAction (Val Text)
+ittrcmaRoleArn = lens _ioTTopicRuleCloudwatchMetricActionRoleArn (\s a -> s { _ioTTopicRuleCloudwatchMetricActionRoleArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleDynamoDBAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleDynamoDBAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleDynamoDBAction.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-dynamodb.html
+
+module Stratosphere.ResourceProperties.IoTTopicRuleDynamoDBAction where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IoTTopicRuleDynamoDBAction. See
+-- | 'ioTTopicRuleDynamoDBAction' for a more convenient constructor.
+data IoTTopicRuleDynamoDBAction =
+  IoTTopicRuleDynamoDBAction
+  { _ioTTopicRuleDynamoDBActionHashKeyField :: Val Text
+  , _ioTTopicRuleDynamoDBActionHashKeyValue :: Val Text
+  , _ioTTopicRuleDynamoDBActionPayloadField :: Maybe (Val Text)
+  , _ioTTopicRuleDynamoDBActionRangeKeyField :: Val Text
+  , _ioTTopicRuleDynamoDBActionRangeKeyValue :: Val Text
+  , _ioTTopicRuleDynamoDBActionRoleArn :: Val Text
+  , _ioTTopicRuleDynamoDBActionTableName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IoTTopicRuleDynamoDBAction where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON IoTTopicRuleDynamoDBAction where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'IoTTopicRuleDynamoDBAction' containing required fields
+-- | as arguments.
+ioTTopicRuleDynamoDBAction
+  :: Val Text -- ^ 'ittrddbaHashKeyField'
+  -> Val Text -- ^ 'ittrddbaHashKeyValue'
+  -> Val Text -- ^ 'ittrddbaRangeKeyField'
+  -> Val Text -- ^ 'ittrddbaRangeKeyValue'
+  -> Val Text -- ^ 'ittrddbaRoleArn'
+  -> Val Text -- ^ 'ittrddbaTableName'
+  -> IoTTopicRuleDynamoDBAction
+ioTTopicRuleDynamoDBAction hashKeyFieldarg hashKeyValuearg rangeKeyFieldarg rangeKeyValuearg roleArnarg tableNamearg =
+  IoTTopicRuleDynamoDBAction
+  { _ioTTopicRuleDynamoDBActionHashKeyField = hashKeyFieldarg
+  , _ioTTopicRuleDynamoDBActionHashKeyValue = hashKeyValuearg
+  , _ioTTopicRuleDynamoDBActionPayloadField = Nothing
+  , _ioTTopicRuleDynamoDBActionRangeKeyField = rangeKeyFieldarg
+  , _ioTTopicRuleDynamoDBActionRangeKeyValue = rangeKeyValuearg
+  , _ioTTopicRuleDynamoDBActionRoleArn = roleArnarg
+  , _ioTTopicRuleDynamoDBActionTableName = tableNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-dynamodb.html#cfn-iot-dynamodb-hashkeyfield
+ittrddbaHashKeyField :: Lens' IoTTopicRuleDynamoDBAction (Val Text)
+ittrddbaHashKeyField = lens _ioTTopicRuleDynamoDBActionHashKeyField (\s a -> s { _ioTTopicRuleDynamoDBActionHashKeyField = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-dynamodb.html#cfn-iot-dynamodb-hashkeyvalue
+ittrddbaHashKeyValue :: Lens' IoTTopicRuleDynamoDBAction (Val Text)
+ittrddbaHashKeyValue = lens _ioTTopicRuleDynamoDBActionHashKeyValue (\s a -> s { _ioTTopicRuleDynamoDBActionHashKeyValue = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-dynamodb.html#cfn-iot-dynamodb-payloadfield
+ittrddbaPayloadField :: Lens' IoTTopicRuleDynamoDBAction (Maybe (Val Text))
+ittrddbaPayloadField = lens _ioTTopicRuleDynamoDBActionPayloadField (\s a -> s { _ioTTopicRuleDynamoDBActionPayloadField = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-dynamodb.html#cfn-iot-dynamodb-rangekeyfield
+ittrddbaRangeKeyField :: Lens' IoTTopicRuleDynamoDBAction (Val Text)
+ittrddbaRangeKeyField = lens _ioTTopicRuleDynamoDBActionRangeKeyField (\s a -> s { _ioTTopicRuleDynamoDBActionRangeKeyField = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-dynamodb.html#cfn-iot-dynamodb-rangekeyvalue
+ittrddbaRangeKeyValue :: Lens' IoTTopicRuleDynamoDBAction (Val Text)
+ittrddbaRangeKeyValue = lens _ioTTopicRuleDynamoDBActionRangeKeyValue (\s a -> s { _ioTTopicRuleDynamoDBActionRangeKeyValue = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-dynamodb.html#cfn-iot-dynamodb-rolearn
+ittrddbaRoleArn :: Lens' IoTTopicRuleDynamoDBAction (Val Text)
+ittrddbaRoleArn = lens _ioTTopicRuleDynamoDBActionRoleArn (\s a -> s { _ioTTopicRuleDynamoDBActionRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-dynamodb.html#cfn-iot-dynamodb-tablename
+ittrddbaTableName :: Lens' IoTTopicRuleDynamoDBAction (Val Text)
+ittrddbaTableName = lens _ioTTopicRuleDynamoDBActionTableName (\s a -> s { _ioTTopicRuleDynamoDBActionTableName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleElasticsearchAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleElasticsearchAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleElasticsearchAction.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-elasticsearch.html
+
+module Stratosphere.ResourceProperties.IoTTopicRuleElasticsearchAction where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IoTTopicRuleElasticsearchAction. See
+-- | 'ioTTopicRuleElasticsearchAction' for a more convenient constructor.
+data IoTTopicRuleElasticsearchAction =
+  IoTTopicRuleElasticsearchAction
+  { _ioTTopicRuleElasticsearchActionEndpoint :: Val Text
+  , _ioTTopicRuleElasticsearchActionId :: Val Text
+  , _ioTTopicRuleElasticsearchActionIndex :: Val Text
+  , _ioTTopicRuleElasticsearchActionRoleArn :: Val Text
+  , _ioTTopicRuleElasticsearchActionType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IoTTopicRuleElasticsearchAction where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+instance FromJSON IoTTopicRuleElasticsearchAction where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+-- | Constructor for 'IoTTopicRuleElasticsearchAction' containing required
+-- | fields as arguments.
+ioTTopicRuleElasticsearchAction
+  :: Val Text -- ^ 'ittreaEndpoint'
+  -> Val Text -- ^ 'ittreaId'
+  -> Val Text -- ^ 'ittreaIndex'
+  -> Val Text -- ^ 'ittreaRoleArn'
+  -> Val Text -- ^ 'ittreaType'
+  -> IoTTopicRuleElasticsearchAction
+ioTTopicRuleElasticsearchAction endpointarg idarg indexarg roleArnarg typearg =
+  IoTTopicRuleElasticsearchAction
+  { _ioTTopicRuleElasticsearchActionEndpoint = endpointarg
+  , _ioTTopicRuleElasticsearchActionId = idarg
+  , _ioTTopicRuleElasticsearchActionIndex = indexarg
+  , _ioTTopicRuleElasticsearchActionRoleArn = roleArnarg
+  , _ioTTopicRuleElasticsearchActionType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-elasticsearch.html#cfn-iot-elasticsearch-endpoint
+ittreaEndpoint :: Lens' IoTTopicRuleElasticsearchAction (Val Text)
+ittreaEndpoint = lens _ioTTopicRuleElasticsearchActionEndpoint (\s a -> s { _ioTTopicRuleElasticsearchActionEndpoint = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-elasticsearch.html#cfn-iot-elasticsearch-id
+ittreaId :: Lens' IoTTopicRuleElasticsearchAction (Val Text)
+ittreaId = lens _ioTTopicRuleElasticsearchActionId (\s a -> s { _ioTTopicRuleElasticsearchActionId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-elasticsearch.html#cfn-iot-elasticsearch-index
+ittreaIndex :: Lens' IoTTopicRuleElasticsearchAction (Val Text)
+ittreaIndex = lens _ioTTopicRuleElasticsearchActionIndex (\s a -> s { _ioTTopicRuleElasticsearchActionIndex = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-elasticsearch.html#cfn-iot-elasticsearch-rolearn
+ittreaRoleArn :: Lens' IoTTopicRuleElasticsearchAction (Val Text)
+ittreaRoleArn = lens _ioTTopicRuleElasticsearchActionRoleArn (\s a -> s { _ioTTopicRuleElasticsearchActionRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-elasticsearch.html#cfn-iot-elasticsearch-type
+ittreaType :: Lens' IoTTopicRuleElasticsearchAction (Val Text)
+ittreaType = lens _ioTTopicRuleElasticsearchActionType (\s a -> s { _ioTTopicRuleElasticsearchActionType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleFirehoseAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleFirehoseAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleFirehoseAction.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-firehose.html
+
+module Stratosphere.ResourceProperties.IoTTopicRuleFirehoseAction where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IoTTopicRuleFirehoseAction. See
+-- | 'ioTTopicRuleFirehoseAction' for a more convenient constructor.
+data IoTTopicRuleFirehoseAction =
+  IoTTopicRuleFirehoseAction
+  { _ioTTopicRuleFirehoseActionDeliveryStreamName :: Val Text
+  , _ioTTopicRuleFirehoseActionRoleArn :: Val Text
+  , _ioTTopicRuleFirehoseActionSeparator :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON IoTTopicRuleFirehoseAction where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON IoTTopicRuleFirehoseAction where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'IoTTopicRuleFirehoseAction' containing required fields
+-- | as arguments.
+ioTTopicRuleFirehoseAction
+  :: Val Text -- ^ 'ittrfaDeliveryStreamName'
+  -> Val Text -- ^ 'ittrfaRoleArn'
+  -> IoTTopicRuleFirehoseAction
+ioTTopicRuleFirehoseAction deliveryStreamNamearg roleArnarg =
+  IoTTopicRuleFirehoseAction
+  { _ioTTopicRuleFirehoseActionDeliveryStreamName = deliveryStreamNamearg
+  , _ioTTopicRuleFirehoseActionRoleArn = roleArnarg
+  , _ioTTopicRuleFirehoseActionSeparator = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-firehose.html#cfn-iot-firehose-deliverystreamname
+ittrfaDeliveryStreamName :: Lens' IoTTopicRuleFirehoseAction (Val Text)
+ittrfaDeliveryStreamName = lens _ioTTopicRuleFirehoseActionDeliveryStreamName (\s a -> s { _ioTTopicRuleFirehoseActionDeliveryStreamName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-firehose.html#cfn-iot-firehose-rolearn
+ittrfaRoleArn :: Lens' IoTTopicRuleFirehoseAction (Val Text)
+ittrfaRoleArn = lens _ioTTopicRuleFirehoseActionRoleArn (\s a -> s { _ioTTopicRuleFirehoseActionRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-firehose.html#cfn-iot-firehose-separator
+ittrfaSeparator :: Lens' IoTTopicRuleFirehoseAction (Maybe (Val Text))
+ittrfaSeparator = lens _ioTTopicRuleFirehoseActionSeparator (\s a -> s { _ioTTopicRuleFirehoseActionSeparator = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleKinesisAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleKinesisAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleKinesisAction.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-kinesis.html
+
+module Stratosphere.ResourceProperties.IoTTopicRuleKinesisAction where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IoTTopicRuleKinesisAction. See
+-- | 'ioTTopicRuleKinesisAction' for a more convenient constructor.
+data IoTTopicRuleKinesisAction =
+  IoTTopicRuleKinesisAction
+  { _ioTTopicRuleKinesisActionPartitionKey :: Maybe (Val Text)
+  , _ioTTopicRuleKinesisActionRoleArn :: Val Text
+  , _ioTTopicRuleKinesisActionStreamName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IoTTopicRuleKinesisAction where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+instance FromJSON IoTTopicRuleKinesisAction where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+-- | Constructor for 'IoTTopicRuleKinesisAction' containing required fields as
+-- | arguments.
+ioTTopicRuleKinesisAction
+  :: Val Text -- ^ 'ittrkaRoleArn'
+  -> Val Text -- ^ 'ittrkaStreamName'
+  -> IoTTopicRuleKinesisAction
+ioTTopicRuleKinesisAction roleArnarg streamNamearg =
+  IoTTopicRuleKinesisAction
+  { _ioTTopicRuleKinesisActionPartitionKey = Nothing
+  , _ioTTopicRuleKinesisActionRoleArn = roleArnarg
+  , _ioTTopicRuleKinesisActionStreamName = streamNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-kinesis.html#cfn-iot-kinesis-partitionkey
+ittrkaPartitionKey :: Lens' IoTTopicRuleKinesisAction (Maybe (Val Text))
+ittrkaPartitionKey = lens _ioTTopicRuleKinesisActionPartitionKey (\s a -> s { _ioTTopicRuleKinesisActionPartitionKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-kinesis.html#cfn-iot-kinesis-rolearn
+ittrkaRoleArn :: Lens' IoTTopicRuleKinesisAction (Val Text)
+ittrkaRoleArn = lens _ioTTopicRuleKinesisActionRoleArn (\s a -> s { _ioTTopicRuleKinesisActionRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-kinesis.html#cfn-iot-kinesis-streamname
+ittrkaStreamName :: Lens' IoTTopicRuleKinesisAction (Val Text)
+ittrkaStreamName = lens _ioTTopicRuleKinesisActionStreamName (\s a -> s { _ioTTopicRuleKinesisActionStreamName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleLambdaAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleLambdaAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleLambdaAction.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-lambda.html
+
+module Stratosphere.ResourceProperties.IoTTopicRuleLambdaAction where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IoTTopicRuleLambdaAction. See
+-- | 'ioTTopicRuleLambdaAction' for a more convenient constructor.
+data IoTTopicRuleLambdaAction =
+  IoTTopicRuleLambdaAction
+  { _ioTTopicRuleLambdaActionFunctionArn :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IoTTopicRuleLambdaAction where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+instance FromJSON IoTTopicRuleLambdaAction where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+-- | Constructor for 'IoTTopicRuleLambdaAction' containing required fields as
+-- | arguments.
+ioTTopicRuleLambdaAction
+  :: Val Text -- ^ 'ittrlaFunctionArn'
+  -> IoTTopicRuleLambdaAction
+ioTTopicRuleLambdaAction functionArnarg =
+  IoTTopicRuleLambdaAction
+  { _ioTTopicRuleLambdaActionFunctionArn = functionArnarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-lambda.html#cfn-iot-lambda-functionarn
+ittrlaFunctionArn :: Lens' IoTTopicRuleLambdaAction (Val Text)
+ittrlaFunctionArn = lens _ioTTopicRuleLambdaActionFunctionArn (\s a -> s { _ioTTopicRuleLambdaActionFunctionArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleRepublishAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleRepublishAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleRepublishAction.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-republish.html
+
+module Stratosphere.ResourceProperties.IoTTopicRuleRepublishAction where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IoTTopicRuleRepublishAction. See
+-- | 'ioTTopicRuleRepublishAction' for a more convenient constructor.
+data IoTTopicRuleRepublishAction =
+  IoTTopicRuleRepublishAction
+  { _ioTTopicRuleRepublishActionRoleArn :: Val Text
+  , _ioTTopicRuleRepublishActionTopic :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IoTTopicRuleRepublishAction where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON IoTTopicRuleRepublishAction where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'IoTTopicRuleRepublishAction' containing required fields
+-- | as arguments.
+ioTTopicRuleRepublishAction
+  :: Val Text -- ^ 'ittrraRoleArn'
+  -> Val Text -- ^ 'ittrraTopic'
+  -> IoTTopicRuleRepublishAction
+ioTTopicRuleRepublishAction roleArnarg topicarg =
+  IoTTopicRuleRepublishAction
+  { _ioTTopicRuleRepublishActionRoleArn = roleArnarg
+  , _ioTTopicRuleRepublishActionTopic = topicarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-republish.html#cfn-iot-republish-rolearn
+ittrraRoleArn :: Lens' IoTTopicRuleRepublishAction (Val Text)
+ittrraRoleArn = lens _ioTTopicRuleRepublishActionRoleArn (\s a -> s { _ioTTopicRuleRepublishActionRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-republish.html#cfn-iot-republish-topic
+ittrraTopic :: Lens' IoTTopicRuleRepublishAction (Val Text)
+ittrraTopic = lens _ioTTopicRuleRepublishActionTopic (\s a -> s { _ioTTopicRuleRepublishActionTopic = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleS3Action.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleS3Action.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleS3Action.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-s3.html
+
+module Stratosphere.ResourceProperties.IoTTopicRuleS3Action where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IoTTopicRuleS3Action. See
+-- | 'ioTTopicRuleS3Action' for a more convenient constructor.
+data IoTTopicRuleS3Action =
+  IoTTopicRuleS3Action
+  { _ioTTopicRuleS3ActionBucketName :: Val Text
+  , _ioTTopicRuleS3ActionKey :: Val Text
+  , _ioTTopicRuleS3ActionRoleArn :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IoTTopicRuleS3Action where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+instance FromJSON IoTTopicRuleS3Action where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+-- | Constructor for 'IoTTopicRuleS3Action' containing required fields as
+-- | arguments.
+ioTTopicRuleS3Action
+  :: Val Text -- ^ 'ittrs3aBucketName'
+  -> Val Text -- ^ 'ittrs3aKey'
+  -> Val Text -- ^ 'ittrs3aRoleArn'
+  -> IoTTopicRuleS3Action
+ioTTopicRuleS3Action bucketNamearg keyarg roleArnarg =
+  IoTTopicRuleS3Action
+  { _ioTTopicRuleS3ActionBucketName = bucketNamearg
+  , _ioTTopicRuleS3ActionKey = keyarg
+  , _ioTTopicRuleS3ActionRoleArn = roleArnarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-s3.html#cfn-iot-s3-bucketname
+ittrs3aBucketName :: Lens' IoTTopicRuleS3Action (Val Text)
+ittrs3aBucketName = lens _ioTTopicRuleS3ActionBucketName (\s a -> s { _ioTTopicRuleS3ActionBucketName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-s3.html#cfn-iot-s3-key
+ittrs3aKey :: Lens' IoTTopicRuleS3Action (Val Text)
+ittrs3aKey = lens _ioTTopicRuleS3ActionKey (\s a -> s { _ioTTopicRuleS3ActionKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-s3.html#cfn-iot-s3-rolearn
+ittrs3aRoleArn :: Lens' IoTTopicRuleS3Action (Val Text)
+ittrs3aRoleArn = lens _ioTTopicRuleS3ActionRoleArn (\s a -> s { _ioTTopicRuleS3ActionRoleArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleSnsAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleSnsAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleSnsAction.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-sns.html
+
+module Stratosphere.ResourceProperties.IoTTopicRuleSnsAction where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IoTTopicRuleSnsAction. See
+-- | 'ioTTopicRuleSnsAction' for a more convenient constructor.
+data IoTTopicRuleSnsAction =
+  IoTTopicRuleSnsAction
+  { _ioTTopicRuleSnsActionMessageFormat :: Maybe (Val Text)
+  , _ioTTopicRuleSnsActionRoleArn :: Val Text
+  , _ioTTopicRuleSnsActionTargetArn :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IoTTopicRuleSnsAction where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+instance FromJSON IoTTopicRuleSnsAction where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+-- | Constructor for 'IoTTopicRuleSnsAction' containing required fields as
+-- | arguments.
+ioTTopicRuleSnsAction
+  :: Val Text -- ^ 'ittrsnaRoleArn'
+  -> Val Text -- ^ 'ittrsnaTargetArn'
+  -> IoTTopicRuleSnsAction
+ioTTopicRuleSnsAction roleArnarg targetArnarg =
+  IoTTopicRuleSnsAction
+  { _ioTTopicRuleSnsActionMessageFormat = Nothing
+  , _ioTTopicRuleSnsActionRoleArn = roleArnarg
+  , _ioTTopicRuleSnsActionTargetArn = targetArnarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-sns.html#cfn-iot-sns-snsaction
+ittrsnaMessageFormat :: Lens' IoTTopicRuleSnsAction (Maybe (Val Text))
+ittrsnaMessageFormat = lens _ioTTopicRuleSnsActionMessageFormat (\s a -> s { _ioTTopicRuleSnsActionMessageFormat = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-sns.html#cfn-iot-sns-rolearn
+ittrsnaRoleArn :: Lens' IoTTopicRuleSnsAction (Val Text)
+ittrsnaRoleArn = lens _ioTTopicRuleSnsActionRoleArn (\s a -> s { _ioTTopicRuleSnsActionRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-sns.html#cfn-iot-sns-targetarn
+ittrsnaTargetArn :: Lens' IoTTopicRuleSnsAction (Val Text)
+ittrsnaTargetArn = lens _ioTTopicRuleSnsActionTargetArn (\s a -> s { _ioTTopicRuleSnsActionTargetArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleSqsAction.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleSqsAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleSqsAction.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-sqs.html
+
+module Stratosphere.ResourceProperties.IoTTopicRuleSqsAction where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IoTTopicRuleSqsAction. See
+-- | 'ioTTopicRuleSqsAction' for a more convenient constructor.
+data IoTTopicRuleSqsAction =
+  IoTTopicRuleSqsAction
+  { _ioTTopicRuleSqsActionQueueUrl :: Val Text
+  , _ioTTopicRuleSqsActionRoleArn :: Val Text
+  , _ioTTopicRuleSqsActionUseBase64 :: Maybe (Val Bool')
+  } deriving (Show, Generic)
+
+instance ToJSON IoTTopicRuleSqsAction where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+instance FromJSON IoTTopicRuleSqsAction where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+-- | Constructor for 'IoTTopicRuleSqsAction' containing required fields as
+-- | arguments.
+ioTTopicRuleSqsAction
+  :: Val Text -- ^ 'ittrsqaQueueUrl'
+  -> Val Text -- ^ 'ittrsqaRoleArn'
+  -> IoTTopicRuleSqsAction
+ioTTopicRuleSqsAction queueUrlarg roleArnarg =
+  IoTTopicRuleSqsAction
+  { _ioTTopicRuleSqsActionQueueUrl = queueUrlarg
+  , _ioTTopicRuleSqsActionRoleArn = roleArnarg
+  , _ioTTopicRuleSqsActionUseBase64 = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-sqs.html#cfn-iot-sqs-queueurl
+ittrsqaQueueUrl :: Lens' IoTTopicRuleSqsAction (Val Text)
+ittrsqaQueueUrl = lens _ioTTopicRuleSqsActionQueueUrl (\s a -> s { _ioTTopicRuleSqsActionQueueUrl = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-sqs.html#cfn-iot-sqs-rolearn
+ittrsqaRoleArn :: Lens' IoTTopicRuleSqsAction (Val Text)
+ittrsqaRoleArn = lens _ioTTopicRuleSqsActionRoleArn (\s a -> s { _ioTTopicRuleSqsActionRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-sqs.html#cfn-iot-sqs-usebase64
+ittrsqaUseBase64 :: Lens' IoTTopicRuleSqsAction (Maybe (Val Bool'))
+ittrsqaUseBase64 = lens _ioTTopicRuleSqsActionUseBase64 (\s a -> s { _ioTTopicRuleSqsActionUseBase64 = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleTopicRulePayload.hs b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleTopicRulePayload.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/IoTTopicRuleTopicRulePayload.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrulepayload.html
+
+module Stratosphere.ResourceProperties.IoTTopicRuleTopicRulePayload where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.IoTTopicRuleAction
+
+-- | Full data type definition for IoTTopicRuleTopicRulePayload. See
+-- | 'ioTTopicRuleTopicRulePayload' for a more convenient constructor.
+data IoTTopicRuleTopicRulePayload =
+  IoTTopicRuleTopicRulePayload
+  { _ioTTopicRuleTopicRulePayloadActions :: [IoTTopicRuleAction]
+  , _ioTTopicRuleTopicRulePayloadAwsIotSqlVersion :: Maybe (Val Text)
+  , _ioTTopicRuleTopicRulePayloadDescription :: Maybe (Val Text)
+  , _ioTTopicRuleTopicRulePayloadRuleDisabled :: Val Bool'
+  , _ioTTopicRuleTopicRulePayloadSql :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IoTTopicRuleTopicRulePayload where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+instance FromJSON IoTTopicRuleTopicRulePayload where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+-- | Constructor for 'IoTTopicRuleTopicRulePayload' containing required fields
+-- | as arguments.
+ioTTopicRuleTopicRulePayload
+  :: [IoTTopicRuleAction] -- ^ 'ittrtrpActions'
+  -> Val Bool' -- ^ 'ittrtrpRuleDisabled'
+  -> Val Text -- ^ 'ittrtrpSql'
+  -> IoTTopicRuleTopicRulePayload
+ioTTopicRuleTopicRulePayload actionsarg ruleDisabledarg sqlarg =
+  IoTTopicRuleTopicRulePayload
+  { _ioTTopicRuleTopicRulePayloadActions = actionsarg
+  , _ioTTopicRuleTopicRulePayloadAwsIotSqlVersion = Nothing
+  , _ioTTopicRuleTopicRulePayloadDescription = Nothing
+  , _ioTTopicRuleTopicRulePayloadRuleDisabled = ruleDisabledarg
+  , _ioTTopicRuleTopicRulePayloadSql = sqlarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrulepayload.html#cfn-iot-topicrulepayload-actions
+ittrtrpActions :: Lens' IoTTopicRuleTopicRulePayload [IoTTopicRuleAction]
+ittrtrpActions = lens _ioTTopicRuleTopicRulePayloadActions (\s a -> s { _ioTTopicRuleTopicRulePayloadActions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrulepayload.html#cfn-iot-topicrulepayload-awsiotsqlversion
+ittrtrpAwsIotSqlVersion :: Lens' IoTTopicRuleTopicRulePayload (Maybe (Val Text))
+ittrtrpAwsIotSqlVersion = lens _ioTTopicRuleTopicRulePayloadAwsIotSqlVersion (\s a -> s { _ioTTopicRuleTopicRulePayloadAwsIotSqlVersion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrulepayload.html#cfn-iot-topicrulepayload-description
+ittrtrpDescription :: Lens' IoTTopicRuleTopicRulePayload (Maybe (Val Text))
+ittrtrpDescription = lens _ioTTopicRuleTopicRulePayloadDescription (\s a -> s { _ioTTopicRuleTopicRulePayloadDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrulepayload.html#cfn-iot-topicrulepayload-ruledisabled
+ittrtrpRuleDisabled :: Lens' IoTTopicRuleTopicRulePayload (Val Bool')
+ittrtrpRuleDisabled = lens _ioTTopicRuleTopicRulePayloadRuleDisabled (\s a -> s { _ioTTopicRuleTopicRulePayloadRuleDisabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrulepayload.html#cfn-iot-topicrulepayload-sql
+ittrtrpSql :: Lens' IoTTopicRuleTopicRulePayload (Val Text)
+ittrtrpSql = lens _ioTTopicRuleTopicRulePayloadSql (\s a -> s { _ioTTopicRuleTopicRulePayloadSql = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseBufferingHints.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseBufferingHints.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseBufferingHints.hs
+++ /dev/null
@@ -1,59 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | BufferingHints is a property of the Amazon Kinesis Firehose
--- DeliveryStream that specifies how Amazon Kinesis Firehose (Firehose)
--- buffers incoming data while delivering it to the destination. The first
--- buffer condition that is satisfied triggers Firehose to deliver the data.
-
-module Stratosphere.ResourceProperties.KinesisFirehoseBufferingHints where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for KinesisFirehoseBufferingHints. See
--- 'kinesisFirehoseBufferingHints' for a more convenient constructor.
-data KinesisFirehoseBufferingHints =
-  KinesisFirehoseBufferingHints
-  { _kinesisFirehoseBufferingHintsIntervalInSeconds :: Val Integer'
-  , _kinesisFirehoseBufferingHintsSizeInMBs :: Val Integer'
-  } deriving (Show, Generic)
-
-instance ToJSON KinesisFirehoseBufferingHints where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
-
-instance FromJSON KinesisFirehoseBufferingHints where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
-
--- | Constructor for 'KinesisFirehoseBufferingHints' containing required
--- fields as arguments.
-kinesisFirehoseBufferingHints
-  :: Val Integer' -- ^ 'kfbhIntervalInSeconds'
-  -> Val Integer' -- ^ 'kfbhSizeInMBs'
-  -> KinesisFirehoseBufferingHints
-kinesisFirehoseBufferingHints intervalInSecondsarg sizeInMBsarg =
-  KinesisFirehoseBufferingHints
-  { _kinesisFirehoseBufferingHintsIntervalInSeconds = intervalInSecondsarg
-  , _kinesisFirehoseBufferingHintsSizeInMBs = sizeInMBsarg
-  }
-
--- | The length of time, in seconds, that Firehose buffers incoming data
--- before delivering it to the destination. The default value is 300. The
--- minimum value is 60. The maximum value 900.
-kfbhIntervalInSeconds :: Lens' KinesisFirehoseBufferingHints (Val Integer')
-kfbhIntervalInSeconds = lens _kinesisFirehoseBufferingHintsIntervalInSeconds (\s a -> s { _kinesisFirehoseBufferingHintsIntervalInSeconds = a })
-
--- | The size of the buffer, in MBs, that Firehose uses for incoming data
--- before delivering it to the destination. The default value is 5. The
--- minimum value is 1. The maximum value is 128. We recommend setting
--- SizeInMBs to a value greater than the amount of data you typically ingest
--- into the delivery stream in 10 seconds. For example, if you typically
--- ingest data at 1 MB/sec set SizeInMBs to be 10 MB or higher.
-kfbhSizeInMBs :: Lens' KinesisFirehoseBufferingHints (Val Integer')
-kfbhSizeInMBs = lens _kinesisFirehoseBufferingHintsSizeInMBs (\s a -> s { _kinesisFirehoseBufferingHintsSizeInMBs = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseCloudWatchLoggingOptions.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseCloudWatchLoggingOptions.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseCloudWatchLoggingOptions.hs
+++ /dev/null
@@ -1,61 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | CloudWatchLoggingOptions is a property of the Amazon Kinesis Firehose
--- DeliveryStream ElasticsearchDestinationConfiguration, Amazon Kinesis
--- Firehose DeliveryStream RedshiftDestinationConfiguration, and Amazon
--- Kinesis Firehose DeliveryStream S3DestinationConfiguration properties that
--- specifies Amazon CloudWatch Logs (CloudWatch Logs) logging options that
--- Amazon Kinesis Firehose (Firehose) uses for the delivery stream.
-
-module Stratosphere.ResourceProperties.KinesisFirehoseCloudWatchLoggingOptions where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for KinesisFirehoseCloudWatchLoggingOptions.
--- See 'kinesisFirehoseCloudWatchLoggingOptions' for a more convenient
--- constructor.
-data KinesisFirehoseCloudWatchLoggingOptions =
-  KinesisFirehoseCloudWatchLoggingOptions
-  { _kinesisFirehoseCloudWatchLoggingOptionsEnabled :: Maybe (Val Bool')
-  , _kinesisFirehoseCloudWatchLoggingOptionsLogGroupName :: Maybe (Val Text)
-  , _kinesisFirehoseCloudWatchLoggingOptionsLogStreamName :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON KinesisFirehoseCloudWatchLoggingOptions where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 40, omitNothingFields = True }
-
-instance FromJSON KinesisFirehoseCloudWatchLoggingOptions where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 40, omitNothingFields = True }
-
--- | Constructor for 'KinesisFirehoseCloudWatchLoggingOptions' containing
--- required fields as arguments.
-kinesisFirehoseCloudWatchLoggingOptions
-  :: KinesisFirehoseCloudWatchLoggingOptions
-kinesisFirehoseCloudWatchLoggingOptions  =
-  KinesisFirehoseCloudWatchLoggingOptions
-  { _kinesisFirehoseCloudWatchLoggingOptionsEnabled = Nothing
-  , _kinesisFirehoseCloudWatchLoggingOptionsLogGroupName = Nothing
-  , _kinesisFirehoseCloudWatchLoggingOptionsLogStreamName = Nothing
-  }
-
--- | Indicates whether CloudWatch Logs logging is enabled.
-kfcwloEnabled :: Lens' KinesisFirehoseCloudWatchLoggingOptions (Maybe (Val Bool'))
-kfcwloEnabled = lens _kinesisFirehoseCloudWatchLoggingOptionsEnabled (\s a -> s { _kinesisFirehoseCloudWatchLoggingOptionsEnabled = a })
-
--- | The name of the CloudWatch Logs log group that contains the log stream
--- that Firehose will use.
-kfcwloLogGroupName :: Lens' KinesisFirehoseCloudWatchLoggingOptions (Maybe (Val Text))
-kfcwloLogGroupName = lens _kinesisFirehoseCloudWatchLoggingOptionsLogGroupName (\s a -> s { _kinesisFirehoseCloudWatchLoggingOptionsLogGroupName = a })
-
--- | The name of the CloudWatch Logs log stream that Firehose uses to send
--- logs about data delivery.
-kfcwloLogStreamName :: Lens' KinesisFirehoseCloudWatchLoggingOptions (Maybe (Val Text))
-kfcwloLogStreamName = lens _kinesisFirehoseCloudWatchLoggingOptionsLogStreamName (\s a -> s { _kinesisFirehoseCloudWatchLoggingOptionsLogStreamName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamBufferingHints.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamBufferingHints.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamBufferingHints.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-bufferinghints.html
+
+module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamBufferingHints where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | KinesisFirehoseDeliveryStreamBufferingHints. See
+-- | 'kinesisFirehoseDeliveryStreamBufferingHints' for a more convenient
+-- | constructor.
+data KinesisFirehoseDeliveryStreamBufferingHints =
+  KinesisFirehoseDeliveryStreamBufferingHints
+  { _kinesisFirehoseDeliveryStreamBufferingHintsIntervalInSeconds :: Val Integer'
+  , _kinesisFirehoseDeliveryStreamBufferingHintsSizeInMBs :: Val Integer'
+  } deriving (Show, Generic)
+
+instance ToJSON KinesisFirehoseDeliveryStreamBufferingHints where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 44, omitNothingFields = True }
+
+instance FromJSON KinesisFirehoseDeliveryStreamBufferingHints where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 44, omitNothingFields = True }
+
+-- | Constructor for 'KinesisFirehoseDeliveryStreamBufferingHints' containing
+-- | required fields as arguments.
+kinesisFirehoseDeliveryStreamBufferingHints
+  :: Val Integer' -- ^ 'kfdsbhIntervalInSeconds'
+  -> Val Integer' -- ^ 'kfdsbhSizeInMBs'
+  -> KinesisFirehoseDeliveryStreamBufferingHints
+kinesisFirehoseDeliveryStreamBufferingHints intervalInSecondsarg sizeInMBsarg =
+  KinesisFirehoseDeliveryStreamBufferingHints
+  { _kinesisFirehoseDeliveryStreamBufferingHintsIntervalInSeconds = intervalInSecondsarg
+  , _kinesisFirehoseDeliveryStreamBufferingHintsSizeInMBs = sizeInMBsarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-bufferinghints.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-bufferinghints-intervalinseconds
+kfdsbhIntervalInSeconds :: Lens' KinesisFirehoseDeliveryStreamBufferingHints (Val Integer')
+kfdsbhIntervalInSeconds = lens _kinesisFirehoseDeliveryStreamBufferingHintsIntervalInSeconds (\s a -> s { _kinesisFirehoseDeliveryStreamBufferingHintsIntervalInSeconds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-bufferinghints.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-bufferinghints-sizeinmbs
+kfdsbhSizeInMBs :: Lens' KinesisFirehoseDeliveryStreamBufferingHints (Val Integer')
+kfdsbhSizeInMBs = lens _kinesisFirehoseDeliveryStreamBufferingHintsSizeInMBs (\s a -> s { _kinesisFirehoseDeliveryStreamBufferingHintsSizeInMBs = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-destination-cloudwatchloggingoptions.html
+
+module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions. See
+-- | 'kinesisFirehoseDeliveryStreamCloudWatchLoggingOptions' for a more
+-- | convenient constructor.
+data KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions =
+  KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions
+  { _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsEnabled :: Maybe (Val Bool')
+  , _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsLogGroupName :: Maybe (Val Text)
+  , _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsLogStreamName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 54, omitNothingFields = True }
+
+instance FromJSON KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 54, omitNothingFields = True }
+
+-- | Constructor for 'KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions'
+-- | containing required fields as arguments.
+kinesisFirehoseDeliveryStreamCloudWatchLoggingOptions
+  :: KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions
+kinesisFirehoseDeliveryStreamCloudWatchLoggingOptions  =
+  KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions
+  { _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsEnabled = Nothing
+  , _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsLogGroupName = Nothing
+  , _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsLogStreamName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-destination-cloudwatchloggingoptions.html#cfn-kinesisfirehose-kinesisdeliverystream-destination-cloudwatchloggingoptions-enabled
+kfdscwloEnabled :: Lens' KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions (Maybe (Val Bool'))
+kfdscwloEnabled = lens _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsEnabled (\s a -> s { _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-destination-cloudwatchloggingoptions.html#cfn-kinesisfirehose-kinesisdeliverystream-destination-cloudwatchloggingoptions-loggroupname
+kfdscwloLogGroupName :: Lens' KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions (Maybe (Val Text))
+kfdscwloLogGroupName = lens _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsLogGroupName (\s a -> s { _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsLogGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-destination-cloudwatchloggingoptions.html#cfn-kinesisfirehose-kinesisdeliverystream-destination-cloudwatchloggingoptions-logstreamname
+kfdscwloLogStreamName :: Lens' KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions (Maybe (Val Text))
+kfdscwloLogStreamName = lens _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsLogStreamName (\s a -> s { _kinesisFirehoseDeliveryStreamCloudWatchLoggingOptionsLogStreamName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamCopyCommand.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamCopyCommand.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamCopyCommand.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-copycommand.html
+
+module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCopyCommand where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for KinesisFirehoseDeliveryStreamCopyCommand.
+-- | See 'kinesisFirehoseDeliveryStreamCopyCommand' for a more convenient
+-- | constructor.
+data KinesisFirehoseDeliveryStreamCopyCommand =
+  KinesisFirehoseDeliveryStreamCopyCommand
+  { _kinesisFirehoseDeliveryStreamCopyCommandCopyOptions :: Maybe (Val Text)
+  , _kinesisFirehoseDeliveryStreamCopyCommandDataTableColumns :: Maybe (Val Text)
+  , _kinesisFirehoseDeliveryStreamCopyCommandDataTableName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON KinesisFirehoseDeliveryStreamCopyCommand where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+instance FromJSON KinesisFirehoseDeliveryStreamCopyCommand where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+-- | Constructor for 'KinesisFirehoseDeliveryStreamCopyCommand' containing
+-- | required fields as arguments.
+kinesisFirehoseDeliveryStreamCopyCommand
+  :: Val Text -- ^ 'kfdsccDataTableName'
+  -> KinesisFirehoseDeliveryStreamCopyCommand
+kinesisFirehoseDeliveryStreamCopyCommand dataTableNamearg =
+  KinesisFirehoseDeliveryStreamCopyCommand
+  { _kinesisFirehoseDeliveryStreamCopyCommandCopyOptions = Nothing
+  , _kinesisFirehoseDeliveryStreamCopyCommandDataTableColumns = Nothing
+  , _kinesisFirehoseDeliveryStreamCopyCommandDataTableName = dataTableNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-copycommand.html#cfn-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-copycommand-copyoptions
+kfdsccCopyOptions :: Lens' KinesisFirehoseDeliveryStreamCopyCommand (Maybe (Val Text))
+kfdsccCopyOptions = lens _kinesisFirehoseDeliveryStreamCopyCommandCopyOptions (\s a -> s { _kinesisFirehoseDeliveryStreamCopyCommandCopyOptions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-copycommand.html#cfn-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-copycommand-datatablecolumns
+kfdsccDataTableColumns :: Lens' KinesisFirehoseDeliveryStreamCopyCommand (Maybe (Val Text))
+kfdsccDataTableColumns = lens _kinesisFirehoseDeliveryStreamCopyCommandDataTableColumns (\s a -> s { _kinesisFirehoseDeliveryStreamCopyCommandDataTableColumns = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-copycommand.html#cfn-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-copycommand-datatablename
+kfdsccDataTableName :: Lens' KinesisFirehoseDeliveryStreamCopyCommand (Val Text)
+kfdsccDataTableName = lens _kinesisFirehoseDeliveryStreamCopyCommandDataTableName (\s a -> s { _kinesisFirehoseDeliveryStreamCopyCommandDataTableName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchBufferingHints.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchBufferingHints.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchBufferingHints.hs
@@ -0,0 +1,52 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html
+
+module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchBufferingHints where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | KinesisFirehoseDeliveryStreamElasticsearchBufferingHints. See
+-- | 'kinesisFirehoseDeliveryStreamElasticsearchBufferingHints' for a more
+-- | convenient constructor.
+data KinesisFirehoseDeliveryStreamElasticsearchBufferingHints =
+  KinesisFirehoseDeliveryStreamElasticsearchBufferingHints
+  { _kinesisFirehoseDeliveryStreamElasticsearchBufferingHintsIntervalInSeconds :: Val Integer'
+  , _kinesisFirehoseDeliveryStreamElasticsearchBufferingHintsSizeInMBs :: Val Integer'
+  } deriving (Show, Generic)
+
+instance ToJSON KinesisFirehoseDeliveryStreamElasticsearchBufferingHints where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 57, omitNothingFields = True }
+
+instance FromJSON KinesisFirehoseDeliveryStreamElasticsearchBufferingHints where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 57, omitNothingFields = True }
+
+-- | Constructor for
+-- | 'KinesisFirehoseDeliveryStreamElasticsearchBufferingHints' containing
+-- | required fields as arguments.
+kinesisFirehoseDeliveryStreamElasticsearchBufferingHints
+  :: Val Integer' -- ^ 'kfdsebhIntervalInSeconds'
+  -> Val Integer' -- ^ 'kfdsebhSizeInMBs'
+  -> KinesisFirehoseDeliveryStreamElasticsearchBufferingHints
+kinesisFirehoseDeliveryStreamElasticsearchBufferingHints intervalInSecondsarg sizeInMBsarg =
+  KinesisFirehoseDeliveryStreamElasticsearchBufferingHints
+  { _kinesisFirehoseDeliveryStreamElasticsearchBufferingHintsIntervalInSeconds = intervalInSecondsarg
+  , _kinesisFirehoseDeliveryStreamElasticsearchBufferingHintsSizeInMBs = sizeInMBsarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-bufferinghints-intervalinseconds
+kfdsebhIntervalInSeconds :: Lens' KinesisFirehoseDeliveryStreamElasticsearchBufferingHints (Val Integer')
+kfdsebhIntervalInSeconds = lens _kinesisFirehoseDeliveryStreamElasticsearchBufferingHintsIntervalInSeconds (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchBufferingHintsIntervalInSeconds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-bufferinghints-sizeinmbs
+kfdsebhSizeInMBs :: Lens' KinesisFirehoseDeliveryStreamElasticsearchBufferingHints (Val Integer')
+kfdsebhSizeInMBs = lens _kinesisFirehoseDeliveryStreamElasticsearchBufferingHintsSizeInMBs (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchBufferingHintsSizeInMBs = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html
+
+module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.Types
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchBufferingHints
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchRetryOptions
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamS3DestinationConfiguration
+
+-- | Full data type definition for
+-- | KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration. See
+-- | 'kinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration' for
+-- | a more convenient constructor.
+data KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration =
+  KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration
+  { _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationBufferingHints :: KinesisFirehoseDeliveryStreamElasticsearchBufferingHints
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationCloudWatchLoggingOptions :: Maybe KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationDomainARN :: Val Text
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexName :: Val Text
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexRotationPeriod :: Val Text
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationRetryOptions :: KinesisFirehoseDeliveryStreamElasticsearchRetryOptions
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationRoleARN :: Val Text
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationS3BackupMode :: Val KinesisFirehoseElasticsearchS3BackupMode
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationS3Configuration :: KinesisFirehoseDeliveryStreamS3DestinationConfiguration
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationTypeName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 67, omitNothingFields = True }
+
+instance FromJSON KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 67, omitNothingFields = True }
+
+-- | Constructor for
+-- | 'KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration'
+-- | containing required fields as arguments.
+kinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration
+  :: KinesisFirehoseDeliveryStreamElasticsearchBufferingHints -- ^ 'kfdsedcBufferingHints'
+  -> Val Text -- ^ 'kfdsedcDomainARN'
+  -> Val Text -- ^ 'kfdsedcIndexName'
+  -> Val Text -- ^ 'kfdsedcIndexRotationPeriod'
+  -> KinesisFirehoseDeliveryStreamElasticsearchRetryOptions -- ^ 'kfdsedcRetryOptions'
+  -> Val Text -- ^ 'kfdsedcRoleARN'
+  -> Val KinesisFirehoseElasticsearchS3BackupMode -- ^ 'kfdsedcS3BackupMode'
+  -> KinesisFirehoseDeliveryStreamS3DestinationConfiguration -- ^ 'kfdsedcS3Configuration'
+  -> Val Text -- ^ 'kfdsedcTypeName'
+  -> KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration
+kinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration bufferingHintsarg domainARNarg indexNamearg indexRotationPeriodarg retryOptionsarg roleARNarg s3BackupModearg s3Configurationarg typeNamearg =
+  KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration
+  { _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationBufferingHints = bufferingHintsarg
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationCloudWatchLoggingOptions = Nothing
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationDomainARN = domainARNarg
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexName = indexNamearg
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexRotationPeriod = indexRotationPeriodarg
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationRetryOptions = retryOptionsarg
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationRoleARN = roleARNarg
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationS3BackupMode = s3BackupModearg
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationS3Configuration = s3Configurationarg
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationTypeName = typeNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-bufferinghints
+kfdsedcBufferingHints :: Lens' KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration KinesisFirehoseDeliveryStreamElasticsearchBufferingHints
+kfdsedcBufferingHints = lens _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationBufferingHints (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationBufferingHints = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-cloudwatchloggingoptions
+kfdsedcCloudWatchLoggingOptions :: Lens' KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration (Maybe KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions)
+kfdsedcCloudWatchLoggingOptions = lens _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationCloudWatchLoggingOptions (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationCloudWatchLoggingOptions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-domainarn
+kfdsedcDomainARN :: Lens' KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration (Val Text)
+kfdsedcDomainARN = lens _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationDomainARN (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationDomainARN = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-indexname
+kfdsedcIndexName :: Lens' KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration (Val Text)
+kfdsedcIndexName = lens _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexName (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-indexrotationperiod
+kfdsedcIndexRotationPeriod :: Lens' KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration (Val Text)
+kfdsedcIndexRotationPeriod = lens _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexRotationPeriod (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexRotationPeriod = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-retryoptions
+kfdsedcRetryOptions :: Lens' KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration KinesisFirehoseDeliveryStreamElasticsearchRetryOptions
+kfdsedcRetryOptions = lens _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationRetryOptions (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationRetryOptions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-rolearn
+kfdsedcRoleARN :: Lens' KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration (Val Text)
+kfdsedcRoleARN = lens _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationRoleARN (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationRoleARN = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-s3backupmode
+kfdsedcS3BackupMode :: Lens' KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration (Val KinesisFirehoseElasticsearchS3BackupMode)
+kfdsedcS3BackupMode = lens _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationS3BackupMode (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationS3BackupMode = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-s3configuration
+kfdsedcS3Configuration :: Lens' KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration KinesisFirehoseDeliveryStreamS3DestinationConfiguration
+kfdsedcS3Configuration = lens _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationS3Configuration (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationS3Configuration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-typename
+kfdsedcTypeName :: Lens' KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration (Val Text)
+kfdsedcTypeName = lens _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationTypeName (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationTypeName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchRetryOptions.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchRetryOptions.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchRetryOptions.hs
@@ -0,0 +1,44 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-retryoptions.html
+
+module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchRetryOptions where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | KinesisFirehoseDeliveryStreamElasticsearchRetryOptions. See
+-- | 'kinesisFirehoseDeliveryStreamElasticsearchRetryOptions' for a more
+-- | convenient constructor.
+data KinesisFirehoseDeliveryStreamElasticsearchRetryOptions =
+  KinesisFirehoseDeliveryStreamElasticsearchRetryOptions
+  { _kinesisFirehoseDeliveryStreamElasticsearchRetryOptionsDurationInSeconds :: Val Integer'
+  } deriving (Show, Generic)
+
+instance ToJSON KinesisFirehoseDeliveryStreamElasticsearchRetryOptions where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 55, omitNothingFields = True }
+
+instance FromJSON KinesisFirehoseDeliveryStreamElasticsearchRetryOptions where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 55, omitNothingFields = True }
+
+-- | Constructor for 'KinesisFirehoseDeliveryStreamElasticsearchRetryOptions'
+-- | containing required fields as arguments.
+kinesisFirehoseDeliveryStreamElasticsearchRetryOptions
+  :: Val Integer' -- ^ 'kfdseroDurationInSeconds'
+  -> KinesisFirehoseDeliveryStreamElasticsearchRetryOptions
+kinesisFirehoseDeliveryStreamElasticsearchRetryOptions durationInSecondsarg =
+  KinesisFirehoseDeliveryStreamElasticsearchRetryOptions
+  { _kinesisFirehoseDeliveryStreamElasticsearchRetryOptionsDurationInSeconds = durationInSecondsarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-retryoptions.html#cfn-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-retryoptions-durationinseconds
+kfdseroDurationInSeconds :: Lens' KinesisFirehoseDeliveryStreamElasticsearchRetryOptions (Val Integer')
+kfdseroDurationInSeconds = lens _kinesisFirehoseDeliveryStreamElasticsearchRetryOptionsDurationInSeconds (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchRetryOptionsDurationInSeconds = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamEncryptionConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamEncryptionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamEncryptionConfiguration.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-encryptionconfiguration.html
+
+module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamEncryptionConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.Types
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamKMSEncryptionConfig
+
+-- | Full data type definition for
+-- | KinesisFirehoseDeliveryStreamEncryptionConfiguration. See
+-- | 'kinesisFirehoseDeliveryStreamEncryptionConfiguration' for a more
+-- | convenient constructor.
+data KinesisFirehoseDeliveryStreamEncryptionConfiguration =
+  KinesisFirehoseDeliveryStreamEncryptionConfiguration
+  { _kinesisFirehoseDeliveryStreamEncryptionConfigurationKMSEncryptionConfig :: Maybe KinesisFirehoseDeliveryStreamKMSEncryptionConfig
+  , _kinesisFirehoseDeliveryStreamEncryptionConfigurationNoEncryptionConfig :: Maybe (Val KinesisFirehoseNoEncryptionConfig)
+  } deriving (Show, Generic)
+
+instance ToJSON KinesisFirehoseDeliveryStreamEncryptionConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 53, omitNothingFields = True }
+
+instance FromJSON KinesisFirehoseDeliveryStreamEncryptionConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 53, omitNothingFields = True }
+
+-- | Constructor for 'KinesisFirehoseDeliveryStreamEncryptionConfiguration'
+-- | containing required fields as arguments.
+kinesisFirehoseDeliveryStreamEncryptionConfiguration
+  :: KinesisFirehoseDeliveryStreamEncryptionConfiguration
+kinesisFirehoseDeliveryStreamEncryptionConfiguration  =
+  KinesisFirehoseDeliveryStreamEncryptionConfiguration
+  { _kinesisFirehoseDeliveryStreamEncryptionConfigurationKMSEncryptionConfig = Nothing
+  , _kinesisFirehoseDeliveryStreamEncryptionConfigurationNoEncryptionConfig = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-encryptionconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-encryptionconfiguration-kmsencryptionconfig
+kfdsecKMSEncryptionConfig :: Lens' KinesisFirehoseDeliveryStreamEncryptionConfiguration (Maybe KinesisFirehoseDeliveryStreamKMSEncryptionConfig)
+kfdsecKMSEncryptionConfig = lens _kinesisFirehoseDeliveryStreamEncryptionConfigurationKMSEncryptionConfig (\s a -> s { _kinesisFirehoseDeliveryStreamEncryptionConfigurationKMSEncryptionConfig = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-encryptionconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-encryptionconfiguration-noencryptionconfig
+kfdsecNoEncryptionConfig :: Lens' KinesisFirehoseDeliveryStreamEncryptionConfiguration (Maybe (Val KinesisFirehoseNoEncryptionConfig))
+kfdsecNoEncryptionConfig = lens _kinesisFirehoseDeliveryStreamEncryptionConfigurationNoEncryptionConfig (\s a -> s { _kinesisFirehoseDeliveryStreamEncryptionConfigurationNoEncryptionConfig = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamKMSEncryptionConfig.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamKMSEncryptionConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamKMSEncryptionConfig.hs
@@ -0,0 +1,44 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-encryptionconfiguration-kmsencryptionconfig.html
+
+module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamKMSEncryptionConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- | KinesisFirehoseDeliveryStreamKMSEncryptionConfig. See
+-- | 'kinesisFirehoseDeliveryStreamKMSEncryptionConfig' for a more convenient
+-- | constructor.
+data KinesisFirehoseDeliveryStreamKMSEncryptionConfig =
+  KinesisFirehoseDeliveryStreamKMSEncryptionConfig
+  { _kinesisFirehoseDeliveryStreamKMSEncryptionConfigAWSKMSKeyARN :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON KinesisFirehoseDeliveryStreamKMSEncryptionConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 49, omitNothingFields = True }
+
+instance FromJSON KinesisFirehoseDeliveryStreamKMSEncryptionConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 49, omitNothingFields = True }
+
+-- | Constructor for 'KinesisFirehoseDeliveryStreamKMSEncryptionConfig'
+-- | containing required fields as arguments.
+kinesisFirehoseDeliveryStreamKMSEncryptionConfig
+  :: Val Text -- ^ 'kfdskmsecAWSKMSKeyARN'
+  -> KinesisFirehoseDeliveryStreamKMSEncryptionConfig
+kinesisFirehoseDeliveryStreamKMSEncryptionConfig aWSKMSKeyARNarg =
+  KinesisFirehoseDeliveryStreamKMSEncryptionConfig
+  { _kinesisFirehoseDeliveryStreamKMSEncryptionConfigAWSKMSKeyARN = aWSKMSKeyARNarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-encryptionconfiguration-kmsencryptionconfig.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-encryptionconfiguration-kmsencryptionconfig-awskmskeyarn
+kfdskmsecAWSKMSKeyARN :: Lens' KinesisFirehoseDeliveryStreamKMSEncryptionConfig (Val Text)
+kfdskmsecAWSKMSKeyARN = lens _kinesisFirehoseDeliveryStreamKMSEncryptionConfigAWSKMSKeyARN (\s a -> s { _kinesisFirehoseDeliveryStreamKMSEncryptionConfigAWSKMSKeyARN = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration.html
+
+module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCopyCommand
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamS3DestinationConfiguration
+
+-- | Full data type definition for
+-- | KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration. See
+-- | 'kinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration' for a
+-- | more convenient constructor.
+data KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration =
+  KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration
+  { _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationCloudWatchLoggingOptions :: Maybe KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions
+  , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationClusterJDBCURL :: Val Text
+  , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationCopyCommand :: KinesisFirehoseDeliveryStreamCopyCommand
+  , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationPassword :: Val Text
+  , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationRoleARN :: Val Text
+  , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationS3Configuration :: KinesisFirehoseDeliveryStreamS3DestinationConfiguration
+  , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationUsername :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 62, omitNothingFields = True }
+
+instance FromJSON KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 62, omitNothingFields = True }
+
+-- | Constructor for
+-- | 'KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration'
+-- | containing required fields as arguments.
+kinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration
+  :: Val Text -- ^ 'kfdsrdcClusterJDBCURL'
+  -> KinesisFirehoseDeliveryStreamCopyCommand -- ^ 'kfdsrdcCopyCommand'
+  -> Val Text -- ^ 'kfdsrdcPassword'
+  -> Val Text -- ^ 'kfdsrdcRoleARN'
+  -> KinesisFirehoseDeliveryStreamS3DestinationConfiguration -- ^ 'kfdsrdcS3Configuration'
+  -> Val Text -- ^ 'kfdsrdcUsername'
+  -> KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration
+kinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration clusterJDBCURLarg copyCommandarg passwordarg roleARNarg s3Configurationarg usernamearg =
+  KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration
+  { _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationCloudWatchLoggingOptions = Nothing
+  , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationClusterJDBCURL = clusterJDBCURLarg
+  , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationCopyCommand = copyCommandarg
+  , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationPassword = passwordarg
+  , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationRoleARN = roleARNarg
+  , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationS3Configuration = s3Configurationarg
+  , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationUsername = usernamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-cloudwatchloggingoptions
+kfdsrdcCloudWatchLoggingOptions :: Lens' KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration (Maybe KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions)
+kfdsrdcCloudWatchLoggingOptions = lens _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationCloudWatchLoggingOptions (\s a -> s { _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationCloudWatchLoggingOptions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-clusterjdbcurl
+kfdsrdcClusterJDBCURL :: Lens' KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration (Val Text)
+kfdsrdcClusterJDBCURL = lens _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationClusterJDBCURL (\s a -> s { _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationClusterJDBCURL = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-copycommand
+kfdsrdcCopyCommand :: Lens' KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration KinesisFirehoseDeliveryStreamCopyCommand
+kfdsrdcCopyCommand = lens _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationCopyCommand (\s a -> s { _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationCopyCommand = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-password
+kfdsrdcPassword :: Lens' KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration (Val Text)
+kfdsrdcPassword = lens _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationPassword (\s a -> s { _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationPassword = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-rolearn
+kfdsrdcRoleARN :: Lens' KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration (Val Text)
+kfdsrdcRoleARN = lens _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationRoleARN (\s a -> s { _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationRoleARN = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-s3configuration
+kfdsrdcS3Configuration :: Lens' KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration KinesisFirehoseDeliveryStreamS3DestinationConfiguration
+kfdsrdcS3Configuration = lens _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationS3Configuration (\s a -> s { _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationS3Configuration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-usename
+kfdsrdcUsername :: Lens' KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration (Val Text)
+kfdsrdcUsername = lens _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationUsername (\s a -> s { _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationUsername = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamS3DestinationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamS3DestinationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamS3DestinationConfiguration.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration.html
+
+module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamS3DestinationConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.Types
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamBufferingHints
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamEncryptionConfiguration
+
+-- | Full data type definition for
+-- | KinesisFirehoseDeliveryStreamS3DestinationConfiguration. See
+-- | 'kinesisFirehoseDeliveryStreamS3DestinationConfiguration' for a more
+-- | convenient constructor.
+data KinesisFirehoseDeliveryStreamS3DestinationConfiguration =
+  KinesisFirehoseDeliveryStreamS3DestinationConfiguration
+  { _kinesisFirehoseDeliveryStreamS3DestinationConfigurationBucketARN :: Val Text
+  , _kinesisFirehoseDeliveryStreamS3DestinationConfigurationBufferingHints :: KinesisFirehoseDeliveryStreamBufferingHints
+  , _kinesisFirehoseDeliveryStreamS3DestinationConfigurationCloudWatchLoggingOptions :: Maybe KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions
+  , _kinesisFirehoseDeliveryStreamS3DestinationConfigurationCompressionFormat :: Val KinesisFirehoseS3CompressionFormat
+  , _kinesisFirehoseDeliveryStreamS3DestinationConfigurationEncryptionConfiguration :: Maybe KinesisFirehoseDeliveryStreamEncryptionConfiguration
+  , _kinesisFirehoseDeliveryStreamS3DestinationConfigurationPrefix :: Val Text
+  , _kinesisFirehoseDeliveryStreamS3DestinationConfigurationRoleARN :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON KinesisFirehoseDeliveryStreamS3DestinationConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 56, omitNothingFields = True }
+
+instance FromJSON KinesisFirehoseDeliveryStreamS3DestinationConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 56, omitNothingFields = True }
+
+-- | Constructor for 'KinesisFirehoseDeliveryStreamS3DestinationConfiguration'
+-- | containing required fields as arguments.
+kinesisFirehoseDeliveryStreamS3DestinationConfiguration
+  :: Val Text -- ^ 'kfdssdcBucketARN'
+  -> KinesisFirehoseDeliveryStreamBufferingHints -- ^ 'kfdssdcBufferingHints'
+  -> Val KinesisFirehoseS3CompressionFormat -- ^ 'kfdssdcCompressionFormat'
+  -> Val Text -- ^ 'kfdssdcPrefix'
+  -> Val Text -- ^ 'kfdssdcRoleARN'
+  -> KinesisFirehoseDeliveryStreamS3DestinationConfiguration
+kinesisFirehoseDeliveryStreamS3DestinationConfiguration bucketARNarg bufferingHintsarg compressionFormatarg prefixarg roleARNarg =
+  KinesisFirehoseDeliveryStreamS3DestinationConfiguration
+  { _kinesisFirehoseDeliveryStreamS3DestinationConfigurationBucketARN = bucketARNarg
+  , _kinesisFirehoseDeliveryStreamS3DestinationConfigurationBufferingHints = bufferingHintsarg
+  , _kinesisFirehoseDeliveryStreamS3DestinationConfigurationCloudWatchLoggingOptions = Nothing
+  , _kinesisFirehoseDeliveryStreamS3DestinationConfigurationCompressionFormat = compressionFormatarg
+  , _kinesisFirehoseDeliveryStreamS3DestinationConfigurationEncryptionConfiguration = Nothing
+  , _kinesisFirehoseDeliveryStreamS3DestinationConfigurationPrefix = prefixarg
+  , _kinesisFirehoseDeliveryStreamS3DestinationConfigurationRoleARN = roleARNarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-bucketarn
+kfdssdcBucketARN :: Lens' KinesisFirehoseDeliveryStreamS3DestinationConfiguration (Val Text)
+kfdssdcBucketARN = lens _kinesisFirehoseDeliveryStreamS3DestinationConfigurationBucketARN (\s a -> s { _kinesisFirehoseDeliveryStreamS3DestinationConfigurationBucketARN = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-bufferinghints
+kfdssdcBufferingHints :: Lens' KinesisFirehoseDeliveryStreamS3DestinationConfiguration KinesisFirehoseDeliveryStreamBufferingHints
+kfdssdcBufferingHints = lens _kinesisFirehoseDeliveryStreamS3DestinationConfigurationBufferingHints (\s a -> s { _kinesisFirehoseDeliveryStreamS3DestinationConfigurationBufferingHints = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-cloudwatchloggingoptions
+kfdssdcCloudWatchLoggingOptions :: Lens' KinesisFirehoseDeliveryStreamS3DestinationConfiguration (Maybe KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions)
+kfdssdcCloudWatchLoggingOptions = lens _kinesisFirehoseDeliveryStreamS3DestinationConfigurationCloudWatchLoggingOptions (\s a -> s { _kinesisFirehoseDeliveryStreamS3DestinationConfigurationCloudWatchLoggingOptions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-compressionformat
+kfdssdcCompressionFormat :: Lens' KinesisFirehoseDeliveryStreamS3DestinationConfiguration (Val KinesisFirehoseS3CompressionFormat)
+kfdssdcCompressionFormat = lens _kinesisFirehoseDeliveryStreamS3DestinationConfigurationCompressionFormat (\s a -> s { _kinesisFirehoseDeliveryStreamS3DestinationConfigurationCompressionFormat = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-encryptionconfiguration
+kfdssdcEncryptionConfiguration :: Lens' KinesisFirehoseDeliveryStreamS3DestinationConfiguration (Maybe KinesisFirehoseDeliveryStreamEncryptionConfiguration)
+kfdssdcEncryptionConfiguration = lens _kinesisFirehoseDeliveryStreamS3DestinationConfigurationEncryptionConfiguration (\s a -> s { _kinesisFirehoseDeliveryStreamS3DestinationConfigurationEncryptionConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-prefix
+kfdssdcPrefix :: Lens' KinesisFirehoseDeliveryStreamS3DestinationConfiguration (Val Text)
+kfdssdcPrefix = lens _kinesisFirehoseDeliveryStreamS3DestinationConfigurationPrefix (\s a -> s { _kinesisFirehoseDeliveryStreamS3DestinationConfigurationPrefix = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-rolearn
+kfdssdcRoleARN :: Lens' KinesisFirehoseDeliveryStreamS3DestinationConfiguration (Val Text)
+kfdssdcRoleARN = lens _kinesisFirehoseDeliveryStreamS3DestinationConfigurationRoleARN (\s a -> s { _kinesisFirehoseDeliveryStreamS3DestinationConfigurationRoleARN = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseElasticsearchDestinationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseElasticsearchDestinationConfiguration.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseElasticsearchDestinationConfiguration.hs
+++ /dev/null
@@ -1,131 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | ElasticsearchDestinationConfiguration is a property of the
--- AWS::KinesisFirehose::DeliveryStream resource that specifies an Amazon
--- Elasticsearch Service (Amazon ES) domain that Amazon Kinesis Firehose
--- (Firehose) delivers data to.
-
-module Stratosphere.ResourceProperties.KinesisFirehoseElasticsearchDestinationConfiguration where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.KinesisFirehoseBufferingHints
-import Stratosphere.ResourceProperties.KinesisFirehoseCloudWatchLoggingOptions
-import Stratosphere.ResourceProperties.KinesisFirehoseS3DestinationConfiguration
-import Stratosphere.ResourceProperties.KinesisFirehoseElasticsearchRetryOptions
-import Stratosphere.Types
-
--- | Full data type definition for
--- KinesisFirehoseElasticsearchDestinationConfiguration. See
--- 'kinesisFirehoseElasticsearchDestinationConfiguration' for a more
--- convenient constructor.
-data KinesisFirehoseElasticsearchDestinationConfiguration =
-  KinesisFirehoseElasticsearchDestinationConfiguration
-  { _kinesisFirehoseElasticsearchDestinationConfigurationBufferingHints :: KinesisFirehoseBufferingHints
-  , _kinesisFirehoseElasticsearchDestinationConfigurationCloudWatchLoggingOptions :: Maybe KinesisFirehoseCloudWatchLoggingOptions
-  , _kinesisFirehoseElasticsearchDestinationConfigurationDomainARN :: Val Text
-  , _kinesisFirehoseElasticsearchDestinationConfigurationIndexName :: Val Text
-  , _kinesisFirehoseElasticsearchDestinationConfigurationIndexRotationPeriod :: Val Text
-  , _kinesisFirehoseElasticsearchDestinationConfigurationRetryOptions :: Maybe KinesisFirehoseElasticsearchRetryOptions
-  , _kinesisFirehoseElasticsearchDestinationConfigurationRoleARN :: Val Text
-  , _kinesisFirehoseElasticsearchDestinationConfigurationS3BackupMode :: KinesisFirehoseElasticsearchS3BackupMode
-  , _kinesisFirehoseElasticsearchDestinationConfigurationS3Configuration :: Maybe KinesisFirehoseS3DestinationConfiguration
-  , _kinesisFirehoseElasticsearchDestinationConfigurationTypeName :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON KinesisFirehoseElasticsearchDestinationConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 53, omitNothingFields = True }
-
-instance FromJSON KinesisFirehoseElasticsearchDestinationConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 53, omitNothingFields = True }
-
--- | Constructor for 'KinesisFirehoseElasticsearchDestinationConfiguration'
--- containing required fields as arguments.
-kinesisFirehoseElasticsearchDestinationConfiguration
-  :: KinesisFirehoseBufferingHints -- ^ 'kfedcBufferingHints'
-  -> Val Text -- ^ 'kfedcDomainARN'
-  -> Val Text -- ^ 'kfedcIndexName'
-  -> Val Text -- ^ 'kfedcIndexRotationPeriod'
-  -> Val Text -- ^ 'kfedcRoleARN'
-  -> KinesisFirehoseElasticsearchS3BackupMode -- ^ 'kfedcS3BackupMode'
-  -> Val Text -- ^ 'kfedcTypeName'
-  -> KinesisFirehoseElasticsearchDestinationConfiguration
-kinesisFirehoseElasticsearchDestinationConfiguration bufferingHintsarg domainARNarg indexNamearg indexRotationPeriodarg roleARNarg s3BackupModearg typeNamearg =
-  KinesisFirehoseElasticsearchDestinationConfiguration
-  { _kinesisFirehoseElasticsearchDestinationConfigurationBufferingHints = bufferingHintsarg
-  , _kinesisFirehoseElasticsearchDestinationConfigurationCloudWatchLoggingOptions = Nothing
-  , _kinesisFirehoseElasticsearchDestinationConfigurationDomainARN = domainARNarg
-  , _kinesisFirehoseElasticsearchDestinationConfigurationIndexName = indexNamearg
-  , _kinesisFirehoseElasticsearchDestinationConfigurationIndexRotationPeriod = indexRotationPeriodarg
-  , _kinesisFirehoseElasticsearchDestinationConfigurationRetryOptions = Nothing
-  , _kinesisFirehoseElasticsearchDestinationConfigurationRoleARN = roleARNarg
-  , _kinesisFirehoseElasticsearchDestinationConfigurationS3BackupMode = s3BackupModearg
-  , _kinesisFirehoseElasticsearchDestinationConfigurationS3Configuration = Nothing
-  , _kinesisFirehoseElasticsearchDestinationConfigurationTypeName = typeNamearg
-  }
-
--- | Configures how Firehose buffers incoming data while delivering it to the
--- Amazon ES domain.
-kfedcBufferingHints :: Lens' KinesisFirehoseElasticsearchDestinationConfiguration KinesisFirehoseBufferingHints
-kfedcBufferingHints = lens _kinesisFirehoseElasticsearchDestinationConfigurationBufferingHints (\s a -> s { _kinesisFirehoseElasticsearchDestinationConfigurationBufferingHints = a })
-
--- | The Amazon CloudWatch Logs logging options for the delivery stream.
-kfedcCloudWatchLoggingOptions :: Lens' KinesisFirehoseElasticsearchDestinationConfiguration (Maybe KinesisFirehoseCloudWatchLoggingOptions)
-kfedcCloudWatchLoggingOptions = lens _kinesisFirehoseElasticsearchDestinationConfigurationCloudWatchLoggingOptions (\s a -> s { _kinesisFirehoseElasticsearchDestinationConfigurationCloudWatchLoggingOptions = a })
-
--- | The Amazon Resource Name (ARN) of the Amazon ES domain that Firehose
--- delivers data to.
-kfedcDomainARN :: Lens' KinesisFirehoseElasticsearchDestinationConfiguration (Val Text)
-kfedcDomainARN = lens _kinesisFirehoseElasticsearchDestinationConfigurationDomainARN (\s a -> s { _kinesisFirehoseElasticsearchDestinationConfigurationDomainARN = a })
-
--- | The name of the Elasticsearch index to which Firehose adds data for
--- indexing.
-kfedcIndexName :: Lens' KinesisFirehoseElasticsearchDestinationConfiguration (Val Text)
-kfedcIndexName = lens _kinesisFirehoseElasticsearchDestinationConfigurationIndexName (\s a -> s { _kinesisFirehoseElasticsearchDestinationConfigurationIndexName = a })
-
--- | The frequency of Elasticsearch index rotation. If you enable index
--- rotation, Firehose appends a portion of the UTC arrival timestamp to the
--- specified index name, and rotates the appended timestamp accordingly. For
--- more information, see Index Rotation for the Amazon ES Destination in the
--- Amazon Kinesis Firehose Developer Guide.
-kfedcIndexRotationPeriod :: Lens' KinesisFirehoseElasticsearchDestinationConfiguration (Val Text)
-kfedcIndexRotationPeriod = lens _kinesisFirehoseElasticsearchDestinationConfigurationIndexRotationPeriod (\s a -> s { _kinesisFirehoseElasticsearchDestinationConfigurationIndexRotationPeriod = a })
-
--- | The retry behavior when Firehose is unable to deliver data to Amazon ES.
--- Type: Amazon Kinesis Firehose DeliveryStream
--- ElasticsearchDestinationConfiguration RetryOptions Type: String
-kfedcRetryOptions :: Lens' KinesisFirehoseElasticsearchDestinationConfiguration (Maybe KinesisFirehoseElasticsearchRetryOptions)
-kfedcRetryOptions = lens _kinesisFirehoseElasticsearchDestinationConfigurationRetryOptions (\s a -> s { _kinesisFirehoseElasticsearchDestinationConfigurationRetryOptions = a })
-
--- | The ARN of the AWS Identity and Access Management (IAM) role that grants
--- Firehose access to your S3 bucket, AWS KMS (if you enable data encryption),
--- and Amazon CloudWatch Logs (if you enable logging). For more information,
--- see Grant Firehose Access to an Amazon Elasticsearch Service Destination in
--- the Amazon Kinesis Firehose Developer Guide.
-kfedcRoleARN :: Lens' KinesisFirehoseElasticsearchDestinationConfiguration (Val Text)
-kfedcRoleARN = lens _kinesisFirehoseElasticsearchDestinationConfigurationRoleARN (\s a -> s { _kinesisFirehoseElasticsearchDestinationConfigurationRoleARN = a })
-
--- | The condition under which Firehose delivers data to Amazon Simple Storage
--- Service (Amazon S3). You can send Amazon S3 all documents (all data) or
--- only the documents that Firehose could not deliver to the Amazon ES
--- destination. For more information and valid values, see the S3BackupMode
--- content for the ElasticsearchDestinationConfiguration data type in the
--- Amazon Kinesis Firehose API Reference.
-kfedcS3BackupMode :: Lens' KinesisFirehoseElasticsearchDestinationConfiguration KinesisFirehoseElasticsearchS3BackupMode
-kfedcS3BackupMode = lens _kinesisFirehoseElasticsearchDestinationConfigurationS3BackupMode (\s a -> s { _kinesisFirehoseElasticsearchDestinationConfigurationS3BackupMode = a })
-
--- | The S3 bucket where Firehose backs up incoming data. Type: Amazon Kinesis
--- Firehose DeliveryStream S3DestinationConfiguration Type: String
-kfedcS3Configuration :: Lens' KinesisFirehoseElasticsearchDestinationConfiguration (Maybe KinesisFirehoseS3DestinationConfiguration)
-kfedcS3Configuration = lens _kinesisFirehoseElasticsearchDestinationConfigurationS3Configuration (\s a -> s { _kinesisFirehoseElasticsearchDestinationConfigurationS3Configuration = a })
-
--- | The Elasticsearch type name that Amazon ES adds to documents when
--- indexing data.
-kfedcTypeName :: Lens' KinesisFirehoseElasticsearchDestinationConfiguration (Val Text)
-kfedcTypeName = lens _kinesisFirehoseElasticsearchDestinationConfigurationTypeName (\s a -> s { _kinesisFirehoseElasticsearchDestinationConfigurationTypeName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseElasticsearchRetryOptions.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseElasticsearchRetryOptions.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseElasticsearchRetryOptions.hs
+++ /dev/null
@@ -1,51 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | RetryOptions is a property of the Amazon Kinesis Firehose DeliveryStream
--- ElasticsearchDestinationConfiguration property that configures the retry
--- behavior when Amazon Kinesis Firehose (Firehose) can't deliver data to
--- Amazon Elasticsearch Service (Amazon ES).
-
-module Stratosphere.ResourceProperties.KinesisFirehoseElasticsearchRetryOptions where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for KinesisFirehoseElasticsearchRetryOptions.
--- See 'kinesisFirehoseElasticsearchRetryOptions' for a more convenient
--- constructor.
-data KinesisFirehoseElasticsearchRetryOptions =
-  KinesisFirehoseElasticsearchRetryOptions
-  { _kinesisFirehoseElasticsearchRetryOptionsDurationInSeconds :: Val Integer'
-  } deriving (Show, Generic)
-
-instance ToJSON KinesisFirehoseElasticsearchRetryOptions where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
-
-instance FromJSON KinesisFirehoseElasticsearchRetryOptions where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
-
--- | Constructor for 'KinesisFirehoseElasticsearchRetryOptions' containing
--- required fields as arguments.
-kinesisFirehoseElasticsearchRetryOptions
-  :: Val Integer' -- ^ 'kferoDurationInSeconds'
-  -> KinesisFirehoseElasticsearchRetryOptions
-kinesisFirehoseElasticsearchRetryOptions durationInSecondsarg =
-  KinesisFirehoseElasticsearchRetryOptions
-  { _kinesisFirehoseElasticsearchRetryOptionsDurationInSeconds = durationInSecondsarg
-  }
-
--- | After an initial failure to deliver to Amazon ES, the total amount of
--- time during which Firehose re-attempts delivery (including the first
--- attempt). If Firehose can't deliver the data within the specified time, it
--- writes the data to the backup S3 bucket. For valid values, see the
--- DurationInSeconds content for the ElasticsearchRetryOptions data type in
--- the Amazon Kinesis Firehose API Reference.
-kferoDurationInSeconds :: Lens' KinesisFirehoseElasticsearchRetryOptions (Val Integer')
-kferoDurationInSeconds = lens _kinesisFirehoseElasticsearchRetryOptionsDurationInSeconds (\s a -> s { _kinesisFirehoseElasticsearchRetryOptionsDurationInSeconds = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseRedshiftCopyCommand.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseRedshiftCopyCommand.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseRedshiftCopyCommand.hs
+++ /dev/null
@@ -1,60 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | CopyCommand is a property of the Amazon Kinesis Firehose DeliveryStream
--- RedshiftDestinationConfiguration property that configures the Amazon
--- Redshift COPY command that Amazon Kinesis Firehose (Firehose) uses to load
--- data into an Amazon Redshift cluster from an S3 bucket.
-
-module Stratosphere.ResourceProperties.KinesisFirehoseRedshiftCopyCommand where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for KinesisFirehoseRedshiftCopyCommand. See
--- 'kinesisFirehoseRedshiftCopyCommand' for a more convenient constructor.
-data KinesisFirehoseRedshiftCopyCommand =
-  KinesisFirehoseRedshiftCopyCommand
-  { _kinesisFirehoseRedshiftCopyCommandCopyOptions :: Maybe (Val Text)
-  , _kinesisFirehoseRedshiftCopyCommandDataTableColumns :: Maybe (Val Text)
-  , _kinesisFirehoseRedshiftCopyCommandDataTableName :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON KinesisFirehoseRedshiftCopyCommand where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
-
-instance FromJSON KinesisFirehoseRedshiftCopyCommand where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
-
--- | Constructor for 'KinesisFirehoseRedshiftCopyCommand' containing required
--- fields as arguments.
-kinesisFirehoseRedshiftCopyCommand
-  :: Val Text -- ^ 'kfrccDataTableName'
-  -> KinesisFirehoseRedshiftCopyCommand
-kinesisFirehoseRedshiftCopyCommand dataTableNamearg =
-  KinesisFirehoseRedshiftCopyCommand
-  { _kinesisFirehoseRedshiftCopyCommandCopyOptions = Nothing
-  , _kinesisFirehoseRedshiftCopyCommandDataTableColumns = Nothing
-  , _kinesisFirehoseRedshiftCopyCommandDataTableName = dataTableNamearg
-  }
-
--- | Parameters to use with the Amazon Redshift COPY command. For examples,
--- see the CopyOptions content for the CopyCommand data type in the Amazon
--- Kinesis Firehose API Reference.
-kfrccCopyOptions :: Lens' KinesisFirehoseRedshiftCopyCommand (Maybe (Val Text))
-kfrccCopyOptions = lens _kinesisFirehoseRedshiftCopyCommandCopyOptions (\s a -> s { _kinesisFirehoseRedshiftCopyCommandCopyOptions = a })
-
--- | A comma-separated list of the column names in the table that Firehose
--- copies data to.
-kfrccDataTableColumns :: Lens' KinesisFirehoseRedshiftCopyCommand (Maybe (Val Text))
-kfrccDataTableColumns = lens _kinesisFirehoseRedshiftCopyCommandDataTableColumns (\s a -> s { _kinesisFirehoseRedshiftCopyCommandDataTableColumns = a })
-
--- | The name of the table where Firehose adds the copied data.
-kfrccDataTableName :: Lens' KinesisFirehoseRedshiftCopyCommand (Val Text)
-kfrccDataTableName = lens _kinesisFirehoseRedshiftCopyCommandDataTableName (\s a -> s { _kinesisFirehoseRedshiftCopyCommandDataTableName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseRedshiftDestinationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseRedshiftDestinationConfiguration.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseRedshiftDestinationConfiguration.hs
+++ /dev/null
@@ -1,101 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | RedshiftDestinationConfiguration is a property of the
--- AWS::KinesisFirehose::DeliveryStream resource that specifies an Amazon
--- Redshift cluster to which Amazon Kinesis Firehose (Firehose) delivers data.
-
-module Stratosphere.ResourceProperties.KinesisFirehoseRedshiftDestinationConfiguration where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.KinesisFirehoseCloudWatchLoggingOptions
-import Stratosphere.ResourceProperties.KinesisFirehoseRedshiftCopyCommand
-import Stratosphere.ResourceProperties.KinesisFirehoseS3DestinationConfiguration
-
--- | Full data type definition for
--- KinesisFirehoseRedshiftDestinationConfiguration. See
--- 'kinesisFirehoseRedshiftDestinationConfiguration' for a more convenient
--- constructor.
-data KinesisFirehoseRedshiftDestinationConfiguration =
-  KinesisFirehoseRedshiftDestinationConfiguration
-  { _kinesisFirehoseRedshiftDestinationConfigurationCloudWatchLoggingOptions :: Maybe KinesisFirehoseCloudWatchLoggingOptions
-  , _kinesisFirehoseRedshiftDestinationConfigurationClusterJDBCURL :: Val Text
-  , _kinesisFirehoseRedshiftDestinationConfigurationCopyCommand :: KinesisFirehoseRedshiftCopyCommand
-  , _kinesisFirehoseRedshiftDestinationConfigurationPassword :: Val Text
-  , _kinesisFirehoseRedshiftDestinationConfigurationRoleARN :: Val Text
-  , _kinesisFirehoseRedshiftDestinationConfigurationS3Configuration :: KinesisFirehoseS3DestinationConfiguration
-  , _kinesisFirehoseRedshiftDestinationConfigurationUsername :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON KinesisFirehoseRedshiftDestinationConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 48, omitNothingFields = True }
-
-instance FromJSON KinesisFirehoseRedshiftDestinationConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 48, omitNothingFields = True }
-
--- | Constructor for 'KinesisFirehoseRedshiftDestinationConfiguration'
--- containing required fields as arguments.
-kinesisFirehoseRedshiftDestinationConfiguration
-  :: Val Text -- ^ 'kfrdcClusterJDBCURL'
-  -> KinesisFirehoseRedshiftCopyCommand -- ^ 'kfrdcCopyCommand'
-  -> Val Text -- ^ 'kfrdcPassword'
-  -> Val Text -- ^ 'kfrdcRoleARN'
-  -> KinesisFirehoseS3DestinationConfiguration -- ^ 'kfrdcS3Configuration'
-  -> Val Text -- ^ 'kfrdcUsername'
-  -> KinesisFirehoseRedshiftDestinationConfiguration
-kinesisFirehoseRedshiftDestinationConfiguration clusterJDBCURLarg copyCommandarg passwordarg roleARNarg s3Configurationarg usernamearg =
-  KinesisFirehoseRedshiftDestinationConfiguration
-  { _kinesisFirehoseRedshiftDestinationConfigurationCloudWatchLoggingOptions = Nothing
-  , _kinesisFirehoseRedshiftDestinationConfigurationClusterJDBCURL = clusterJDBCURLarg
-  , _kinesisFirehoseRedshiftDestinationConfigurationCopyCommand = copyCommandarg
-  , _kinesisFirehoseRedshiftDestinationConfigurationPassword = passwordarg
-  , _kinesisFirehoseRedshiftDestinationConfigurationRoleARN = roleARNarg
-  , _kinesisFirehoseRedshiftDestinationConfigurationS3Configuration = s3Configurationarg
-  , _kinesisFirehoseRedshiftDestinationConfigurationUsername = usernamearg
-  }
-
--- | The Amazon CloudWatch Logs logging options for the delivery stream.
-kfrdcCloudWatchLoggingOptions :: Lens' KinesisFirehoseRedshiftDestinationConfiguration (Maybe KinesisFirehoseCloudWatchLoggingOptions)
-kfrdcCloudWatchLoggingOptions = lens _kinesisFirehoseRedshiftDestinationConfigurationCloudWatchLoggingOptions (\s a -> s { _kinesisFirehoseRedshiftDestinationConfigurationCloudWatchLoggingOptions = a })
-
--- | The connection string that Firehose uses to connect to the Amazon
--- Redshift cluster.
-kfrdcClusterJDBCURL :: Lens' KinesisFirehoseRedshiftDestinationConfiguration (Val Text)
-kfrdcClusterJDBCURL = lens _kinesisFirehoseRedshiftDestinationConfigurationClusterJDBCURL (\s a -> s { _kinesisFirehoseRedshiftDestinationConfigurationClusterJDBCURL = a })
-
--- | Configures the Amazon Redshift COPY command that Firehose uses to load
--- data into the cluster from the S3 bucket.
-kfrdcCopyCommand :: Lens' KinesisFirehoseRedshiftDestinationConfiguration KinesisFirehoseRedshiftCopyCommand
-kfrdcCopyCommand = lens _kinesisFirehoseRedshiftDestinationConfigurationCopyCommand (\s a -> s { _kinesisFirehoseRedshiftDestinationConfigurationCopyCommand = a })
-
--- | The password for the Amazon Redshift user that you specified in the
--- Username property.
-kfrdcPassword :: Lens' KinesisFirehoseRedshiftDestinationConfiguration (Val Text)
-kfrdcPassword = lens _kinesisFirehoseRedshiftDestinationConfigurationPassword (\s a -> s { _kinesisFirehoseRedshiftDestinationConfigurationPassword = a })
-
--- | The ARN of the AWS Identity and Access Management (IAM) role that grants
--- Firehose access to your S3 bucket and AWS KMS (if you enable data
--- encryption). For more information, see Grant Firehose Access to an Amazon
--- Redshift Destination in the Amazon Kinesis Firehose Developer Guide.
-kfrdcRoleARN :: Lens' KinesisFirehoseRedshiftDestinationConfiguration (Val Text)
-kfrdcRoleARN = lens _kinesisFirehoseRedshiftDestinationConfigurationRoleARN (\s a -> s { _kinesisFirehoseRedshiftDestinationConfigurationRoleARN = a })
-
--- | The S3 bucket where Firehose first delivers data. After the data is in
--- the bucket, Firehose uses the COPY command to load the data into the Amazon
--- Redshift cluster. For the S3 bucket's compression format, don't specify
--- SNAPPY or ZIP because the Amazon Redshift COPY command doesn't support
--- them.
-kfrdcS3Configuration :: Lens' KinesisFirehoseRedshiftDestinationConfiguration KinesisFirehoseS3DestinationConfiguration
-kfrdcS3Configuration = lens _kinesisFirehoseRedshiftDestinationConfigurationS3Configuration (\s a -> s { _kinesisFirehoseRedshiftDestinationConfigurationS3Configuration = a })
-
--- | The Amazon Redshift user that has permission to access the Amazon
--- Redshift cluster. This user must have INSERT privileges for copying data
--- from the S3 bucket to the cluster.
-kfrdcUsername :: Lens' KinesisFirehoseRedshiftDestinationConfiguration (Val Text)
-kfrdcUsername = lens _kinesisFirehoseRedshiftDestinationConfigurationUsername (\s a -> s { _kinesisFirehoseRedshiftDestinationConfigurationUsername = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseS3DestinationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseS3DestinationConfiguration.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseS3DestinationConfiguration.hs
+++ /dev/null
@@ -1,101 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | S3DestinationConfiguration is a property of the
--- AWS::KinesisFirehose::DeliveryStream resource and the Amazon Kinesis
--- Firehose DeliveryStream ElasticsearchDestinationConfiguration and Amazon
--- Kinesis Firehose DeliveryStream RedshiftDestinationConfiguration properties
--- that specifies an Amazon Simple Storage Service (Amazon S3) destination to
--- which Amazon Kinesis Firehose (Firehose) delivers data.
-
-module Stratosphere.ResourceProperties.KinesisFirehoseS3DestinationConfiguration where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.KinesisFirehoseBufferingHints
-import Stratosphere.ResourceProperties.KinesisFirehoseCloudWatchLoggingOptions
-import Stratosphere.ResourceProperties.KinesisFirehoseS3EncryptionConfiguration
-import Stratosphere.Types
-
--- | Full data type definition for KinesisFirehoseS3DestinationConfiguration.
--- See 'kinesisFirehoseS3DestinationConfiguration' for a more convenient
--- constructor.
-data KinesisFirehoseS3DestinationConfiguration =
-  KinesisFirehoseS3DestinationConfiguration
-  { _kinesisFirehoseS3DestinationConfigurationBucketARN :: Val Text
-  , _kinesisFirehoseS3DestinationConfigurationBufferingHints :: KinesisFirehoseBufferingHints
-  , _kinesisFirehoseS3DestinationConfigurationCloudWatchLoggingOptions :: Maybe KinesisFirehoseCloudWatchLoggingOptions
-  , _kinesisFirehoseS3DestinationConfigurationCompressionFormat :: KinesisFirehoseS3CompressionFormat
-  , _kinesisFirehoseS3DestinationConfigurationEncryptionConfiguration :: Maybe KinesisFirehoseS3EncryptionConfiguration
-  , _kinesisFirehoseS3DestinationConfigurationPrefix :: Val Text
-  , _kinesisFirehoseS3DestinationConfigurationRoleARN :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON KinesisFirehoseS3DestinationConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
-
-instance FromJSON KinesisFirehoseS3DestinationConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 42, omitNothingFields = True }
-
--- | Constructor for 'KinesisFirehoseS3DestinationConfiguration' containing
--- required fields as arguments.
-kinesisFirehoseS3DestinationConfiguration
-  :: Val Text -- ^ 'kfsdcBucketARN'
-  -> KinesisFirehoseBufferingHints -- ^ 'kfsdcBufferingHints'
-  -> KinesisFirehoseS3CompressionFormat -- ^ 'kfsdcCompressionFormat'
-  -> Val Text -- ^ 'kfsdcPrefix'
-  -> Val Text -- ^ 'kfsdcRoleARN'
-  -> KinesisFirehoseS3DestinationConfiguration
-kinesisFirehoseS3DestinationConfiguration bucketARNarg bufferingHintsarg compressionFormatarg prefixarg roleARNarg =
-  KinesisFirehoseS3DestinationConfiguration
-  { _kinesisFirehoseS3DestinationConfigurationBucketARN = bucketARNarg
-  , _kinesisFirehoseS3DestinationConfigurationBufferingHints = bufferingHintsarg
-  , _kinesisFirehoseS3DestinationConfigurationCloudWatchLoggingOptions = Nothing
-  , _kinesisFirehoseS3DestinationConfigurationCompressionFormat = compressionFormatarg
-  , _kinesisFirehoseS3DestinationConfigurationEncryptionConfiguration = Nothing
-  , _kinesisFirehoseS3DestinationConfigurationPrefix = prefixarg
-  , _kinesisFirehoseS3DestinationConfigurationRoleARN = roleARNarg
-  }
-
--- | The Amazon Resource Name (ARN) of the S3 bucket to send data to.
-kfsdcBucketARN :: Lens' KinesisFirehoseS3DestinationConfiguration (Val Text)
-kfsdcBucketARN = lens _kinesisFirehoseS3DestinationConfigurationBucketARN (\s a -> s { _kinesisFirehoseS3DestinationConfigurationBucketARN = a })
-
--- | Configures how Firehose buffers incoming data while delivering it to the
--- S3 bucket.
-kfsdcBufferingHints :: Lens' KinesisFirehoseS3DestinationConfiguration KinesisFirehoseBufferingHints
-kfsdcBufferingHints = lens _kinesisFirehoseS3DestinationConfigurationBufferingHints (\s a -> s { _kinesisFirehoseS3DestinationConfigurationBufferingHints = a })
-
--- | The Amazon CloudWatch Logs logging options for the delivery stream.
-kfsdcCloudWatchLoggingOptions :: Lens' KinesisFirehoseS3DestinationConfiguration (Maybe KinesisFirehoseCloudWatchLoggingOptions)
-kfsdcCloudWatchLoggingOptions = lens _kinesisFirehoseS3DestinationConfigurationCloudWatchLoggingOptions (\s a -> s { _kinesisFirehoseS3DestinationConfigurationCloudWatchLoggingOptions = a })
-
--- | The type of compression that Firehose uses to compress the data that it
--- delivers to the S3 bucket. For valid values, see the CompressionFormat
--- content for the S3DestinationConfiguration data type in the Amazon Kinesis
--- Firehose API Reference.
-kfsdcCompressionFormat :: Lens' KinesisFirehoseS3DestinationConfiguration KinesisFirehoseS3CompressionFormat
-kfsdcCompressionFormat = lens _kinesisFirehoseS3DestinationConfigurationCompressionFormat (\s a -> s { _kinesisFirehoseS3DestinationConfigurationCompressionFormat = a })
-
--- | Configures Amazon Simple Storage Service (Amazon S3) server-side
--- encryption. Firehose uses AWS Key Management Service (AWS KMS) to encrypt
--- the data that it delivers to your S3 bucket.
-kfsdcEncryptionConfiguration :: Lens' KinesisFirehoseS3DestinationConfiguration (Maybe KinesisFirehoseS3EncryptionConfiguration)
-kfsdcEncryptionConfiguration = lens _kinesisFirehoseS3DestinationConfigurationEncryptionConfiguration (\s a -> s { _kinesisFirehoseS3DestinationConfigurationEncryptionConfiguration = a })
-
--- | A prefix that Firehose adds to the files that it delivers to the S3
--- bucket. The prefix helps you identify the files that Firehose delivered.
-kfsdcPrefix :: Lens' KinesisFirehoseS3DestinationConfiguration (Val Text)
-kfsdcPrefix = lens _kinesisFirehoseS3DestinationConfigurationPrefix (\s a -> s { _kinesisFirehoseS3DestinationConfigurationPrefix = a })
-
--- | The ARN of an AWS Identity and Access Management (IAM) role that grants
--- Firehose access to your S3 bucket and AWS KMS (if you enable data
--- encryption). For more information, see Grant Firehose Access to an Amazon
--- S3 Destination in the Amazon Kinesis Firehose Developer Guide.
-kfsdcRoleARN :: Lens' KinesisFirehoseS3DestinationConfiguration (Val Text)
-kfsdcRoleARN = lens _kinesisFirehoseS3DestinationConfigurationRoleARN (\s a -> s { _kinesisFirehoseS3DestinationConfigurationRoleARN = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseS3EncryptionConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseS3EncryptionConfiguration.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseS3EncryptionConfiguration.hs
+++ /dev/null
@@ -1,55 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | EncryptionConfiguration is a property of the Amazon Kinesis Firehose
--- DeliveryStream S3DestinationConfiguration property that specifies the
--- encryption settings that Amazon Kinesis Firehose (Firehose) uses when
--- delivering data to Amazon Simple Storage Service (Amazon S3).
-
-module Stratosphere.ResourceProperties.KinesisFirehoseS3EncryptionConfiguration where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.KinesisFirehoseS3KMSEncryptionConfig
-import Stratosphere.Types
-
--- | Full data type definition for KinesisFirehoseS3EncryptionConfiguration.
--- See 'kinesisFirehoseS3EncryptionConfiguration' for a more convenient
--- constructor.
-data KinesisFirehoseS3EncryptionConfiguration =
-  KinesisFirehoseS3EncryptionConfiguration
-  { _kinesisFirehoseS3EncryptionConfigurationKMSEncryptionConfig :: Maybe KinesisFirehoseS3KMSEncryptionConfig
-  , _kinesisFirehoseS3EncryptionConfigurationNoEncryptionConfig :: Maybe KinesisFirehoseNoEncryptionConfig
-  } deriving (Show, Generic)
-
-instance ToJSON KinesisFirehoseS3EncryptionConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
-
-instance FromJSON KinesisFirehoseS3EncryptionConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
-
--- | Constructor for 'KinesisFirehoseS3EncryptionConfiguration' containing
--- required fields as arguments.
-kinesisFirehoseS3EncryptionConfiguration
-  :: KinesisFirehoseS3EncryptionConfiguration
-kinesisFirehoseS3EncryptionConfiguration  =
-  KinesisFirehoseS3EncryptionConfiguration
-  { _kinesisFirehoseS3EncryptionConfigurationKMSEncryptionConfig = Nothing
-  , _kinesisFirehoseS3EncryptionConfigurationNoEncryptionConfig = Nothing
-  }
-
--- | The AWS Key Management Service (AWS KMS) encryption key that Amazon S3
--- uses to encrypt your data.
-kfsecKMSEncryptionConfig :: Lens' KinesisFirehoseS3EncryptionConfiguration (Maybe KinesisFirehoseS3KMSEncryptionConfig)
-kfsecKMSEncryptionConfig = lens _kinesisFirehoseS3EncryptionConfigurationKMSEncryptionConfig (\s a -> s { _kinesisFirehoseS3EncryptionConfigurationKMSEncryptionConfig = a })
-
--- | Disables encryption. For valid values, see the NoEncryptionConfig content
--- for the EncryptionConfiguration data type in the Amazon Kinesis Firehose
--- API Reference.
-kfsecNoEncryptionConfig :: Lens' KinesisFirehoseS3EncryptionConfiguration (Maybe KinesisFirehoseNoEncryptionConfig)
-kfsecNoEncryptionConfig = lens _kinesisFirehoseS3EncryptionConfigurationNoEncryptionConfig (\s a -> s { _kinesisFirehoseS3EncryptionConfigurationNoEncryptionConfig = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseS3KMSEncryptionConfig.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseS3KMSEncryptionConfig.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseS3KMSEncryptionConfig.hs
+++ /dev/null
@@ -1,48 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | KMSEncryptionConfig is a property of the Amazon Kinesis Firehose
--- DeliveryStream S3DestinationConfiguration EncryptionConfiguration property
--- that specifies the AWS Key Management Service (AWS KMS) encryption key that
--- Amazon Simple Storage Service (Amazon S3) uses to encrypt data delivered by
--- the Amazon Kinesis Firehose (Firehose) stream.
-
-module Stratosphere.ResourceProperties.KinesisFirehoseS3KMSEncryptionConfig where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for KinesisFirehoseS3KMSEncryptionConfig. See
--- 'kinesisFirehoseS3KMSEncryptionConfig' for a more convenient constructor.
-data KinesisFirehoseS3KMSEncryptionConfig =
-  KinesisFirehoseS3KMSEncryptionConfig
-  { _kinesisFirehoseS3KMSEncryptionConfigAWSKMSKeyARN :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON KinesisFirehoseS3KMSEncryptionConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
-
-instance FromJSON KinesisFirehoseS3KMSEncryptionConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
-
--- | Constructor for 'KinesisFirehoseS3KMSEncryptionConfig' containing
--- required fields as arguments.
-kinesisFirehoseS3KMSEncryptionConfig
-  :: Val Text -- ^ 'kfskmsecAWSKMSKeyARN'
-  -> KinesisFirehoseS3KMSEncryptionConfig
-kinesisFirehoseS3KMSEncryptionConfig aWSKMSKeyARNarg =
-  KinesisFirehoseS3KMSEncryptionConfig
-  { _kinesisFirehoseS3KMSEncryptionConfigAWSKMSKeyARN = aWSKMSKeyARNarg
-  }
-
--- | The Amazon Resource Name (ARN) of the AWS KMS encryption key that Amazon
--- S3 uses to encrypt data delivered by the Firehose stream. The key must
--- belong to the same region as the destination S3 bucket.
-kfskmsecAWSKMSKeyARN :: Lens' KinesisFirehoseS3KMSEncryptionConfig (Val Text)
-kfskmsecAWSKMSKeyARN = lens _kinesisFirehoseS3KMSEncryptionConfigAWSKMSKeyARN (\s a -> s { _kinesisFirehoseS3KMSEncryptionConfigAWSKMSKeyARN = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/LBCookieStickinessPolicy.hs b/library-gen/Stratosphere/ResourceProperties/LBCookieStickinessPolicy.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/LBCookieStickinessPolicy.hs
+++ /dev/null
@@ -1,53 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The LBCookieStickinessPolicy type is an embedded property of the
--- AWS::ElasticLoadBalancing::LoadBalancer type.
-
-module Stratosphere.ResourceProperties.LBCookieStickinessPolicy where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for LBCookieStickinessPolicy. See
--- 'lbCookieStickinessPolicy' for a more convenient constructor.
-data LBCookieStickinessPolicy =
-  LBCookieStickinessPolicy
-  { _lBCookieStickinessPolicyCookieExpirationPeriod :: Maybe (Val Text)
-  , _lBCookieStickinessPolicyPolicyName :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON LBCookieStickinessPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
-
-instance FromJSON LBCookieStickinessPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
-
--- | Constructor for 'LBCookieStickinessPolicy' containing required fields as
--- arguments.
-lbCookieStickinessPolicy
-  :: Val Text -- ^ 'lbcspPolicyName'
-  -> LBCookieStickinessPolicy
-lbCookieStickinessPolicy policyNamearg =
-  LBCookieStickinessPolicy
-  { _lBCookieStickinessPolicyCookieExpirationPeriod = Nothing
-  , _lBCookieStickinessPolicyPolicyName = policyNamearg
-  }
-
--- | The time period, in seconds, after which the cookie should be considered
--- stale. If this parameter isn't specified, the sticky session will last for
--- the duration of the browser session.
-lbcspCookieExpirationPeriod :: Lens' LBCookieStickinessPolicy (Maybe (Val Text))
-lbcspCookieExpirationPeriod = lens _lBCookieStickinessPolicyCookieExpirationPeriod (\s a -> s { _lBCookieStickinessPolicyCookieExpirationPeriod = a })
-
--- | The name of the policy being created. The name must be unique within the
--- set of policies for this load balancer. Note To associate this policy with
--- a listener, include the policy name in the listener's PolicyNames property.
-lbcspPolicyName :: Lens' LBCookieStickinessPolicy (Val Text)
-lbcspPolicyName = lens _lBCookieStickinessPolicyPolicyName (\s a -> s { _lBCookieStickinessPolicyPolicyName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/LambdaFunctionCode.hs b/library-gen/Stratosphere/ResourceProperties/LambdaFunctionCode.hs
--- a/library-gen/Stratosphere/ResourceProperties/LambdaFunctionCode.hs
+++ b/library-gen/Stratosphere/ResourceProperties/LambdaFunctionCode.hs
@@ -1,11 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | Code is a property of the AWS::Lambda::Function resource that enables you
--- to specify the source code of an AWS Lambda (Lambda) function. Source code
--- can be located in a file in an S3 bucket. For nodejs, nodejs4.3, and
--- python2.7 runtime environments only, you can provide source code as inline
--- text.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html
 
 module Stratosphere.ResourceProperties.LambdaFunctionCode where
 
@@ -19,7 +15,7 @@
 
 
 -- | Full data type definition for LambdaFunctionCode. See
--- 'lambdaFunctionCode' for a more convenient constructor.
+-- | 'lambdaFunctionCode' for a more convenient constructor.
 data LambdaFunctionCode =
   LambdaFunctionCode
   { _lambdaFunctionCodeS3Bucket :: Maybe (Val Text)
@@ -35,7 +31,7 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
 
 -- | Constructor for 'LambdaFunctionCode' containing required fields as
--- arguments.
+-- | arguments.
 lambdaFunctionCode
   :: LambdaFunctionCode
 lambdaFunctionCode  =
@@ -46,34 +42,18 @@
   , _lambdaFunctionCodeZipFile = Nothing
   }
 
--- | The name of the S3 bucket that contains the source code of your Lambda
--- function. The S3 bucket must be in the same region as the stack. Note The
--- cfn-response module isn't available for source code stored in S3 buckets.
--- You must write your own functions to send responses.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html#cfn-lambda-function-code-s3bucket
 lfcS3Bucket :: Lens' LambdaFunctionCode (Maybe (Val Text))
 lfcS3Bucket = lens _lambdaFunctionCodeS3Bucket (\s a -> s { _lambdaFunctionCodeS3Bucket = a })
 
--- | The location and name of the .zip file that contains your source code. If
--- you specify this property, you must also specify the S3Bucket property.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html#cfn-lambda-function-code-s3key
 lfcS3Key :: Lens' LambdaFunctionCode (Maybe (Val Text))
 lfcS3Key = lens _lambdaFunctionCodeS3Key (\s a -> s { _lambdaFunctionCodeS3Key = a })
 
--- | If you have S3 versioning enabled, the version ID of the.zip file that
--- contains your source code. You can specify this property only if you
--- specify the S3Bucket and S3Key properties.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html#cfn-lambda-function-code-s3objectversion
 lfcS3ObjectVersion :: Lens' LambdaFunctionCode (Maybe (Val Text))
 lfcS3ObjectVersion = lens _lambdaFunctionCodeS3ObjectVersion (\s a -> s { _lambdaFunctionCodeS3ObjectVersion = a })
 
--- | For nodejs, nodejs4.3, and python2.7 runtime environments, the source
--- code of your Lambda function. You can't use this property with other
--- runtime environments. You can specify up to 4096 characters. You must
--- precede certain special characters in your source code, such as quotation
--- marks ("), newlines (\n), and tabs (\t), with a backslash (\). For a list
--- of special characters, see http://json.org/. If you specify a function that
--- interacts with an AWS CloudFormation custom resource, you don't have to
--- write your own functions to send responses to the custom resource that
--- invoked the function. AWS CloudFormation provides a response module that
--- simplifies sending responses. For more information, see cfn-response
--- Module.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html#cfn-lambda-function-code-zipfile
 lfcZipFile :: Lens' LambdaFunctionCode (Maybe (Val Text))
 lfcZipFile = lens _lambdaFunctionCodeZipFile (\s a -> s { _lambdaFunctionCodeZipFile = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/LambdaFunctionEnvironment.hs b/library-gen/Stratosphere/ResourceProperties/LambdaFunctionEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/LambdaFunctionEnvironment.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-environment.html
+
+module Stratosphere.ResourceProperties.LambdaFunctionEnvironment where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for LambdaFunctionEnvironment. See
+-- | 'lambdaFunctionEnvironment' for a more convenient constructor.
+data LambdaFunctionEnvironment =
+  LambdaFunctionEnvironment
+  { _lambdaFunctionEnvironmentVariables :: Maybe Object
+  } deriving (Show, Generic)
+
+instance ToJSON LambdaFunctionEnvironment where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+instance FromJSON LambdaFunctionEnvironment where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+-- | Constructor for 'LambdaFunctionEnvironment' containing required fields as
+-- | arguments.
+lambdaFunctionEnvironment
+  :: LambdaFunctionEnvironment
+lambdaFunctionEnvironment  =
+  LambdaFunctionEnvironment
+  { _lambdaFunctionEnvironmentVariables = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-environment.html#cfn-lambda-function-environment-variables
+lfeVariables :: Lens' LambdaFunctionEnvironment (Maybe Object)
+lfeVariables = lens _lambdaFunctionEnvironmentVariables (\s a -> s { _lambdaFunctionEnvironmentVariables = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/LambdaFunctionVPCConfig.hs b/library-gen/Stratosphere/ResourceProperties/LambdaFunctionVPCConfig.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/LambdaFunctionVPCConfig.hs
+++ /dev/null
@@ -1,54 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | VpcConfig is a property of the AWS::Lambda::Function resource that
--- enables to your AWS Lambda (Lambda) function to access resources in a VPC.
--- For more information, see Configuring a Lambda Function to Access Resources
--- in an Amazon VPC in the AWS Lambda Developer Guide.
-
-module Stratosphere.ResourceProperties.LambdaFunctionVPCConfig where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for LambdaFunctionVPCConfig. See
--- 'lambdaFunctionVPCConfig' for a more convenient constructor.
-data LambdaFunctionVPCConfig =
-  LambdaFunctionVPCConfig
-  { _lambdaFunctionVPCConfigSecurityGroupIds :: [Val Text]
-  , _lambdaFunctionVPCConfigSubnetIds :: [Val Text]
-  } deriving (Show, Generic)
-
-instance ToJSON LambdaFunctionVPCConfig where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
-
-instance FromJSON LambdaFunctionVPCConfig where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
-
--- | Constructor for 'LambdaFunctionVPCConfig' containing required fields as
--- arguments.
-lambdaFunctionVPCConfig
-  :: [Val Text] -- ^ 'lfvpccSecurityGroupIds'
-  -> [Val Text] -- ^ 'lfvpccSubnetIds'
-  -> LambdaFunctionVPCConfig
-lambdaFunctionVPCConfig securityGroupIdsarg subnetIdsarg =
-  LambdaFunctionVPCConfig
-  { _lambdaFunctionVPCConfigSecurityGroupIds = securityGroupIdsarg
-  , _lambdaFunctionVPCConfigSubnetIds = subnetIdsarg
-  }
-
--- | A list of one or more security groups IDs in the VPC that includes the
--- resources to which your Lambda function requires access.
-lfvpccSecurityGroupIds :: Lens' LambdaFunctionVPCConfig [Val Text]
-lfvpccSecurityGroupIds = lens _lambdaFunctionVPCConfigSecurityGroupIds (\s a -> s { _lambdaFunctionVPCConfigSecurityGroupIds = a })
-
--- | A list of one or more subnet IDs in the VPC that includes the resources
--- to which your Lambda function requires access.
-lfvpccSubnetIds :: Lens' LambdaFunctionVPCConfig [Val Text]
-lfvpccSubnetIds = lens _lambdaFunctionVPCConfigSubnetIds (\s a -> s { _lambdaFunctionVPCConfigSubnetIds = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/LambdaFunctionVpcConfig.hs b/library-gen/Stratosphere/ResourceProperties/LambdaFunctionVpcConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/LambdaFunctionVpcConfig.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-vpcconfig.html
+
+module Stratosphere.ResourceProperties.LambdaFunctionVpcConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for LambdaFunctionVpcConfig. See
+-- | 'lambdaFunctionVpcConfig' for a more convenient constructor.
+data LambdaFunctionVpcConfig =
+  LambdaFunctionVpcConfig
+  { _lambdaFunctionVpcConfigSecurityGroupIds :: [Val Text]
+  , _lambdaFunctionVpcConfigSubnetIds :: [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON LambdaFunctionVpcConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+instance FromJSON LambdaFunctionVpcConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+-- | Constructor for 'LambdaFunctionVpcConfig' containing required fields as
+-- | arguments.
+lambdaFunctionVpcConfig
+  :: [Val Text] -- ^ 'lfvcSecurityGroupIds'
+  -> [Val Text] -- ^ 'lfvcSubnetIds'
+  -> LambdaFunctionVpcConfig
+lambdaFunctionVpcConfig securityGroupIdsarg subnetIdsarg =
+  LambdaFunctionVpcConfig
+  { _lambdaFunctionVpcConfigSecurityGroupIds = securityGroupIdsarg
+  , _lambdaFunctionVpcConfigSubnetIds = subnetIdsarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-vpcconfig.html#cfn-lambda-function-vpcconfig-securitygroupids
+lfvcSecurityGroupIds :: Lens' LambdaFunctionVpcConfig [Val Text]
+lfvcSecurityGroupIds = lens _lambdaFunctionVpcConfigSecurityGroupIds (\s a -> s { _lambdaFunctionVpcConfigSecurityGroupIds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-vpcconfig.html#cfn-lambda-function-vpcconfig-subnetids
+lfvcSubnetIds :: Lens' LambdaFunctionVpcConfig [Val Text]
+lfvcSubnetIds = lens _lambdaFunctionVpcConfigSubnetIds (\s a -> s { _lambdaFunctionVpcConfigSubnetIds = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ListenerProperty.hs b/library-gen/Stratosphere/ResourceProperties/ListenerProperty.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/ListenerProperty.hs
+++ /dev/null
@@ -1,84 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The Listener property is an embedded property of the
--- AWS::ElasticLoadBalancing::LoadBalancer type.
-
-module Stratosphere.ResourceProperties.ListenerProperty where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for ListenerProperty. See 'listenerProperty'
--- for a more convenient constructor.
-data ListenerProperty =
-  ListenerProperty
-  { _listenerPropertyInstancePort :: Val Text
-  , _listenerPropertyInstanceProtocol :: Maybe (Val Text)
-  , _listenerPropertyLoadBalancerPort :: Val Text
-  , _listenerPropertyPolicyNames :: Maybe [Val Text]
-  , _listenerPropertyProtocol :: Val Text
-  , _listenerPropertySSLCertificateId :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON ListenerProperty where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
-
-instance FromJSON ListenerProperty where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
-
--- | Constructor for 'ListenerProperty' containing required fields as
--- arguments.
-listenerProperty
-  :: Val Text -- ^ 'lpInstancePort'
-  -> Val Text -- ^ 'lpLoadBalancerPort'
-  -> Val Text -- ^ 'lpProtocol'
-  -> ListenerProperty
-listenerProperty instancePortarg loadBalancerPortarg protocolarg =
-  ListenerProperty
-  { _listenerPropertyInstancePort = instancePortarg
-  , _listenerPropertyInstanceProtocol = Nothing
-  , _listenerPropertyLoadBalancerPort = loadBalancerPortarg
-  , _listenerPropertyPolicyNames = Nothing
-  , _listenerPropertyProtocol = protocolarg
-  , _listenerPropertySSLCertificateId = Nothing
-  }
-
--- | Specifies the TCP port on which the instance server is listening. This
--- property cannot be modified for the life of the load balancer.
-lpInstancePort :: Lens' ListenerProperty (Val Text)
-lpInstancePort = lens _listenerPropertyInstancePort (\s a -> s { _listenerPropertyInstancePort = a })
-
--- | Specifies the protocol to use for routing traffic to back-end
--- instances—HTTP, HTTPS, TCP, or SSL. This property cannot be modified for
--- the life of the load balancer.
-lpInstanceProtocol :: Lens' ListenerProperty (Maybe (Val Text))
-lpInstanceProtocol = lens _listenerPropertyInstanceProtocol (\s a -> s { _listenerPropertyInstanceProtocol = a })
-
--- | Specifies the external load balancer port number. This property cannot be
--- modified for the life of the load balancer.
-lpLoadBalancerPort :: Lens' ListenerProperty (Val Text)
-lpLoadBalancerPort = lens _listenerPropertyLoadBalancerPort (\s a -> s { _listenerPropertyLoadBalancerPort = a })
-
--- | A list of ElasticLoadBalancing policy names to associate with the
--- listener.
-lpPolicyNames :: Lens' ListenerProperty (Maybe [Val Text])
-lpPolicyNames = lens _listenerPropertyPolicyNames (\s a -> s { _listenerPropertyPolicyNames = a })
-
--- | Specifies the load balancer transport protocol to use for routing — HTTP,
--- HTTPS, TCP or SSL. This property cannot be modified for the life of the
--- load balancer.
-lpProtocol :: Lens' ListenerProperty (Val Text)
-lpProtocol = lens _listenerPropertyProtocol (\s a -> s { _listenerPropertyProtocol = a })
-
--- | The ARN of the SSL certificate to use. For more information about SSL
--- certificates, see Managing Server Certificates in the AWS Identity and
--- Access Management documentation.
-lpSSLCertificateId :: Lens' ListenerProperty (Maybe (Val Text))
-lpSSLCertificateId = lens _listenerPropertySSLCertificateId (\s a -> s { _listenerPropertySSLCertificateId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/LogsMetricFilterMetricTransformation.hs b/library-gen/Stratosphere/ResourceProperties/LogsMetricFilterMetricTransformation.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/LogsMetricFilterMetricTransformation.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-logs-metricfilter-metrictransformation.html
+
+module Stratosphere.ResourceProperties.LogsMetricFilterMetricTransformation where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for LogsMetricFilterMetricTransformation. See
+-- | 'logsMetricFilterMetricTransformation' for a more convenient constructor.
+data LogsMetricFilterMetricTransformation =
+  LogsMetricFilterMetricTransformation
+  { _logsMetricFilterMetricTransformationMetricName :: Val Text
+  , _logsMetricFilterMetricTransformationMetricNamespace :: Val Text
+  , _logsMetricFilterMetricTransformationMetricValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON LogsMetricFilterMetricTransformation where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+instance FromJSON LogsMetricFilterMetricTransformation where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+-- | Constructor for 'LogsMetricFilterMetricTransformation' containing
+-- | required fields as arguments.
+logsMetricFilterMetricTransformation
+  :: Val Text -- ^ 'lmfmtMetricName'
+  -> Val Text -- ^ 'lmfmtMetricNamespace'
+  -> Val Text -- ^ 'lmfmtMetricValue'
+  -> LogsMetricFilterMetricTransformation
+logsMetricFilterMetricTransformation metricNamearg metricNamespacearg metricValuearg =
+  LogsMetricFilterMetricTransformation
+  { _logsMetricFilterMetricTransformationMetricName = metricNamearg
+  , _logsMetricFilterMetricTransformationMetricNamespace = metricNamespacearg
+  , _logsMetricFilterMetricTransformationMetricValue = metricValuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-logs-metricfilter-metrictransformation.html#cfn-cwl-metricfilter-metrictransformation-metricname
+lmfmtMetricName :: Lens' LogsMetricFilterMetricTransformation (Val Text)
+lmfmtMetricName = lens _logsMetricFilterMetricTransformationMetricName (\s a -> s { _logsMetricFilterMetricTransformationMetricName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-logs-metricfilter-metrictransformation.html#cfn-cwl-metricfilter-metrictransformation-metricnamespace
+lmfmtMetricNamespace :: Lens' LogsMetricFilterMetricTransformation (Val Text)
+lmfmtMetricNamespace = lens _logsMetricFilterMetricTransformationMetricNamespace (\s a -> s { _logsMetricFilterMetricTransformationMetricNamespace = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-logs-metricfilter-metrictransformation.html#cfn-cwl-metricfilter-metrictransformation-metricvalue
+lmfmtMetricValue :: Lens' LogsMetricFilterMetricTransformation (Val Text)
+lmfmtMetricValue = lens _logsMetricFilterMetricTransformationMetricValue (\s a -> s { _logsMetricFilterMetricTransformationMetricValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/NameValuePair.hs b/library-gen/Stratosphere/ResourceProperties/NameValuePair.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/NameValuePair.hs
+++ /dev/null
@@ -1,48 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | A pair of name and value. Used in ELB Attributes
-
-module Stratosphere.ResourceProperties.NameValuePair where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for NameValuePair. See 'nameValuePair' for a
--- more convenient constructor.
-data NameValuePair =
-  NameValuePair
-  { _nameValuePairName :: Val Text
-  , _nameValuePairValue :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON NameValuePair where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
-
-instance FromJSON NameValuePair where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
-
--- | Constructor for 'NameValuePair' containing required fields as arguments.
-nameValuePair
-  :: Val Text -- ^ 'nvpName'
-  -> Val Text -- ^ 'nvpValue'
-  -> NameValuePair
-nameValuePair namearg valuearg =
-  NameValuePair
-  { _nameValuePairName = namearg
-  , _nameValuePairValue = valuearg
-  }
-
--- | The name of an attribute
-nvpName :: Lens' NameValuePair (Val Text)
-nvpName = lens _nameValuePairName (\s a -> s { _nameValuePairName = a })
-
--- | The value of an attribute
-nvpValue :: Lens' NameValuePair (Val Text)
-nvpValue = lens _nameValuePairValue (\s a -> s { _nameValuePairValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/NetworkInterface.hs b/library-gen/Stratosphere/ResourceProperties/NetworkInterface.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/NetworkInterface.hs
+++ /dev/null
@@ -1,117 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
-
-
-module Stratosphere.ResourceProperties.NetworkInterface where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.PrivateIpAddressSpecification
-
--- | Full data type definition for NetworkInterface. See 'networkInterface'
--- for a more convenient constructor.
-data NetworkInterface =
-  NetworkInterface
-  { _networkInterfaceAssociatePublicIpAddress :: Maybe (Val Bool')
-  , _networkInterfaceDeleteOnTermination :: Maybe (Val Bool')
-  , _networkInterfaceDescription :: Maybe (Val Text)
-  , _networkInterfaceDeviceIndex :: Val Text
-  , _networkInterfaceGroupSet :: Maybe [Val Text]
-  , _networkInterfaceNetworkInterfaceId :: Maybe (Val Text)
-  , _networkInterfacePrivateIpAddress :: Maybe (Val Text)
-  , _networkInterfacePrivateIpAddresses :: Maybe [PrivateIpAddressSpecification]
-  , _networkInterfaceSecondaryPrivateIpAddressCount :: Maybe (Val Integer')
-  , _networkInterfaceSubnetId :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON NetworkInterface where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
-
-instance FromJSON NetworkInterface where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
-
--- | Constructor for 'NetworkInterface' containing required fields as
--- arguments.
-networkInterface
-  :: Val Text -- ^ 'niDeviceIndex'
-  -> NetworkInterface
-networkInterface deviceIndexarg =
-  NetworkInterface
-  { _networkInterfaceAssociatePublicIpAddress = Nothing
-  , _networkInterfaceDeleteOnTermination = Nothing
-  , _networkInterfaceDescription = Nothing
-  , _networkInterfaceDeviceIndex = deviceIndexarg
-  , _networkInterfaceGroupSet = Nothing
-  , _networkInterfaceNetworkInterfaceId = Nothing
-  , _networkInterfacePrivateIpAddress = Nothing
-  , _networkInterfacePrivateIpAddresses = Nothing
-  , _networkInterfaceSecondaryPrivateIpAddressCount = Nothing
-  , _networkInterfaceSubnetId = Nothing
-  }
-
--- | Indicates whether the network interface receives a public IP address. You
--- can associate a public IP address with a network interface only if it has a
--- device index of eth0 and if it is a new network interface (not an existing
--- one). In other words, if you specify true, don't specify a network
--- interface ID. For more information, see Amazon EC2 Instance IP Addressing.
-niAssociatePublicIpAddress :: Lens' NetworkInterface (Maybe (Val Bool'))
-niAssociatePublicIpAddress = lens _networkInterfaceAssociatePublicIpAddress (\s a -> s { _networkInterfaceAssociatePublicIpAddress = a })
-
--- | Whether to delete the network interface when the instance terminates.
-niDeleteOnTermination :: Lens' NetworkInterface (Maybe (Val Bool'))
-niDeleteOnTermination = lens _networkInterfaceDeleteOnTermination (\s a -> s { _networkInterfaceDeleteOnTermination = a })
-
--- | The description of this network interface.
-niDescription :: Lens' NetworkInterface (Maybe (Val Text))
-niDescription = lens _networkInterfaceDescription (\s a -> s { _networkInterfaceDescription = a })
-
--- | The network interface's position in the attachment order.
-niDeviceIndex :: Lens' NetworkInterface (Val Text)
-niDeviceIndex = lens _networkInterfaceDeviceIndex (\s a -> s { _networkInterfaceDeviceIndex = a })
-
--- | A list of security group IDs associated with this network interface.
-niGroupSet :: Lens' NetworkInterface (Maybe [Val Text])
-niGroupSet = lens _networkInterfaceGroupSet (\s a -> s { _networkInterfaceGroupSet = a })
-
--- | An existing network interface ID.
-niNetworkInterfaceId :: Lens' NetworkInterface (Maybe (Val Text))
-niNetworkInterfaceId = lens _networkInterfaceNetworkInterfaceId (\s a -> s { _networkInterfaceNetworkInterfaceId = a })
-
--- | Assigns a single private IP address to the network interface, which is
--- used as the primary private IP address. If you want to specify multiple
--- private IP address, use the PrivateIpAddresses property.
-niPrivateIpAddress :: Lens' NetworkInterface (Maybe (Val Text))
-niPrivateIpAddress = lens _networkInterfacePrivateIpAddress (\s a -> s { _networkInterfacePrivateIpAddress = a })
-
--- | Assigns a list of private IP addresses to the network interface. You can
--- specify a primary private IP address by setting the value of the Primary
--- property to true in the PrivateIpAddressSpecification property. If you want
--- Amazon EC2 to automatically assign private IP addresses, use the
--- SecondaryPrivateIpCount property and do not specify this property. For
--- information about the maximum number of private IP addresses, see Private
--- IP Addresses Per ENI Per Instance Type in the Amazon EC2 User Guide for
--- Linux Instances.
-niPrivateIpAddresses :: Lens' NetworkInterface (Maybe [PrivateIpAddressSpecification])
-niPrivateIpAddresses = lens _networkInterfacePrivateIpAddresses (\s a -> s { _networkInterfacePrivateIpAddresses = a })
-
--- | The number of secondary private IP addresses that Amazon EC2 auto assigns
--- to the network interface. Amazon EC2 uses the value of the PrivateIpAddress
--- property as the primary private IP address. If you don't specify that
--- property, Amazon EC2 auto assigns both the primary and secondary private IP
--- addresses. If you want to specify your own list of private IP addresses,
--- use the PrivateIpAddresses property and do not specify this property. For
--- information about the maximum number of private IP addresses, see Private
--- IP Addresses Per ENI Per Instance Type in the Amazon EC2 User Guide for
--- Linux Instances.
-niSecondaryPrivateIpAddressCount :: Lens' NetworkInterface (Maybe (Val Integer'))
-niSecondaryPrivateIpAddressCount = lens _networkInterfaceSecondaryPrivateIpAddressCount (\s a -> s { _networkInterfaceSecondaryPrivateIpAddressCount = a })
-
--- | The ID of the subnet to associate with the network interface.
-niSubnetId :: Lens' NetworkInterface (Maybe (Val Text))
-niSubnetId = lens _networkInterfaceSubnetId (\s a -> s { _networkInterfaceSubnetId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksAppDataSource.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksAppDataSource.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksAppDataSource.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-app-datasource.html
+
+module Stratosphere.ResourceProperties.OpsWorksAppDataSource where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksAppDataSource. See
+-- | 'opsWorksAppDataSource' for a more convenient constructor.
+data OpsWorksAppDataSource =
+  OpsWorksAppDataSource
+  { _opsWorksAppDataSourceArn :: Maybe (Val Text)
+  , _opsWorksAppDataSourceDatabaseName :: Maybe (Val Text)
+  , _opsWorksAppDataSourceType :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksAppDataSource where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+instance FromJSON OpsWorksAppDataSource where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksAppDataSource' containing required fields as
+-- | arguments.
+opsWorksAppDataSource
+  :: OpsWorksAppDataSource
+opsWorksAppDataSource  =
+  OpsWorksAppDataSource
+  { _opsWorksAppDataSourceArn = Nothing
+  , _opsWorksAppDataSourceDatabaseName = Nothing
+  , _opsWorksAppDataSourceType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-app-datasource.html#cfn-opsworks-app-datasource-arn
+owadsArn :: Lens' OpsWorksAppDataSource (Maybe (Val Text))
+owadsArn = lens _opsWorksAppDataSourceArn (\s a -> s { _opsWorksAppDataSourceArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-app-datasource.html#cfn-opsworks-app-datasource-databasename
+owadsDatabaseName :: Lens' OpsWorksAppDataSource (Maybe (Val Text))
+owadsDatabaseName = lens _opsWorksAppDataSourceDatabaseName (\s a -> s { _opsWorksAppDataSourceDatabaseName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-app-datasource.html#cfn-opsworks-app-datasource-type
+owadsType :: Lens' OpsWorksAppDataSource (Maybe (Val Text))
+owadsType = lens _opsWorksAppDataSourceType (\s a -> s { _opsWorksAppDataSourceType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksAppEnvironmentVariable.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksAppEnvironmentVariable.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksAppEnvironmentVariable.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-app-environment.html
+
+module Stratosphere.ResourceProperties.OpsWorksAppEnvironmentVariable where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksAppEnvironmentVariable. See
+-- | 'opsWorksAppEnvironmentVariable' for a more convenient constructor.
+data OpsWorksAppEnvironmentVariable =
+  OpsWorksAppEnvironmentVariable
+  { _opsWorksAppEnvironmentVariableKey :: Val Text
+  , _opsWorksAppEnvironmentVariableSecure :: Maybe (Val Bool')
+  , _opsWorksAppEnvironmentVariableValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksAppEnvironmentVariable where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+instance FromJSON OpsWorksAppEnvironmentVariable where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksAppEnvironmentVariable' containing required
+-- | fields as arguments.
+opsWorksAppEnvironmentVariable
+  :: Val Text -- ^ 'owaevKey'
+  -> Val Text -- ^ 'owaevValue'
+  -> OpsWorksAppEnvironmentVariable
+opsWorksAppEnvironmentVariable keyarg valuearg =
+  OpsWorksAppEnvironmentVariable
+  { _opsWorksAppEnvironmentVariableKey = keyarg
+  , _opsWorksAppEnvironmentVariableSecure = Nothing
+  , _opsWorksAppEnvironmentVariableValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-app-environment.html#cfn-opsworks-app-environment-key
+owaevKey :: Lens' OpsWorksAppEnvironmentVariable (Val Text)
+owaevKey = lens _opsWorksAppEnvironmentVariableKey (\s a -> s { _opsWorksAppEnvironmentVariableKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-app-environment.html#cfn-opsworks-app-environment-secure
+owaevSecure :: Lens' OpsWorksAppEnvironmentVariable (Maybe (Val Bool'))
+owaevSecure = lens _opsWorksAppEnvironmentVariableSecure (\s a -> s { _opsWorksAppEnvironmentVariableSecure = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-app-environment.html#value
+owaevValue :: Lens' OpsWorksAppEnvironmentVariable (Val Text)
+owaevValue = lens _opsWorksAppEnvironmentVariableValue (\s a -> s { _opsWorksAppEnvironmentVariableValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksAppSource.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksAppSource.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksAppSource.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-source.html
+
+module Stratosphere.ResourceProperties.OpsWorksAppSource where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksAppSource. See 'opsWorksAppSource'
+-- | for a more convenient constructor.
+data OpsWorksAppSource =
+  OpsWorksAppSource
+  { _opsWorksAppSourcePassword :: Maybe (Val Text)
+  , _opsWorksAppSourceRevision :: Maybe (Val Text)
+  , _opsWorksAppSourceSshKey :: Maybe (Val Text)
+  , _opsWorksAppSourceType :: Maybe (Val Text)
+  , _opsWorksAppSourceUrl :: Maybe (Val Text)
+  , _opsWorksAppSourceUsername :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksAppSource where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+
+instance FromJSON OpsWorksAppSource where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksAppSource' containing required fields as
+-- | arguments.
+opsWorksAppSource
+  :: OpsWorksAppSource
+opsWorksAppSource  =
+  OpsWorksAppSource
+  { _opsWorksAppSourcePassword = Nothing
+  , _opsWorksAppSourceRevision = Nothing
+  , _opsWorksAppSourceSshKey = Nothing
+  , _opsWorksAppSourceType = Nothing
+  , _opsWorksAppSourceUrl = Nothing
+  , _opsWorksAppSourceUsername = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-source.html#cfn-opsworks-custcookbooksource-pw
+owasPassword :: Lens' OpsWorksAppSource (Maybe (Val Text))
+owasPassword = lens _opsWorksAppSourcePassword (\s a -> s { _opsWorksAppSourcePassword = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-source.html#cfn-opsworks-custcookbooksource-revision
+owasRevision :: Lens' OpsWorksAppSource (Maybe (Val Text))
+owasRevision = lens _opsWorksAppSourceRevision (\s a -> s { _opsWorksAppSourceRevision = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-source.html#cfn-opsworks-custcookbooksource-sshkey
+owasSshKey :: Lens' OpsWorksAppSource (Maybe (Val Text))
+owasSshKey = lens _opsWorksAppSourceSshKey (\s a -> s { _opsWorksAppSourceSshKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-source.html#cfn-opsworks-custcookbooksource-type
+owasType :: Lens' OpsWorksAppSource (Maybe (Val Text))
+owasType = lens _opsWorksAppSourceType (\s a -> s { _opsWorksAppSourceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-source.html#cfn-opsworks-custcookbooksource-url
+owasUrl :: Lens' OpsWorksAppSource (Maybe (Val Text))
+owasUrl = lens _opsWorksAppSourceUrl (\s a -> s { _opsWorksAppSourceUrl = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-source.html#cfn-opsworks-custcookbooksource-username
+owasUsername :: Lens' OpsWorksAppSource (Maybe (Val Text))
+owasUsername = lens _opsWorksAppSourceUsername (\s a -> s { _opsWorksAppSourceUsername = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksAppSslConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksAppSslConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksAppSslConfiguration.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-app-sslconfiguration.html
+
+module Stratosphere.ResourceProperties.OpsWorksAppSslConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksAppSslConfiguration. See
+-- | 'opsWorksAppSslConfiguration' for a more convenient constructor.
+data OpsWorksAppSslConfiguration =
+  OpsWorksAppSslConfiguration
+  { _opsWorksAppSslConfigurationCertificate :: Maybe (Val Text)
+  , _opsWorksAppSslConfigurationChain :: Maybe (Val Text)
+  , _opsWorksAppSslConfigurationPrivateKey :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksAppSslConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON OpsWorksAppSslConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksAppSslConfiguration' containing required fields
+-- | as arguments.
+opsWorksAppSslConfiguration
+  :: OpsWorksAppSslConfiguration
+opsWorksAppSslConfiguration  =
+  OpsWorksAppSslConfiguration
+  { _opsWorksAppSslConfigurationCertificate = Nothing
+  , _opsWorksAppSslConfigurationChain = Nothing
+  , _opsWorksAppSslConfigurationPrivateKey = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-app-sslconfiguration.html#cfn-opsworks-app-sslconfig-certificate
+owascCertificate :: Lens' OpsWorksAppSslConfiguration (Maybe (Val Text))
+owascCertificate = lens _opsWorksAppSslConfigurationCertificate (\s a -> s { _opsWorksAppSslConfigurationCertificate = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-app-sslconfiguration.html#cfn-opsworks-app-sslconfig-chain
+owascChain :: Lens' OpsWorksAppSslConfiguration (Maybe (Val Text))
+owascChain = lens _opsWorksAppSslConfigurationChain (\s a -> s { _opsWorksAppSslConfigurationChain = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-app-sslconfiguration.html#cfn-opsworks-app-sslconfig-privatekey
+owascPrivateKey :: Lens' OpsWorksAppSslConfiguration (Maybe (Val Text))
+owascPrivateKey = lens _opsWorksAppSslConfigurationPrivateKey (\s a -> s { _opsWorksAppSslConfigurationPrivateKey = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceBlockDeviceMapping.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceBlockDeviceMapping.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceBlockDeviceMapping.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-blockdevicemapping.html
+
+module Stratosphere.ResourceProperties.OpsWorksInstanceBlockDeviceMapping where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.OpsWorksInstanceEbsBlockDevice
+
+-- | Full data type definition for OpsWorksInstanceBlockDeviceMapping. See
+-- | 'opsWorksInstanceBlockDeviceMapping' for a more convenient constructor.
+data OpsWorksInstanceBlockDeviceMapping =
+  OpsWorksInstanceBlockDeviceMapping
+  { _opsWorksInstanceBlockDeviceMappingDeviceName :: Maybe (Val Text)
+  , _opsWorksInstanceBlockDeviceMappingEbs :: Maybe OpsWorksInstanceEbsBlockDevice
+  , _opsWorksInstanceBlockDeviceMappingNoDevice :: Maybe (Val Text)
+  , _opsWorksInstanceBlockDeviceMappingVirtualName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksInstanceBlockDeviceMapping where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+instance FromJSON OpsWorksInstanceBlockDeviceMapping where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksInstanceBlockDeviceMapping' containing required
+-- | fields as arguments.
+opsWorksInstanceBlockDeviceMapping
+  :: OpsWorksInstanceBlockDeviceMapping
+opsWorksInstanceBlockDeviceMapping  =
+  OpsWorksInstanceBlockDeviceMapping
+  { _opsWorksInstanceBlockDeviceMappingDeviceName = Nothing
+  , _opsWorksInstanceBlockDeviceMappingEbs = Nothing
+  , _opsWorksInstanceBlockDeviceMappingNoDevice = Nothing
+  , _opsWorksInstanceBlockDeviceMappingVirtualName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-blockdevicemapping.html#cfn-opsworks-instance-blockdevicemapping-devicename
+owibdmDeviceName :: Lens' OpsWorksInstanceBlockDeviceMapping (Maybe (Val Text))
+owibdmDeviceName = lens _opsWorksInstanceBlockDeviceMappingDeviceName (\s a -> s { _opsWorksInstanceBlockDeviceMappingDeviceName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-blockdevicemapping.html#cfn-opsworks-instance-blockdevicemapping-ebs
+owibdmEbs :: Lens' OpsWorksInstanceBlockDeviceMapping (Maybe OpsWorksInstanceEbsBlockDevice)
+owibdmEbs = lens _opsWorksInstanceBlockDeviceMappingEbs (\s a -> s { _opsWorksInstanceBlockDeviceMappingEbs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-blockdevicemapping.html#cfn-opsworks-instance-blockdevicemapping-nodevice
+owibdmNoDevice :: Lens' OpsWorksInstanceBlockDeviceMapping (Maybe (Val Text))
+owibdmNoDevice = lens _opsWorksInstanceBlockDeviceMappingNoDevice (\s a -> s { _opsWorksInstanceBlockDeviceMappingNoDevice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-blockdevicemapping.html#cfn-opsworks-instance-blockdevicemapping-virtualname
+owibdmVirtualName :: Lens' OpsWorksInstanceBlockDeviceMapping (Maybe (Val Text))
+owibdmVirtualName = lens _opsWorksInstanceBlockDeviceMappingVirtualName (\s a -> s { _opsWorksInstanceBlockDeviceMappingVirtualName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceEbsBlockDevice.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceEbsBlockDevice.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceEbsBlockDevice.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-ebsblockdevice.html
+
+module Stratosphere.ResourceProperties.OpsWorksInstanceEbsBlockDevice where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksInstanceEbsBlockDevice. See
+-- | 'opsWorksInstanceEbsBlockDevice' for a more convenient constructor.
+data OpsWorksInstanceEbsBlockDevice =
+  OpsWorksInstanceEbsBlockDevice
+  { _opsWorksInstanceEbsBlockDeviceDeleteOnTermination :: Maybe (Val Bool')
+  , _opsWorksInstanceEbsBlockDeviceIops :: Maybe (Val Integer')
+  , _opsWorksInstanceEbsBlockDeviceSnapshotId :: Maybe (Val Text)
+  , _opsWorksInstanceEbsBlockDeviceVolumeSize :: Maybe (Val Integer')
+  , _opsWorksInstanceEbsBlockDeviceVolumeType :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksInstanceEbsBlockDevice where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+instance FromJSON OpsWorksInstanceEbsBlockDevice where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksInstanceEbsBlockDevice' containing required
+-- | fields as arguments.
+opsWorksInstanceEbsBlockDevice
+  :: OpsWorksInstanceEbsBlockDevice
+opsWorksInstanceEbsBlockDevice  =
+  OpsWorksInstanceEbsBlockDevice
+  { _opsWorksInstanceEbsBlockDeviceDeleteOnTermination = Nothing
+  , _opsWorksInstanceEbsBlockDeviceIops = Nothing
+  , _opsWorksInstanceEbsBlockDeviceSnapshotId = Nothing
+  , _opsWorksInstanceEbsBlockDeviceVolumeSize = Nothing
+  , _opsWorksInstanceEbsBlockDeviceVolumeType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-ebsblockdevice.html#cfn-opsworks-instance-ebsblockdevice-deleteontermination
+owiebdDeleteOnTermination :: Lens' OpsWorksInstanceEbsBlockDevice (Maybe (Val Bool'))
+owiebdDeleteOnTermination = lens _opsWorksInstanceEbsBlockDeviceDeleteOnTermination (\s a -> s { _opsWorksInstanceEbsBlockDeviceDeleteOnTermination = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-ebsblockdevice.html#cfn-opsworks-instance-ebsblockdevice-iops
+owiebdIops :: Lens' OpsWorksInstanceEbsBlockDevice (Maybe (Val Integer'))
+owiebdIops = lens _opsWorksInstanceEbsBlockDeviceIops (\s a -> s { _opsWorksInstanceEbsBlockDeviceIops = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-ebsblockdevice.html#cfn-opsworks-instance-ebsblockdevice-snapshotid
+owiebdSnapshotId :: Lens' OpsWorksInstanceEbsBlockDevice (Maybe (Val Text))
+owiebdSnapshotId = lens _opsWorksInstanceEbsBlockDeviceSnapshotId (\s a -> s { _opsWorksInstanceEbsBlockDeviceSnapshotId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-ebsblockdevice.html#cfn-opsworks-instance-ebsblockdevice-volumesize
+owiebdVolumeSize :: Lens' OpsWorksInstanceEbsBlockDevice (Maybe (Val Integer'))
+owiebdVolumeSize = lens _opsWorksInstanceEbsBlockDeviceVolumeSize (\s a -> s { _opsWorksInstanceEbsBlockDeviceVolumeSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-ebsblockdevice.html#cfn-opsworks-instance-ebsblockdevice-volumetype
+owiebdVolumeType :: Lens' OpsWorksInstanceEbsBlockDevice (Maybe (Val Text))
+owiebdVolumeType = lens _opsWorksInstanceEbsBlockDeviceVolumeType (\s a -> s { _opsWorksInstanceEbsBlockDeviceVolumeType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceTimeBasedAutoScaling.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceTimeBasedAutoScaling.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksInstanceTimeBasedAutoScaling.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-timebasedautoscaling.html
+
+module Stratosphere.ResourceProperties.OpsWorksInstanceTimeBasedAutoScaling where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksInstanceTimeBasedAutoScaling. See
+-- | 'opsWorksInstanceTimeBasedAutoScaling' for a more convenient constructor.
+data OpsWorksInstanceTimeBasedAutoScaling =
+  OpsWorksInstanceTimeBasedAutoScaling
+  { _opsWorksInstanceTimeBasedAutoScalingFriday :: Maybe Object
+  , _opsWorksInstanceTimeBasedAutoScalingMonday :: Maybe Object
+  , _opsWorksInstanceTimeBasedAutoScalingSaturday :: Maybe Object
+  , _opsWorksInstanceTimeBasedAutoScalingSunday :: Maybe Object
+  , _opsWorksInstanceTimeBasedAutoScalingThursday :: Maybe Object
+  , _opsWorksInstanceTimeBasedAutoScalingTuesday :: Maybe Object
+  , _opsWorksInstanceTimeBasedAutoScalingWednesday :: Maybe Object
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksInstanceTimeBasedAutoScaling where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+instance FromJSON OpsWorksInstanceTimeBasedAutoScaling where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksInstanceTimeBasedAutoScaling' containing
+-- | required fields as arguments.
+opsWorksInstanceTimeBasedAutoScaling
+  :: OpsWorksInstanceTimeBasedAutoScaling
+opsWorksInstanceTimeBasedAutoScaling  =
+  OpsWorksInstanceTimeBasedAutoScaling
+  { _opsWorksInstanceTimeBasedAutoScalingFriday = Nothing
+  , _opsWorksInstanceTimeBasedAutoScalingMonday = Nothing
+  , _opsWorksInstanceTimeBasedAutoScalingSaturday = Nothing
+  , _opsWorksInstanceTimeBasedAutoScalingSunday = Nothing
+  , _opsWorksInstanceTimeBasedAutoScalingThursday = Nothing
+  , _opsWorksInstanceTimeBasedAutoScalingTuesday = Nothing
+  , _opsWorksInstanceTimeBasedAutoScalingWednesday = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-timebasedautoscaling.html#cfn-opsworks-instance-timebasedautoscaling-friday
+owitbasFriday :: Lens' OpsWorksInstanceTimeBasedAutoScaling (Maybe Object)
+owitbasFriday = lens _opsWorksInstanceTimeBasedAutoScalingFriday (\s a -> s { _opsWorksInstanceTimeBasedAutoScalingFriday = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-timebasedautoscaling.html#cfn-opsworks-instance-timebasedautoscaling-monday
+owitbasMonday :: Lens' OpsWorksInstanceTimeBasedAutoScaling (Maybe Object)
+owitbasMonday = lens _opsWorksInstanceTimeBasedAutoScalingMonday (\s a -> s { _opsWorksInstanceTimeBasedAutoScalingMonday = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-timebasedautoscaling.html#cfn-opsworks-instance-timebasedautoscaling-saturday
+owitbasSaturday :: Lens' OpsWorksInstanceTimeBasedAutoScaling (Maybe Object)
+owitbasSaturday = lens _opsWorksInstanceTimeBasedAutoScalingSaturday (\s a -> s { _opsWorksInstanceTimeBasedAutoScalingSaturday = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-timebasedautoscaling.html#cfn-opsworks-instance-timebasedautoscaling-sunday
+owitbasSunday :: Lens' OpsWorksInstanceTimeBasedAutoScaling (Maybe Object)
+owitbasSunday = lens _opsWorksInstanceTimeBasedAutoScalingSunday (\s a -> s { _opsWorksInstanceTimeBasedAutoScalingSunday = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-timebasedautoscaling.html#cfn-opsworks-instance-timebasedautoscaling-thursday
+owitbasThursday :: Lens' OpsWorksInstanceTimeBasedAutoScaling (Maybe Object)
+owitbasThursday = lens _opsWorksInstanceTimeBasedAutoScalingThursday (\s a -> s { _opsWorksInstanceTimeBasedAutoScalingThursday = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-timebasedautoscaling.html#cfn-opsworks-instance-timebasedautoscaling-tuesday
+owitbasTuesday :: Lens' OpsWorksInstanceTimeBasedAutoScaling (Maybe Object)
+owitbasTuesday = lens _opsWorksInstanceTimeBasedAutoScalingTuesday (\s a -> s { _opsWorksInstanceTimeBasedAutoScalingTuesday = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-instance-timebasedautoscaling.html#cfn-opsworks-instance-timebasedautoscaling-wednesday
+owitbasWednesday :: Lens' OpsWorksInstanceTimeBasedAutoScaling (Maybe Object)
+owitbasWednesday = lens _opsWorksInstanceTimeBasedAutoScalingWednesday (\s a -> s { _opsWorksInstanceTimeBasedAutoScalingWednesday = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerAutoScalingThresholds.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerAutoScalingThresholds.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerAutoScalingThresholds.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-loadbasedautoscaling-autoscalingthresholds.html
+
+module Stratosphere.ResourceProperties.OpsWorksLayerAutoScalingThresholds where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksLayerAutoScalingThresholds. See
+-- | 'opsWorksLayerAutoScalingThresholds' for a more convenient constructor.
+data OpsWorksLayerAutoScalingThresholds =
+  OpsWorksLayerAutoScalingThresholds
+  { _opsWorksLayerAutoScalingThresholdsCpuThreshold :: Maybe (Val Double')
+  , _opsWorksLayerAutoScalingThresholdsIgnoreMetricsTime :: Maybe (Val Integer')
+  , _opsWorksLayerAutoScalingThresholdsInstanceCount :: Maybe (Val Integer')
+  , _opsWorksLayerAutoScalingThresholdsLoadThreshold :: Maybe (Val Double')
+  , _opsWorksLayerAutoScalingThresholdsMemoryThreshold :: Maybe (Val Double')
+  , _opsWorksLayerAutoScalingThresholdsThresholdsWaitTime :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksLayerAutoScalingThresholds where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+instance FromJSON OpsWorksLayerAutoScalingThresholds where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksLayerAutoScalingThresholds' containing required
+-- | fields as arguments.
+opsWorksLayerAutoScalingThresholds
+  :: OpsWorksLayerAutoScalingThresholds
+opsWorksLayerAutoScalingThresholds  =
+  OpsWorksLayerAutoScalingThresholds
+  { _opsWorksLayerAutoScalingThresholdsCpuThreshold = Nothing
+  , _opsWorksLayerAutoScalingThresholdsIgnoreMetricsTime = Nothing
+  , _opsWorksLayerAutoScalingThresholdsInstanceCount = Nothing
+  , _opsWorksLayerAutoScalingThresholdsLoadThreshold = Nothing
+  , _opsWorksLayerAutoScalingThresholdsMemoryThreshold = Nothing
+  , _opsWorksLayerAutoScalingThresholdsThresholdsWaitTime = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-loadbasedautoscaling-autoscalingthresholds.html#cfn-opsworks-layer-loadbasedautoscaling-autoscalingthresholds-cputhreshold
+owlastCpuThreshold :: Lens' OpsWorksLayerAutoScalingThresholds (Maybe (Val Double'))
+owlastCpuThreshold = lens _opsWorksLayerAutoScalingThresholdsCpuThreshold (\s a -> s { _opsWorksLayerAutoScalingThresholdsCpuThreshold = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-loadbasedautoscaling-autoscalingthresholds.html#cfn-opsworks-layer-loadbasedautoscaling-autoscalingthresholds-ignoremetricstime
+owlastIgnoreMetricsTime :: Lens' OpsWorksLayerAutoScalingThresholds (Maybe (Val Integer'))
+owlastIgnoreMetricsTime = lens _opsWorksLayerAutoScalingThresholdsIgnoreMetricsTime (\s a -> s { _opsWorksLayerAutoScalingThresholdsIgnoreMetricsTime = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-loadbasedautoscaling-autoscalingthresholds.html#cfn-opsworks-layer-loadbasedautoscaling-autoscalingthresholds-instancecount
+owlastInstanceCount :: Lens' OpsWorksLayerAutoScalingThresholds (Maybe (Val Integer'))
+owlastInstanceCount = lens _opsWorksLayerAutoScalingThresholdsInstanceCount (\s a -> s { _opsWorksLayerAutoScalingThresholdsInstanceCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-loadbasedautoscaling-autoscalingthresholds.html#cfn-opsworks-layer-loadbasedautoscaling-autoscalingthresholds-loadthreshold
+owlastLoadThreshold :: Lens' OpsWorksLayerAutoScalingThresholds (Maybe (Val Double'))
+owlastLoadThreshold = lens _opsWorksLayerAutoScalingThresholdsLoadThreshold (\s a -> s { _opsWorksLayerAutoScalingThresholdsLoadThreshold = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-loadbasedautoscaling-autoscalingthresholds.html#cfn-opsworks-layer-loadbasedautoscaling-autoscalingthresholds-memorythreshold
+owlastMemoryThreshold :: Lens' OpsWorksLayerAutoScalingThresholds (Maybe (Val Double'))
+owlastMemoryThreshold = lens _opsWorksLayerAutoScalingThresholdsMemoryThreshold (\s a -> s { _opsWorksLayerAutoScalingThresholdsMemoryThreshold = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-loadbasedautoscaling-autoscalingthresholds.html#cfn-opsworks-layer-loadbasedautoscaling-autoscalingthresholds-thresholdwaittime
+owlastThresholdsWaitTime :: Lens' OpsWorksLayerAutoScalingThresholds (Maybe (Val Integer'))
+owlastThresholdsWaitTime = lens _opsWorksLayerAutoScalingThresholdsThresholdsWaitTime (\s a -> s { _opsWorksLayerAutoScalingThresholdsThresholdsWaitTime = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerLifecycleEventConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerLifecycleEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerLifecycleEventConfiguration.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-lifecycleeventconfiguration.html
+
+module Stratosphere.ResourceProperties.OpsWorksLayerLifecycleEventConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.OpsWorksLayerShutdownEventConfiguration
+
+-- | Full data type definition for OpsWorksLayerLifecycleEventConfiguration.
+-- | See 'opsWorksLayerLifecycleEventConfiguration' for a more convenient
+-- | constructor.
+data OpsWorksLayerLifecycleEventConfiguration =
+  OpsWorksLayerLifecycleEventConfiguration
+  { _opsWorksLayerLifecycleEventConfigurationShutdownEventConfiguration :: Maybe OpsWorksLayerShutdownEventConfiguration
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksLayerLifecycleEventConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+instance FromJSON OpsWorksLayerLifecycleEventConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 41, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksLayerLifecycleEventConfiguration' containing
+-- | required fields as arguments.
+opsWorksLayerLifecycleEventConfiguration
+  :: OpsWorksLayerLifecycleEventConfiguration
+opsWorksLayerLifecycleEventConfiguration  =
+  OpsWorksLayerLifecycleEventConfiguration
+  { _opsWorksLayerLifecycleEventConfigurationShutdownEventConfiguration = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-lifecycleeventconfiguration.html#cfn-opsworks-layer-lifecycleconfiguration-shutdowneventconfiguration
+owllecShutdownEventConfiguration :: Lens' OpsWorksLayerLifecycleEventConfiguration (Maybe OpsWorksLayerShutdownEventConfiguration)
+owllecShutdownEventConfiguration = lens _opsWorksLayerLifecycleEventConfigurationShutdownEventConfiguration (\s a -> s { _opsWorksLayerLifecycleEventConfigurationShutdownEventConfiguration = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerLoadBasedAutoScaling.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerLoadBasedAutoScaling.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerLoadBasedAutoScaling.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-loadbasedautoscaling.html
+
+module Stratosphere.ResourceProperties.OpsWorksLayerLoadBasedAutoScaling where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.OpsWorksLayerAutoScalingThresholds
+
+-- | Full data type definition for OpsWorksLayerLoadBasedAutoScaling. See
+-- | 'opsWorksLayerLoadBasedAutoScaling' for a more convenient constructor.
+data OpsWorksLayerLoadBasedAutoScaling =
+  OpsWorksLayerLoadBasedAutoScaling
+  { _opsWorksLayerLoadBasedAutoScalingDownScaling :: Maybe OpsWorksLayerAutoScalingThresholds
+  , _opsWorksLayerLoadBasedAutoScalingEnable :: Maybe (Val Bool')
+  , _opsWorksLayerLoadBasedAutoScalingUpScaling :: Maybe OpsWorksLayerAutoScalingThresholds
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksLayerLoadBasedAutoScaling where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON OpsWorksLayerLoadBasedAutoScaling where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksLayerLoadBasedAutoScaling' containing required
+-- | fields as arguments.
+opsWorksLayerLoadBasedAutoScaling
+  :: OpsWorksLayerLoadBasedAutoScaling
+opsWorksLayerLoadBasedAutoScaling  =
+  OpsWorksLayerLoadBasedAutoScaling
+  { _opsWorksLayerLoadBasedAutoScalingDownScaling = Nothing
+  , _opsWorksLayerLoadBasedAutoScalingEnable = Nothing
+  , _opsWorksLayerLoadBasedAutoScalingUpScaling = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-loadbasedautoscaling.html#cfn-opsworks-layer-loadbasedautoscaling-downscaling
+owllbasDownScaling :: Lens' OpsWorksLayerLoadBasedAutoScaling (Maybe OpsWorksLayerAutoScalingThresholds)
+owllbasDownScaling = lens _opsWorksLayerLoadBasedAutoScalingDownScaling (\s a -> s { _opsWorksLayerLoadBasedAutoScalingDownScaling = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-loadbasedautoscaling.html#cfn-opsworks-layer-loadbasedautoscaling-enable
+owllbasEnable :: Lens' OpsWorksLayerLoadBasedAutoScaling (Maybe (Val Bool'))
+owllbasEnable = lens _opsWorksLayerLoadBasedAutoScalingEnable (\s a -> s { _opsWorksLayerLoadBasedAutoScalingEnable = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-loadbasedautoscaling.html#cfn-opsworks-layer-loadbasedautoscaling-upscaling
+owllbasUpScaling :: Lens' OpsWorksLayerLoadBasedAutoScaling (Maybe OpsWorksLayerAutoScalingThresholds)
+owllbasUpScaling = lens _opsWorksLayerLoadBasedAutoScalingUpScaling (\s a -> s { _opsWorksLayerLoadBasedAutoScalingUpScaling = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerRecipes.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerRecipes.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerRecipes.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-recipes.html
+
+module Stratosphere.ResourceProperties.OpsWorksLayerRecipes where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksLayerRecipes. See
+-- | 'opsWorksLayerRecipes' for a more convenient constructor.
+data OpsWorksLayerRecipes =
+  OpsWorksLayerRecipes
+  { _opsWorksLayerRecipesConfigure :: Maybe [Val Text]
+  , _opsWorksLayerRecipesDeploy :: Maybe [Val Text]
+  , _opsWorksLayerRecipesSetup :: Maybe [Val Text]
+  , _opsWorksLayerRecipesShutdown :: Maybe [Val Text]
+  , _opsWorksLayerRecipesUndeploy :: Maybe [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksLayerRecipes where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+instance FromJSON OpsWorksLayerRecipes where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksLayerRecipes' containing required fields as
+-- | arguments.
+opsWorksLayerRecipes
+  :: OpsWorksLayerRecipes
+opsWorksLayerRecipes  =
+  OpsWorksLayerRecipes
+  { _opsWorksLayerRecipesConfigure = Nothing
+  , _opsWorksLayerRecipesDeploy = Nothing
+  , _opsWorksLayerRecipesSetup = Nothing
+  , _opsWorksLayerRecipesShutdown = Nothing
+  , _opsWorksLayerRecipesUndeploy = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-recipes.html#cfn-opsworks-layer-customrecipes-configure
+owlrConfigure :: Lens' OpsWorksLayerRecipes (Maybe [Val Text])
+owlrConfigure = lens _opsWorksLayerRecipesConfigure (\s a -> s { _opsWorksLayerRecipesConfigure = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-recipes.html#cfn-opsworks-layer-customrecipes-deploy
+owlrDeploy :: Lens' OpsWorksLayerRecipes (Maybe [Val Text])
+owlrDeploy = lens _opsWorksLayerRecipesDeploy (\s a -> s { _opsWorksLayerRecipesDeploy = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-recipes.html#cfn-opsworks-layer-customrecipes-setup
+owlrSetup :: Lens' OpsWorksLayerRecipes (Maybe [Val Text])
+owlrSetup = lens _opsWorksLayerRecipesSetup (\s a -> s { _opsWorksLayerRecipesSetup = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-recipes.html#cfn-opsworks-layer-customrecipes-shutdown
+owlrShutdown :: Lens' OpsWorksLayerRecipes (Maybe [Val Text])
+owlrShutdown = lens _opsWorksLayerRecipesShutdown (\s a -> s { _opsWorksLayerRecipesShutdown = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-recipes.html#cfn-opsworks-layer-customrecipes-undeploy
+owlrUndeploy :: Lens' OpsWorksLayerRecipes (Maybe [Val Text])
+owlrUndeploy = lens _opsWorksLayerRecipesUndeploy (\s a -> s { _opsWorksLayerRecipesUndeploy = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerShutdownEventConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerShutdownEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerShutdownEventConfiguration.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-lifecycleeventconfiguration-shutdowneventconfiguration.html
+
+module Stratosphere.ResourceProperties.OpsWorksLayerShutdownEventConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksLayerShutdownEventConfiguration.
+-- | See 'opsWorksLayerShutdownEventConfiguration' for a more convenient
+-- | constructor.
+data OpsWorksLayerShutdownEventConfiguration =
+  OpsWorksLayerShutdownEventConfiguration
+  { _opsWorksLayerShutdownEventConfigurationDelayUntilElbConnectionsDrained :: Maybe (Val Bool')
+  , _opsWorksLayerShutdownEventConfigurationExecutionTimeout :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksLayerShutdownEventConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 40, omitNothingFields = True }
+
+instance FromJSON OpsWorksLayerShutdownEventConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 40, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksLayerShutdownEventConfiguration' containing
+-- | required fields as arguments.
+opsWorksLayerShutdownEventConfiguration
+  :: OpsWorksLayerShutdownEventConfiguration
+opsWorksLayerShutdownEventConfiguration  =
+  OpsWorksLayerShutdownEventConfiguration
+  { _opsWorksLayerShutdownEventConfigurationDelayUntilElbConnectionsDrained = Nothing
+  , _opsWorksLayerShutdownEventConfigurationExecutionTimeout = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-lifecycleeventconfiguration-shutdowneventconfiguration.html#cfn-opsworks-layer-lifecycleconfiguration-shutdowneventconfiguration-delayuntilelbconnectionsdrained
+owlsecDelayUntilElbConnectionsDrained :: Lens' OpsWorksLayerShutdownEventConfiguration (Maybe (Val Bool'))
+owlsecDelayUntilElbConnectionsDrained = lens _opsWorksLayerShutdownEventConfigurationDelayUntilElbConnectionsDrained (\s a -> s { _opsWorksLayerShutdownEventConfigurationDelayUntilElbConnectionsDrained = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-lifecycleeventconfiguration-shutdowneventconfiguration.html#cfn-opsworks-layer-lifecycleconfiguration-shutdowneventconfiguration-executiontimeout
+owlsecExecutionTimeout :: Lens' OpsWorksLayerShutdownEventConfiguration (Maybe (Val Integer'))
+owlsecExecutionTimeout = lens _opsWorksLayerShutdownEventConfigurationExecutionTimeout (\s a -> s { _opsWorksLayerShutdownEventConfigurationExecutionTimeout = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerVolumeConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerVolumeConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksLayerVolumeConfiguration.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-volumeconfiguration.html
+
+module Stratosphere.ResourceProperties.OpsWorksLayerVolumeConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksLayerVolumeConfiguration. See
+-- | 'opsWorksLayerVolumeConfiguration' for a more convenient constructor.
+data OpsWorksLayerVolumeConfiguration =
+  OpsWorksLayerVolumeConfiguration
+  { _opsWorksLayerVolumeConfigurationIops :: Maybe (Val Integer')
+  , _opsWorksLayerVolumeConfigurationMountPoint :: Maybe (Val Text)
+  , _opsWorksLayerVolumeConfigurationNumberOfDisks :: Maybe (Val Integer')
+  , _opsWorksLayerVolumeConfigurationRaidLevel :: Maybe (Val Integer')
+  , _opsWorksLayerVolumeConfigurationSize :: Maybe (Val Integer')
+  , _opsWorksLayerVolumeConfigurationVolumeType :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksLayerVolumeConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+instance FromJSON OpsWorksLayerVolumeConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksLayerVolumeConfiguration' containing required
+-- | fields as arguments.
+opsWorksLayerVolumeConfiguration
+  :: OpsWorksLayerVolumeConfiguration
+opsWorksLayerVolumeConfiguration  =
+  OpsWorksLayerVolumeConfiguration
+  { _opsWorksLayerVolumeConfigurationIops = Nothing
+  , _opsWorksLayerVolumeConfigurationMountPoint = Nothing
+  , _opsWorksLayerVolumeConfigurationNumberOfDisks = Nothing
+  , _opsWorksLayerVolumeConfigurationRaidLevel = Nothing
+  , _opsWorksLayerVolumeConfigurationSize = Nothing
+  , _opsWorksLayerVolumeConfigurationVolumeType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-volumeconfiguration.html#cfn-opsworks-layer-volconfig-iops
+owlvcIops :: Lens' OpsWorksLayerVolumeConfiguration (Maybe (Val Integer'))
+owlvcIops = lens _opsWorksLayerVolumeConfigurationIops (\s a -> s { _opsWorksLayerVolumeConfigurationIops = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-volumeconfiguration.html#cfn-opsworks-layer-volconfig-mountpoint
+owlvcMountPoint :: Lens' OpsWorksLayerVolumeConfiguration (Maybe (Val Text))
+owlvcMountPoint = lens _opsWorksLayerVolumeConfigurationMountPoint (\s a -> s { _opsWorksLayerVolumeConfigurationMountPoint = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-volumeconfiguration.html#cfn-opsworks-layer-volconfig-numberofdisks
+owlvcNumberOfDisks :: Lens' OpsWorksLayerVolumeConfiguration (Maybe (Val Integer'))
+owlvcNumberOfDisks = lens _opsWorksLayerVolumeConfigurationNumberOfDisks (\s a -> s { _opsWorksLayerVolumeConfigurationNumberOfDisks = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-volumeconfiguration.html#cfn-opsworks-layer-volconfig-raidlevel
+owlvcRaidLevel :: Lens' OpsWorksLayerVolumeConfiguration (Maybe (Val Integer'))
+owlvcRaidLevel = lens _opsWorksLayerVolumeConfigurationRaidLevel (\s a -> s { _opsWorksLayerVolumeConfigurationRaidLevel = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-volumeconfiguration.html#cfn-opsworks-layer-volconfig-size
+owlvcSize :: Lens' OpsWorksLayerVolumeConfiguration (Maybe (Val Integer'))
+owlvcSize = lens _opsWorksLayerVolumeConfigurationSize (\s a -> s { _opsWorksLayerVolumeConfigurationSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-layer-volumeconfiguration.html#cfn-opsworks-layer-volconfig-volumetype
+owlvcVolumeType :: Lens' OpsWorksLayerVolumeConfiguration (Maybe (Val Text))
+owlvcVolumeType = lens _opsWorksLayerVolumeConfigurationVolumeType (\s a -> s { _opsWorksLayerVolumeConfigurationVolumeType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksStackChefConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackChefConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackChefConfiguration.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-chefconfiguration.html
+
+module Stratosphere.ResourceProperties.OpsWorksStackChefConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksStackChefConfiguration. See
+-- | 'opsWorksStackChefConfiguration' for a more convenient constructor.
+data OpsWorksStackChefConfiguration =
+  OpsWorksStackChefConfiguration
+  { _opsWorksStackChefConfigurationBerkshelfVersion :: Maybe (Val Text)
+  , _opsWorksStackChefConfigurationManageBerkshelf :: Maybe (Val Bool')
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksStackChefConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+instance FromJSON OpsWorksStackChefConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksStackChefConfiguration' containing required
+-- | fields as arguments.
+opsWorksStackChefConfiguration
+  :: OpsWorksStackChefConfiguration
+opsWorksStackChefConfiguration  =
+  OpsWorksStackChefConfiguration
+  { _opsWorksStackChefConfigurationBerkshelfVersion = Nothing
+  , _opsWorksStackChefConfigurationManageBerkshelf = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-chefconfiguration.html#cfn-opsworks-chefconfiguration-berkshelfversion
+owsccBerkshelfVersion :: Lens' OpsWorksStackChefConfiguration (Maybe (Val Text))
+owsccBerkshelfVersion = lens _opsWorksStackChefConfigurationBerkshelfVersion (\s a -> s { _opsWorksStackChefConfigurationBerkshelfVersion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-chefconfiguration.html#cfn-opsworks-chefconfiguration-berkshelfversion
+owsccManageBerkshelf :: Lens' OpsWorksStackChefConfiguration (Maybe (Val Bool'))
+owsccManageBerkshelf = lens _opsWorksStackChefConfigurationManageBerkshelf (\s a -> s { _opsWorksStackChefConfigurationManageBerkshelf = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksStackElasticIp.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackElasticIp.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackElasticIp.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-elasticip.html
+
+module Stratosphere.ResourceProperties.OpsWorksStackElasticIp where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksStackElasticIp. See
+-- | 'opsWorksStackElasticIp' for a more convenient constructor.
+data OpsWorksStackElasticIp =
+  OpsWorksStackElasticIp
+  { _opsWorksStackElasticIpIp :: Val Text
+  , _opsWorksStackElasticIpName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksStackElasticIp where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+instance FromJSON OpsWorksStackElasticIp where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksStackElasticIp' containing required fields as
+-- | arguments.
+opsWorksStackElasticIp
+  :: Val Text -- ^ 'owseiIp'
+  -> OpsWorksStackElasticIp
+opsWorksStackElasticIp iparg =
+  OpsWorksStackElasticIp
+  { _opsWorksStackElasticIpIp = iparg
+  , _opsWorksStackElasticIpName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-elasticip.html#cfn-opsworks-stack-elasticip-ip
+owseiIp :: Lens' OpsWorksStackElasticIp (Val Text)
+owseiIp = lens _opsWorksStackElasticIpIp (\s a -> s { _opsWorksStackElasticIpIp = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-elasticip.html#cfn-opsworks-stack-elasticip-name
+owseiName :: Lens' OpsWorksStackElasticIp (Maybe (Val Text))
+owseiName = lens _opsWorksStackElasticIpName (\s a -> s { _opsWorksStackElasticIpName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksStackRdsDbInstance.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackRdsDbInstance.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackRdsDbInstance.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-rdsdbinstance.html
+
+module Stratosphere.ResourceProperties.OpsWorksStackRdsDbInstance where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksStackRdsDbInstance. See
+-- | 'opsWorksStackRdsDbInstance' for a more convenient constructor.
+data OpsWorksStackRdsDbInstance =
+  OpsWorksStackRdsDbInstance
+  { _opsWorksStackRdsDbInstanceDbPassword :: Val Text
+  , _opsWorksStackRdsDbInstanceDbUser :: Val Text
+  , _opsWorksStackRdsDbInstanceRdsDbInstanceArn :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksStackRdsDbInstance where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON OpsWorksStackRdsDbInstance where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksStackRdsDbInstance' containing required fields
+-- | as arguments.
+opsWorksStackRdsDbInstance
+  :: Val Text -- ^ 'owsrdiDbPassword'
+  -> Val Text -- ^ 'owsrdiDbUser'
+  -> Val Text -- ^ 'owsrdiRdsDbInstanceArn'
+  -> OpsWorksStackRdsDbInstance
+opsWorksStackRdsDbInstance dbPasswordarg dbUserarg rdsDbInstanceArnarg =
+  OpsWorksStackRdsDbInstance
+  { _opsWorksStackRdsDbInstanceDbPassword = dbPasswordarg
+  , _opsWorksStackRdsDbInstanceDbUser = dbUserarg
+  , _opsWorksStackRdsDbInstanceRdsDbInstanceArn = rdsDbInstanceArnarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-rdsdbinstance.html#cfn-opsworks-stack-rdsdbinstance-dbpassword
+owsrdiDbPassword :: Lens' OpsWorksStackRdsDbInstance (Val Text)
+owsrdiDbPassword = lens _opsWorksStackRdsDbInstanceDbPassword (\s a -> s { _opsWorksStackRdsDbInstanceDbPassword = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-rdsdbinstance.html#cfn-opsworks-stack-rdsdbinstance-dbuser
+owsrdiDbUser :: Lens' OpsWorksStackRdsDbInstance (Val Text)
+owsrdiDbUser = lens _opsWorksStackRdsDbInstanceDbUser (\s a -> s { _opsWorksStackRdsDbInstanceDbUser = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-rdsdbinstance.html#cfn-opsworks-stack-rdsdbinstance-rdsdbinstancearn
+owsrdiRdsDbInstanceArn :: Lens' OpsWorksStackRdsDbInstance (Val Text)
+owsrdiRdsDbInstanceArn = lens _opsWorksStackRdsDbInstanceRdsDbInstanceArn (\s a -> s { _opsWorksStackRdsDbInstanceRdsDbInstanceArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksStackSource.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackSource.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackSource.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-source.html
+
+module Stratosphere.ResourceProperties.OpsWorksStackSource where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksStackSource. See
+-- | 'opsWorksStackSource' for a more convenient constructor.
+data OpsWorksStackSource =
+  OpsWorksStackSource
+  { _opsWorksStackSourcePassword :: Maybe (Val Text)
+  , _opsWorksStackSourceRevision :: Maybe (Val Text)
+  , _opsWorksStackSourceSshKey :: Maybe (Val Text)
+  , _opsWorksStackSourceType :: Maybe (Val Text)
+  , _opsWorksStackSourceUrl :: Maybe (Val Text)
+  , _opsWorksStackSourceUsername :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksStackSource where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+instance FromJSON OpsWorksStackSource where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksStackSource' containing required fields as
+-- | arguments.
+opsWorksStackSource
+  :: OpsWorksStackSource
+opsWorksStackSource  =
+  OpsWorksStackSource
+  { _opsWorksStackSourcePassword = Nothing
+  , _opsWorksStackSourceRevision = Nothing
+  , _opsWorksStackSourceSshKey = Nothing
+  , _opsWorksStackSourceType = Nothing
+  , _opsWorksStackSourceUrl = Nothing
+  , _opsWorksStackSourceUsername = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-source.html#cfn-opsworks-custcookbooksource-password
+owssPassword :: Lens' OpsWorksStackSource (Maybe (Val Text))
+owssPassword = lens _opsWorksStackSourcePassword (\s a -> s { _opsWorksStackSourcePassword = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-source.html#cfn-opsworks-custcookbooksource-revision
+owssRevision :: Lens' OpsWorksStackSource (Maybe (Val Text))
+owssRevision = lens _opsWorksStackSourceRevision (\s a -> s { _opsWorksStackSourceRevision = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-source.html#cfn-opsworks-custcookbooksource-sshkey
+owssSshKey :: Lens' OpsWorksStackSource (Maybe (Val Text))
+owssSshKey = lens _opsWorksStackSourceSshKey (\s a -> s { _opsWorksStackSourceSshKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-source.html#cfn-opsworks-custcookbooksource-type
+owssType :: Lens' OpsWorksStackSource (Maybe (Val Text))
+owssType = lens _opsWorksStackSourceType (\s a -> s { _opsWorksStackSourceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-source.html#cfn-opsworks-custcookbooksource-url
+owssUrl :: Lens' OpsWorksStackSource (Maybe (Val Text))
+owssUrl = lens _opsWorksStackSourceUrl (\s a -> s { _opsWorksStackSourceUrl = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-source.html#cfn-opsworks-custcookbooksource-username
+owssUsername :: Lens' OpsWorksStackSource (Maybe (Val Text))
+owssUsername = lens _opsWorksStackSourceUsername (\s a -> s { _opsWorksStackSourceUsername = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/OpsWorksStackStackConfigurationManager.hs b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackStackConfigurationManager.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/OpsWorksStackStackConfigurationManager.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-stackconfigmanager.html
+
+module Stratosphere.ResourceProperties.OpsWorksStackStackConfigurationManager where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksStackStackConfigurationManager. See
+-- | 'opsWorksStackStackConfigurationManager' for a more convenient
+-- | constructor.
+data OpsWorksStackStackConfigurationManager =
+  OpsWorksStackStackConfigurationManager
+  { _opsWorksStackStackConfigurationManagerName :: Maybe (Val Text)
+  , _opsWorksStackStackConfigurationManagerVersion :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksStackStackConfigurationManager where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+instance FromJSON OpsWorksStackStackConfigurationManager where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksStackStackConfigurationManager' containing
+-- | required fields as arguments.
+opsWorksStackStackConfigurationManager
+  :: OpsWorksStackStackConfigurationManager
+opsWorksStackStackConfigurationManager  =
+  OpsWorksStackStackConfigurationManager
+  { _opsWorksStackStackConfigurationManagerName = Nothing
+  , _opsWorksStackStackConfigurationManagerVersion = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-stackconfigmanager.html#cfn-opsworks-configmanager-name
+owsscmName :: Lens' OpsWorksStackStackConfigurationManager (Maybe (Val Text))
+owsscmName = lens _opsWorksStackStackConfigurationManagerName (\s a -> s { _opsWorksStackStackConfigurationManagerName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-stack-stackconfigmanager.html#cfn-opsworks-configmanager-version
+owsscmVersion :: Lens' OpsWorksStackStackConfigurationManager (Maybe (Val Text))
+owsscmVersion = lens _opsWorksStackStackConfigurationManagerVersion (\s a -> s { _opsWorksStackStackConfigurationManagerVersion = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/PrivateIpAddressSpecification.hs b/library-gen/Stratosphere/ResourceProperties/PrivateIpAddressSpecification.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/PrivateIpAddressSpecification.hs
+++ /dev/null
@@ -1,51 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
-
-
-module Stratosphere.ResourceProperties.PrivateIpAddressSpecification where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for PrivateIpAddressSpecification. See
--- 'privateIpAddressSpecification' for a more convenient constructor.
-data PrivateIpAddressSpecification =
-  PrivateIpAddressSpecification
-  { _privateIpAddressSpecificationPrivateIpAddress :: Val Text
-  , _privateIpAddressSpecificationPrimary :: Val Bool'
-  } deriving (Show, Generic)
-
-instance ToJSON PrivateIpAddressSpecification where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
-
-instance FromJSON PrivateIpAddressSpecification where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
-
--- | Constructor for 'PrivateIpAddressSpecification' containing required
--- fields as arguments.
-privateIpAddressSpecification
-  :: Val Text -- ^ 'piasPrivateIpAddress'
-  -> Val Bool' -- ^ 'piasPrimary'
-  -> PrivateIpAddressSpecification
-privateIpAddressSpecification privateIpAddressarg primaryarg =
-  PrivateIpAddressSpecification
-  { _privateIpAddressSpecificationPrivateIpAddress = privateIpAddressarg
-  , _privateIpAddressSpecificationPrimary = primaryarg
-  }
-
--- | The private IP address of the network interface.
-piasPrivateIpAddress :: Lens' PrivateIpAddressSpecification (Val Text)
-piasPrivateIpAddress = lens _privateIpAddressSpecificationPrivateIpAddress (\s a -> s { _privateIpAddressSpecificationPrivateIpAddress = a })
-
--- | Sets the private IP address as the primary private address. You can set
--- only one primary private IP address. If you don't specify a primary private
--- IP address, Amazon EC2 automatically assigns a primary private IP address.
-piasPrimary :: Lens' PrivateIpAddressSpecification (Val Bool')
-piasPrimary = lens _privateIpAddressSpecificationPrimary (\s a -> s { _privateIpAddressSpecificationPrimary = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/RDSDBSecurityGroupIngressProperty.hs b/library-gen/Stratosphere/ResourceProperties/RDSDBSecurityGroupIngressProperty.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/RDSDBSecurityGroupIngressProperty.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-security-group-rule.html
+
+module Stratosphere.ResourceProperties.RDSDBSecurityGroupIngressProperty where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for RDSDBSecurityGroupIngressProperty. See
+-- | 'rdsdbSecurityGroupIngressProperty' for a more convenient constructor.
+data RDSDBSecurityGroupIngressProperty =
+  RDSDBSecurityGroupIngressProperty
+  { _rDSDBSecurityGroupIngressPropertyCDIRIP :: Maybe (Val Text)
+  , _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupId :: Maybe (Val Text)
+  , _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupName :: Maybe (Val Text)
+  , _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupOwnerId :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON RDSDBSecurityGroupIngressProperty where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON RDSDBSecurityGroupIngressProperty where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'RDSDBSecurityGroupIngressProperty' containing required
+-- | fields as arguments.
+rdsdbSecurityGroupIngressProperty
+  :: RDSDBSecurityGroupIngressProperty
+rdsdbSecurityGroupIngressProperty  =
+  RDSDBSecurityGroupIngressProperty
+  { _rDSDBSecurityGroupIngressPropertyCDIRIP = Nothing
+  , _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupId = Nothing
+  , _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupName = Nothing
+  , _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupOwnerId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-security-group-rule.html#cfn-rds-securitygroup-cidrip
+rdsdbsgipCDIRIP :: Lens' RDSDBSecurityGroupIngressProperty (Maybe (Val Text))
+rdsdbsgipCDIRIP = lens _rDSDBSecurityGroupIngressPropertyCDIRIP (\s a -> s { _rDSDBSecurityGroupIngressPropertyCDIRIP = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-security-group-rule.html#cfn-rds-securitygroup-ec2securitygroupid
+rdsdbsgipEC2SecurityGroupId :: Lens' RDSDBSecurityGroupIngressProperty (Maybe (Val Text))
+rdsdbsgipEC2SecurityGroupId = lens _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupId (\s a -> s { _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-security-group-rule.html#cfn-rds-securitygroup-ec2securitygroupname
+rdsdbsgipEC2SecurityGroupName :: Lens' RDSDBSecurityGroupIngressProperty (Maybe (Val Text))
+rdsdbsgipEC2SecurityGroupName = lens _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupName (\s a -> s { _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-security-group-rule.html#cfn-rds-securitygroup-ec2securitygroupownerid
+rdsdbsgipEC2SecurityGroupOwnerId :: Lens' RDSDBSecurityGroupIngressProperty (Maybe (Val Text))
+rdsdbsgipEC2SecurityGroupOwnerId = lens _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupOwnerId (\s a -> s { _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupOwnerId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/RDSOptionGroupOptionConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/RDSOptionGroupOptionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/RDSOptionGroupOptionConfiguration.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-optiongroup-optionconfigurations.html
+
+module Stratosphere.ResourceProperties.RDSOptionGroupOptionConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.RDSOptionGroupOptionSetting
+
+-- | Full data type definition for RDSOptionGroupOptionConfiguration. See
+-- | 'rdsOptionGroupOptionConfiguration' for a more convenient constructor.
+data RDSOptionGroupOptionConfiguration =
+  RDSOptionGroupOptionConfiguration
+  { _rDSOptionGroupOptionConfigurationDBSecurityGroupMemberships :: Maybe [Val Text]
+  , _rDSOptionGroupOptionConfigurationOptionName :: Val Text
+  , _rDSOptionGroupOptionConfigurationOptionSettings :: Maybe RDSOptionGroupOptionSetting
+  , _rDSOptionGroupOptionConfigurationPort :: Maybe (Val Integer')
+  , _rDSOptionGroupOptionConfigurationVpcSecurityGroupMemberships :: Maybe [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON RDSOptionGroupOptionConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON RDSOptionGroupOptionConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'RDSOptionGroupOptionConfiguration' containing required
+-- | fields as arguments.
+rdsOptionGroupOptionConfiguration
+  :: Val Text -- ^ 'rdsogocOptionName'
+  -> RDSOptionGroupOptionConfiguration
+rdsOptionGroupOptionConfiguration optionNamearg =
+  RDSOptionGroupOptionConfiguration
+  { _rDSOptionGroupOptionConfigurationDBSecurityGroupMemberships = Nothing
+  , _rDSOptionGroupOptionConfigurationOptionName = optionNamearg
+  , _rDSOptionGroupOptionConfigurationOptionSettings = Nothing
+  , _rDSOptionGroupOptionConfigurationPort = Nothing
+  , _rDSOptionGroupOptionConfigurationVpcSecurityGroupMemberships = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-optiongroup-optionconfigurations.html#cfn-rds-optiongroup-optionconfigurations-dbsecuritygroupmemberships
+rdsogocDBSecurityGroupMemberships :: Lens' RDSOptionGroupOptionConfiguration (Maybe [Val Text])
+rdsogocDBSecurityGroupMemberships = lens _rDSOptionGroupOptionConfigurationDBSecurityGroupMemberships (\s a -> s { _rDSOptionGroupOptionConfigurationDBSecurityGroupMemberships = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-optiongroup-optionconfigurations.html#cfn-rds-optiongroup-optionconfigurations-optionname
+rdsogocOptionName :: Lens' RDSOptionGroupOptionConfiguration (Val Text)
+rdsogocOptionName = lens _rDSOptionGroupOptionConfigurationOptionName (\s a -> s { _rDSOptionGroupOptionConfigurationOptionName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-optiongroup-optionconfigurations.html#cfn-rds-optiongroup-optionconfigurations-optionsettings
+rdsogocOptionSettings :: Lens' RDSOptionGroupOptionConfiguration (Maybe RDSOptionGroupOptionSetting)
+rdsogocOptionSettings = lens _rDSOptionGroupOptionConfigurationOptionSettings (\s a -> s { _rDSOptionGroupOptionConfigurationOptionSettings = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-optiongroup-optionconfigurations.html#cfn-rds-optiongroup-optionconfigurations-port
+rdsogocPort :: Lens' RDSOptionGroupOptionConfiguration (Maybe (Val Integer'))
+rdsogocPort = lens _rDSOptionGroupOptionConfigurationPort (\s a -> s { _rDSOptionGroupOptionConfigurationPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-optiongroup-optionconfigurations.html#cfn-rds-optiongroup-optionconfigurations-vpcsecuritygroupmemberships
+rdsogocVpcSecurityGroupMemberships :: Lens' RDSOptionGroupOptionConfiguration (Maybe [Val Text])
+rdsogocVpcSecurityGroupMemberships = lens _rDSOptionGroupOptionConfigurationVpcSecurityGroupMemberships (\s a -> s { _rDSOptionGroupOptionConfigurationVpcSecurityGroupMemberships = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/RDSOptionGroupOptionSetting.hs b/library-gen/Stratosphere/ResourceProperties/RDSOptionGroupOptionSetting.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/RDSOptionGroupOptionSetting.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-optiongroup-optionconfigurations-optionsettings.html
+
+module Stratosphere.ResourceProperties.RDSOptionGroupOptionSetting where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for RDSOptionGroupOptionSetting. See
+-- | 'rdsOptionGroupOptionSetting' for a more convenient constructor.
+data RDSOptionGroupOptionSetting =
+  RDSOptionGroupOptionSetting
+  { _rDSOptionGroupOptionSettingName :: Maybe (Val Text)
+  , _rDSOptionGroupOptionSettingValue :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON RDSOptionGroupOptionSetting where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON RDSOptionGroupOptionSetting where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'RDSOptionGroupOptionSetting' containing required fields
+-- | as arguments.
+rdsOptionGroupOptionSetting
+  :: RDSOptionGroupOptionSetting
+rdsOptionGroupOptionSetting  =
+  RDSOptionGroupOptionSetting
+  { _rDSOptionGroupOptionSettingName = Nothing
+  , _rDSOptionGroupOptionSettingValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-optiongroup-optionconfigurations-optionsettings.html#cfn-rds-optiongroup-optionconfigurations-optionsettings-name
+rdsogosName :: Lens' RDSOptionGroupOptionSetting (Maybe (Val Text))
+rdsogosName = lens _rDSOptionGroupOptionSettingName (\s a -> s { _rDSOptionGroupOptionSettingName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-optiongroup-optionconfigurations-optionsettings.html#cfn-rds-optiongroup-optionconfigurations-optionsettings-value
+rdsogosValue :: Lens' RDSOptionGroupOptionSetting (Maybe (Val Text))
+rdsogosValue = lens _rDSOptionGroupOptionSettingValue (\s a -> s { _rDSOptionGroupOptionSettingValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/RDSSecurityGroupRule.hs b/library-gen/Stratosphere/ResourceProperties/RDSSecurityGroupRule.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/RDSSecurityGroupRule.hs
+++ /dev/null
@@ -1,71 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The Amazon RDS security group rule is an embedded property of the
--- AWS::RDS::DBSecurityGroup type.
-
-module Stratosphere.ResourceProperties.RDSSecurityGroupRule where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for RDSSecurityGroupRule. See
--- 'rdsSecurityGroupRule' for a more convenient constructor.
-data RDSSecurityGroupRule =
-  RDSSecurityGroupRule
-  { _rDSSecurityGroupRuleCIDRIP :: Maybe (Val Text)
-  , _rDSSecurityGroupRuleEC2SecurityGroupId :: Maybe (Val Text)
-  , _rDSSecurityGroupRuleEC2SecurityGroupName :: Maybe (Val Text)
-  , _rDSSecurityGroupRuleEC2SecurityGroupOwnerId :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON RDSSecurityGroupRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
-
-instance FromJSON RDSSecurityGroupRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
-
--- | Constructor for 'RDSSecurityGroupRule' containing required fields as
--- arguments.
-rdsSecurityGroupRule
-  :: RDSSecurityGroupRule
-rdsSecurityGroupRule  =
-  RDSSecurityGroupRule
-  { _rDSSecurityGroupRuleCIDRIP = Nothing
-  , _rDSSecurityGroupRuleEC2SecurityGroupId = Nothing
-  , _rDSSecurityGroupRuleEC2SecurityGroupName = Nothing
-  , _rDSSecurityGroupRuleEC2SecurityGroupOwnerId = Nothing
-  }
-
--- | The IP range to authorize. For an overview of CIDR ranges, go to the
--- Wikipedia Tutorial. Type: String
-rdssgrCIDRIP :: Lens' RDSSecurityGroupRule (Maybe (Val Text))
-rdssgrCIDRIP = lens _rDSSecurityGroupRuleCIDRIP (\s a -> s { _rDSSecurityGroupRuleCIDRIP = a })
-
--- | Id of the VPC or EC2 Security Group to authorize. For VPC DB Security
--- Groups, use EC2SecurityGroupId. For EC2 Security Groups, use
--- EC2SecurityGroupOwnerId and either EC2SecurityGroupName or
--- EC2SecurityGroupId. Type: String
-rdssgrEC2SecurityGroupId :: Lens' RDSSecurityGroupRule (Maybe (Val Text))
-rdssgrEC2SecurityGroupId = lens _rDSSecurityGroupRuleEC2SecurityGroupId (\s a -> s { _rDSSecurityGroupRuleEC2SecurityGroupId = a })
-
--- | Name of the EC2 Security Group to authorize. For VPC DB Security Groups,
--- use EC2SecurityGroupId. For EC2 Security Groups, use
--- EC2SecurityGroupOwnerId and either EC2SecurityGroupName or
--- EC2SecurityGroupId. Type: String
-rdssgrEC2SecurityGroupName :: Lens' RDSSecurityGroupRule (Maybe (Val Text))
-rdssgrEC2SecurityGroupName = lens _rDSSecurityGroupRuleEC2SecurityGroupName (\s a -> s { _rDSSecurityGroupRuleEC2SecurityGroupName = a })
-
--- | AWS Account Number of the owner of the EC2 Security Group specified in
--- the EC2SecurityGroupName parameter. The AWS Access Key ID is not an
--- acceptable value. For VPC DB Security Groups, use EC2SecurityGroupId. For
--- EC2 Security Groups, use EC2SecurityGroupOwnerId and either
--- EC2SecurityGroupName or EC2SecurityGroupId. Type: String
-rdssgrEC2SecurityGroupOwnerId :: Lens' RDSSecurityGroupRule (Maybe (Val Text))
-rdssgrEC2SecurityGroupOwnerId = lens _rDSSecurityGroupRuleEC2SecurityGroupOwnerId (\s a -> s { _rDSSecurityGroupRuleEC2SecurityGroupOwnerId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/RecordSetGeoLocation.hs b/library-gen/Stratosphere/ResourceProperties/RecordSetGeoLocation.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/RecordSetGeoLocation.hs
+++ /dev/null
@@ -1,66 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The GeoLocation property is part of the AWS::Route53::RecordSet resource
--- that describes how Amazon Route 53 responds to DNS queries based on the
--- geographic location of the query.
-
-module Stratosphere.ResourceProperties.RecordSetGeoLocation where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for RecordSetGeoLocation. See
--- 'recordSetGeoLocation' for a more convenient constructor.
-data RecordSetGeoLocation =
-  RecordSetGeoLocation
-  { _recordSetGeoLocationContinentCode :: Maybe (Val Text)
-  , _recordSetGeoLocationCountryCode :: Maybe (Val Text)
-  , _recordSetGeoLocationSubdivisionCode :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON RecordSetGeoLocation where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
-
-instance FromJSON RecordSetGeoLocation where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
-
--- | Constructor for 'RecordSetGeoLocation' containing required fields as
--- arguments.
-recordSetGeoLocation
-  :: RecordSetGeoLocation
-recordSetGeoLocation  =
-  RecordSetGeoLocation
-  { _recordSetGeoLocationContinentCode = Nothing
-  , _recordSetGeoLocationCountryCode = Nothing
-  , _recordSetGeoLocationSubdivisionCode = Nothing
-  }
-
--- | All DNS queries from the continent that you specified are routed to this
--- resource record set. If you specify this property, omit the CountryCode and
--- SubdivisionCode properties. For valid values, see the ContinentCode element
--- in the Amazon Route 53 API Reference. Type: String
-rsglContinentCode :: Lens' RecordSetGeoLocation (Maybe (Val Text))
-rsglContinentCode = lens _recordSetGeoLocationContinentCode (\s a -> s { _recordSetGeoLocationContinentCode = a })
-
--- | All DNS queries from the country that you specified are routed to this
--- resource record set. If you specify this property, omit the ContinentCode
--- property. For valid values, see the CountryCode element in the Amazon Route
--- 53 API Reference. Type: String
-rsglCountryCode :: Lens' RecordSetGeoLocation (Maybe (Val Text))
-rsglCountryCode = lens _recordSetGeoLocationCountryCode (\s a -> s { _recordSetGeoLocationCountryCode = a })
-
--- | If you specified US for the country code, you can specify a state in the
--- United States. All DNS queries from the state that you specified are routed
--- to this resource record set. If you specify this property, you must specify
--- US for the CountryCode and omit the ContinentCode property. For valid
--- values, see the SubdivisionCode element in the Amazon Route 53 API
--- Reference. Type: String
-rsglSubdivisionCode :: Lens' RecordSetGeoLocation (Maybe (Val Text))
-rsglSubdivisionCode = lens _recordSetGeoLocationSubdivisionCode (\s a -> s { _recordSetGeoLocationSubdivisionCode = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/RedshiftClusterParameterGroupParameter.hs b/library-gen/Stratosphere/ResourceProperties/RedshiftClusterParameterGroupParameter.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/RedshiftClusterParameterGroupParameter.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-property-redshift-clusterparametergroup-parameter.html
+
+module Stratosphere.ResourceProperties.RedshiftClusterParameterGroupParameter where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for RedshiftClusterParameterGroupParameter. See
+-- | 'redshiftClusterParameterGroupParameter' for a more convenient
+-- | constructor.
+data RedshiftClusterParameterGroupParameter =
+  RedshiftClusterParameterGroupParameter
+  { _redshiftClusterParameterGroupParameterParameterName :: Val Text
+  , _redshiftClusterParameterGroupParameterParameterValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON RedshiftClusterParameterGroupParameter where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+instance FromJSON RedshiftClusterParameterGroupParameter where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 39, omitNothingFields = True }
+
+-- | Constructor for 'RedshiftClusterParameterGroupParameter' containing
+-- | required fields as arguments.
+redshiftClusterParameterGroupParameter
+  :: Val Text -- ^ 'rcpgpParameterName'
+  -> Val Text -- ^ 'rcpgpParameterValue'
+  -> RedshiftClusterParameterGroupParameter
+redshiftClusterParameterGroupParameter parameterNamearg parameterValuearg =
+  RedshiftClusterParameterGroupParameter
+  { _redshiftClusterParameterGroupParameterParameterName = parameterNamearg
+  , _redshiftClusterParameterGroupParameterParameterValue = parameterValuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-property-redshift-clusterparametergroup-parameter.html#cfn-redshift-clusterparametergroup-parameter-parametername
+rcpgpParameterName :: Lens' RedshiftClusterParameterGroupParameter (Val Text)
+rcpgpParameterName = lens _redshiftClusterParameterGroupParameterParameterName (\s a -> s { _redshiftClusterParameterGroupParameterParameterName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-property-redshift-clusterparametergroup-parameter.html#cfn-redshift-clusterparametergroup-parameter-parametervalue
+rcpgpParameterValue :: Lens' RedshiftClusterParameterGroupParameter (Val Text)
+rcpgpParameterValue = lens _redshiftClusterParameterGroupParameterParameterValue (\s a -> s { _redshiftClusterParameterGroupParameterParameterValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ResourceTag.hs b/library-gen/Stratosphere/ResourceProperties/ResourceTag.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/ResourceTag.hs
+++ /dev/null
@@ -1,63 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | You can use the AWS CloudFormation Resource Tags property to apply tags
--- to resources, which can help you identify and categorize those resources.
--- You can tag only resources for which AWS CloudFormation supports tagging.
--- For information about which resources you can tag with AWS CloudFormation,
--- see the individual resources in AWS Resource Types Reference. In addition
--- to any tags you define, AWS CloudFormation automatically creates the
--- following stack-level tags with the prefix aws:: All stack-level tags,
--- including automatically created tags, are propagated to resources that AWS
--- CloudFormation supports. Currently, tags are not propagated to Amazon EBS
--- volumes that are created from block device mappings.
-
-module Stratosphere.ResourceProperties.ResourceTag where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for ResourceTag. See 'resourceTag' for a more
--- convenient constructor.
-data ResourceTag =
-  ResourceTag
-  { _resourceTagKey :: Val Text
-  , _resourceTagValue :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON ResourceTag where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
-
-instance FromJSON ResourceTag where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
-
--- | Constructor for 'ResourceTag' containing required fields as arguments.
-resourceTag
-  :: Val Text -- ^ 'rtKey'
-  -> Val Text -- ^ 'rtValue'
-  -> ResourceTag
-resourceTag keyarg valuearg =
-  ResourceTag
-  { _resourceTagKey = keyarg
-  , _resourceTagValue = valuearg
-  }
-
--- | The key name of the tag. You can specify a value that is 1 to 128 Unicode
--- characters in length and cannot be prefixed with aws:. You can use any of
--- the following characters: the set of Unicode letters, digits, whitespace,
--- _, ., /, =, +, and -.
-rtKey :: Lens' ResourceTag (Val Text)
-rtKey = lens _resourceTagKey (\s a -> s { _resourceTagKey = a })
-
--- | The value for the tag. You can specify a value that is 1 to 128 Unicode
--- characters in length and cannot be prefixed with aws:. You can use any of
--- the following characters: the set of Unicode letters, digits, whitespace,
--- _, ., /, =, +, and -.
-rtValue :: Lens' ResourceTag (Val Text)
-rtValue = lens _resourceTagValue (\s a -> s { _resourceTagValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53HealthCheckHealthCheckConfig.hs b/library-gen/Stratosphere/ResourceProperties/Route53HealthCheckHealthCheckConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/Route53HealthCheckHealthCheckConfig.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html
+
+module Stratosphere.ResourceProperties.Route53HealthCheckHealthCheckConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for Route53HealthCheckHealthCheckConfig. See
+-- | 'route53HealthCheckHealthCheckConfig' for a more convenient constructor.
+data Route53HealthCheckHealthCheckConfig =
+  Route53HealthCheckHealthCheckConfig
+  { _route53HealthCheckHealthCheckConfigFailureThreshold :: Maybe (Val Integer')
+  , _route53HealthCheckHealthCheckConfigFullyQualifiedDomainName :: Maybe (Val Text)
+  , _route53HealthCheckHealthCheckConfigIPAddress :: Maybe (Val Text)
+  , _route53HealthCheckHealthCheckConfigPort :: Maybe (Val Integer')
+  , _route53HealthCheckHealthCheckConfigRequestInterval :: Maybe (Val Integer')
+  , _route53HealthCheckHealthCheckConfigResourcePath :: Maybe (Val Text)
+  , _route53HealthCheckHealthCheckConfigSearchString :: Maybe (Val Text)
+  , _route53HealthCheckHealthCheckConfigType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON Route53HealthCheckHealthCheckConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+instance FromJSON Route53HealthCheckHealthCheckConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+-- | Constructor for 'Route53HealthCheckHealthCheckConfig' containing required
+-- | fields as arguments.
+route53HealthCheckHealthCheckConfig
+  :: Val Text -- ^ 'rhchccType'
+  -> Route53HealthCheckHealthCheckConfig
+route53HealthCheckHealthCheckConfig typearg =
+  Route53HealthCheckHealthCheckConfig
+  { _route53HealthCheckHealthCheckConfigFailureThreshold = Nothing
+  , _route53HealthCheckHealthCheckConfigFullyQualifiedDomainName = Nothing
+  , _route53HealthCheckHealthCheckConfigIPAddress = Nothing
+  , _route53HealthCheckHealthCheckConfigPort = Nothing
+  , _route53HealthCheckHealthCheckConfigRequestInterval = Nothing
+  , _route53HealthCheckHealthCheckConfigResourcePath = Nothing
+  , _route53HealthCheckHealthCheckConfigSearchString = Nothing
+  , _route53HealthCheckHealthCheckConfigType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-failurethreshold
+rhchccFailureThreshold :: Lens' Route53HealthCheckHealthCheckConfig (Maybe (Val Integer'))
+rhchccFailureThreshold = lens _route53HealthCheckHealthCheckConfigFailureThreshold (\s a -> s { _route53HealthCheckHealthCheckConfigFailureThreshold = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-fullyqualifieddomainname
+rhchccFullyQualifiedDomainName :: Lens' Route53HealthCheckHealthCheckConfig (Maybe (Val Text))
+rhchccFullyQualifiedDomainName = lens _route53HealthCheckHealthCheckConfigFullyQualifiedDomainName (\s a -> s { _route53HealthCheckHealthCheckConfigFullyQualifiedDomainName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-ipaddress
+rhchccIPAddress :: Lens' Route53HealthCheckHealthCheckConfig (Maybe (Val Text))
+rhchccIPAddress = lens _route53HealthCheckHealthCheckConfigIPAddress (\s a -> s { _route53HealthCheckHealthCheckConfigIPAddress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-port
+rhchccPort :: Lens' Route53HealthCheckHealthCheckConfig (Maybe (Val Integer'))
+rhchccPort = lens _route53HealthCheckHealthCheckConfigPort (\s a -> s { _route53HealthCheckHealthCheckConfigPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-requestinterval
+rhchccRequestInterval :: Lens' Route53HealthCheckHealthCheckConfig (Maybe (Val Integer'))
+rhchccRequestInterval = lens _route53HealthCheckHealthCheckConfigRequestInterval (\s a -> s { _route53HealthCheckHealthCheckConfigRequestInterval = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-resourcepath
+rhchccResourcePath :: Lens' Route53HealthCheckHealthCheckConfig (Maybe (Val Text))
+rhchccResourcePath = lens _route53HealthCheckHealthCheckConfigResourcePath (\s a -> s { _route53HealthCheckHealthCheckConfigResourcePath = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-searchstring
+rhchccSearchString :: Lens' Route53HealthCheckHealthCheckConfig (Maybe (Val Text))
+rhchccSearchString = lens _route53HealthCheckHealthCheckConfigSearchString (\s a -> s { _route53HealthCheckHealthCheckConfigSearchString = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-type
+rhchccType :: Lens' Route53HealthCheckHealthCheckConfig (Val Text)
+rhchccType = lens _route53HealthCheckHealthCheckConfigType (\s a -> s { _route53HealthCheckHealthCheckConfigType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53HealthCheckHealthCheckTag.hs b/library-gen/Stratosphere/ResourceProperties/Route53HealthCheckHealthCheckTag.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/Route53HealthCheckHealthCheckTag.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthchecktags.html
+
+module Stratosphere.ResourceProperties.Route53HealthCheckHealthCheckTag where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for Route53HealthCheckHealthCheckTag. See
+-- | 'route53HealthCheckHealthCheckTag' for a more convenient constructor.
+data Route53HealthCheckHealthCheckTag =
+  Route53HealthCheckHealthCheckTag
+  { _route53HealthCheckHealthCheckTagKey :: Val Text
+  , _route53HealthCheckHealthCheckTagValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON Route53HealthCheckHealthCheckTag where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+instance FromJSON Route53HealthCheckHealthCheckTag where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+-- | Constructor for 'Route53HealthCheckHealthCheckTag' containing required
+-- | fields as arguments.
+route53HealthCheckHealthCheckTag
+  :: Val Text -- ^ 'rhchctKey'
+  -> Val Text -- ^ 'rhchctValue'
+  -> Route53HealthCheckHealthCheckTag
+route53HealthCheckHealthCheckTag keyarg valuearg =
+  Route53HealthCheckHealthCheckTag
+  { _route53HealthCheckHealthCheckTagKey = keyarg
+  , _route53HealthCheckHealthCheckTagValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthchecktags.html#cfn-route53-healthchecktags-key
+rhchctKey :: Lens' Route53HealthCheckHealthCheckTag (Val Text)
+rhchctKey = lens _route53HealthCheckHealthCheckTagKey (\s a -> s { _route53HealthCheckHealthCheckTagKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthchecktags.html#cfn-route53-healthchecktags-value
+rhchctValue :: Lens' Route53HealthCheckHealthCheckTag (Val Text)
+rhchctValue = lens _route53HealthCheckHealthCheckTagValue (\s a -> s { _route53HealthCheckHealthCheckTagValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneHostedZoneConfig.hs b/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneHostedZoneConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneHostedZoneConfig.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-hostedzone-hostedzoneconfig.html
+
+module Stratosphere.ResourceProperties.Route53HostedZoneHostedZoneConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for Route53HostedZoneHostedZoneConfig. See
+-- | 'route53HostedZoneHostedZoneConfig' for a more convenient constructor.
+data Route53HostedZoneHostedZoneConfig =
+  Route53HostedZoneHostedZoneConfig
+  { _route53HostedZoneHostedZoneConfigComment :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON Route53HostedZoneHostedZoneConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON Route53HostedZoneHostedZoneConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'Route53HostedZoneHostedZoneConfig' containing required
+-- | fields as arguments.
+route53HostedZoneHostedZoneConfig
+  :: Route53HostedZoneHostedZoneConfig
+route53HostedZoneHostedZoneConfig  =
+  Route53HostedZoneHostedZoneConfig
+  { _route53HostedZoneHostedZoneConfigComment = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-hostedzone-hostedzoneconfig.html#cfn-route53-hostedzone-hostedzoneconfig-comment
+rhzhzcComment :: Lens' Route53HostedZoneHostedZoneConfig (Maybe (Val Text))
+rhzhzcComment = lens _route53HostedZoneHostedZoneConfigComment (\s a -> s { _route53HostedZoneHostedZoneConfigComment = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneHostedZoneTag.hs b/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneHostedZoneTag.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneHostedZoneTag.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-hostedzone-hostedzonetags.html
+
+module Stratosphere.ResourceProperties.Route53HostedZoneHostedZoneTag where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for Route53HostedZoneHostedZoneTag. See
+-- | 'route53HostedZoneHostedZoneTag' for a more convenient constructor.
+data Route53HostedZoneHostedZoneTag =
+  Route53HostedZoneHostedZoneTag
+  { _route53HostedZoneHostedZoneTagKey :: Val Text
+  , _route53HostedZoneHostedZoneTagValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON Route53HostedZoneHostedZoneTag where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+instance FromJSON Route53HostedZoneHostedZoneTag where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+-- | Constructor for 'Route53HostedZoneHostedZoneTag' containing required
+-- | fields as arguments.
+route53HostedZoneHostedZoneTag
+  :: Val Text -- ^ 'rhzhztKey'
+  -> Val Text -- ^ 'rhzhztValue'
+  -> Route53HostedZoneHostedZoneTag
+route53HostedZoneHostedZoneTag keyarg valuearg =
+  Route53HostedZoneHostedZoneTag
+  { _route53HostedZoneHostedZoneTagKey = keyarg
+  , _route53HostedZoneHostedZoneTagValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-hostedzone-hostedzonetags.html#cfn-route53-hostedzonetags-key
+rhzhztKey :: Lens' Route53HostedZoneHostedZoneTag (Val Text)
+rhzhztKey = lens _route53HostedZoneHostedZoneTagKey (\s a -> s { _route53HostedZoneHostedZoneTagKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-hostedzone-hostedzonetags.html#cfn-route53-hostedzonetags-value
+rhzhztValue :: Lens' Route53HostedZoneHostedZoneTag (Val Text)
+rhzhztValue = lens _route53HostedZoneHostedZoneTagValue (\s a -> s { _route53HostedZoneHostedZoneTagValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneVPC.hs b/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneVPC.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/Route53HostedZoneVPC.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-hostedzone-hostedzonevpcs.html
+
+module Stratosphere.ResourceProperties.Route53HostedZoneVPC where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for Route53HostedZoneVPC. See
+-- | 'route53HostedZoneVPC' for a more convenient constructor.
+data Route53HostedZoneVPC =
+  Route53HostedZoneVPC
+  { _route53HostedZoneVPCVPCId :: Val Text
+  , _route53HostedZoneVPCVPCRegion :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON Route53HostedZoneVPC where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+instance FromJSON Route53HostedZoneVPC where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+-- | Constructor for 'Route53HostedZoneVPC' containing required fields as
+-- | arguments.
+route53HostedZoneVPC
+  :: Val Text -- ^ 'rhzvpcVPCId'
+  -> Val Text -- ^ 'rhzvpcVPCRegion'
+  -> Route53HostedZoneVPC
+route53HostedZoneVPC vPCIdarg vPCRegionarg =
+  Route53HostedZoneVPC
+  { _route53HostedZoneVPCVPCId = vPCIdarg
+  , _route53HostedZoneVPCVPCRegion = vPCRegionarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-hostedzone-hostedzonevpcs.html#cfn-route53-hostedzone-hostedzonevpcs-vpcid
+rhzvpcVPCId :: Lens' Route53HostedZoneVPC (Val Text)
+rhzvpcVPCId = lens _route53HostedZoneVPCVPCId (\s a -> s { _route53HostedZoneVPCVPCId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-hostedzone-hostedzonevpcs.html#cfn-route53-hostedzone-hostedzonevpcs-vpcregion
+rhzvpcVPCRegion :: Lens' Route53HostedZoneVPC (Val Text)
+rhzvpcVPCRegion = lens _route53HostedZoneVPCVPCRegion (\s a -> s { _route53HostedZoneVPCVPCRegion = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53RecordSetAliasTarget.hs b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetAliasTarget.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetAliasTarget.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-aliastarget.html
+
+module Stratosphere.ResourceProperties.Route53RecordSetAliasTarget where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for Route53RecordSetAliasTarget. See
+-- | 'route53RecordSetAliasTarget' for a more convenient constructor.
+data Route53RecordSetAliasTarget =
+  Route53RecordSetAliasTarget
+  { _route53RecordSetAliasTargetDNSName :: Val Text
+  , _route53RecordSetAliasTargetEvaluateTargetHealth :: Maybe (Val Bool')
+  , _route53RecordSetAliasTargetHostedZoneId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON Route53RecordSetAliasTarget where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON Route53RecordSetAliasTarget where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'Route53RecordSetAliasTarget' containing required fields
+-- | as arguments.
+route53RecordSetAliasTarget
+  :: Val Text -- ^ 'rrsatDNSName'
+  -> Val Text -- ^ 'rrsatHostedZoneId'
+  -> Route53RecordSetAliasTarget
+route53RecordSetAliasTarget dNSNamearg hostedZoneIdarg =
+  Route53RecordSetAliasTarget
+  { _route53RecordSetAliasTargetDNSName = dNSNamearg
+  , _route53RecordSetAliasTargetEvaluateTargetHealth = Nothing
+  , _route53RecordSetAliasTargetHostedZoneId = hostedZoneIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-aliastarget.html#cfn-route53-aliastarget-dnshostname
+rrsatDNSName :: Lens' Route53RecordSetAliasTarget (Val Text)
+rrsatDNSName = lens _route53RecordSetAliasTargetDNSName (\s a -> s { _route53RecordSetAliasTargetDNSName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-aliastarget.html#cfn-route53-aliastarget-evaluatetargethealth
+rrsatEvaluateTargetHealth :: Lens' Route53RecordSetAliasTarget (Maybe (Val Bool'))
+rrsatEvaluateTargetHealth = lens _route53RecordSetAliasTargetEvaluateTargetHealth (\s a -> s { _route53RecordSetAliasTargetEvaluateTargetHealth = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-aliastarget.html#cfn-route53-aliastarget-hostedzoneid
+rrsatHostedZoneId :: Lens' Route53RecordSetAliasTarget (Val Text)
+rrsatHostedZoneId = lens _route53RecordSetAliasTargetHostedZoneId (\s a -> s { _route53RecordSetAliasTargetHostedZoneId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGeoLocation.hs b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGeoLocation.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGeoLocation.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geolocation.html
+
+module Stratosphere.ResourceProperties.Route53RecordSetGeoLocation where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for Route53RecordSetGeoLocation. See
+-- | 'route53RecordSetGeoLocation' for a more convenient constructor.
+data Route53RecordSetGeoLocation =
+  Route53RecordSetGeoLocation
+  { _route53RecordSetGeoLocationContinentCode :: Maybe (Val Text)
+  , _route53RecordSetGeoLocationCountryCode :: Maybe (Val Text)
+  , _route53RecordSetGeoLocationSubdivisionCode :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON Route53RecordSetGeoLocation where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON Route53RecordSetGeoLocation where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'Route53RecordSetGeoLocation' containing required fields
+-- | as arguments.
+route53RecordSetGeoLocation
+  :: Route53RecordSetGeoLocation
+route53RecordSetGeoLocation  =
+  Route53RecordSetGeoLocation
+  { _route53RecordSetGeoLocationContinentCode = Nothing
+  , _route53RecordSetGeoLocationCountryCode = Nothing
+  , _route53RecordSetGeoLocationSubdivisionCode = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geolocation.html#cfn-route53-recordset-geolocation-continentcode
+rrsglContinentCode :: Lens' Route53RecordSetGeoLocation (Maybe (Val Text))
+rrsglContinentCode = lens _route53RecordSetGeoLocationContinentCode (\s a -> s { _route53RecordSetGeoLocationContinentCode = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geolocation.html#cfn-route53-recordset-geolocation-countrycode
+rrsglCountryCode :: Lens' Route53RecordSetGeoLocation (Maybe (Val Text))
+rrsglCountryCode = lens _route53RecordSetGeoLocationCountryCode (\s a -> s { _route53RecordSetGeoLocationCountryCode = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geolocation.html#cfn-route53-recordset-geolocation-subdivisioncode
+rrsglSubdivisionCode :: Lens' Route53RecordSetGeoLocation (Maybe (Val Text))
+rrsglSubdivisionCode = lens _route53RecordSetGeoLocationSubdivisionCode (\s a -> s { _route53RecordSetGeoLocationSubdivisionCode = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupAliasTarget.hs b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupAliasTarget.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupAliasTarget.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-aliastarget.html
+
+module Stratosphere.ResourceProperties.Route53RecordSetGroupAliasTarget where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for Route53RecordSetGroupAliasTarget. See
+-- | 'route53RecordSetGroupAliasTarget' for a more convenient constructor.
+data Route53RecordSetGroupAliasTarget =
+  Route53RecordSetGroupAliasTarget
+  { _route53RecordSetGroupAliasTargetDNSName :: Val Text
+  , _route53RecordSetGroupAliasTargetEvaluateTargetHealth :: Maybe (Val Bool')
+  , _route53RecordSetGroupAliasTargetHostedZoneId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON Route53RecordSetGroupAliasTarget where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+instance FromJSON Route53RecordSetGroupAliasTarget where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+-- | Constructor for 'Route53RecordSetGroupAliasTarget' containing required
+-- | fields as arguments.
+route53RecordSetGroupAliasTarget
+  :: Val Text -- ^ 'rrsgatDNSName'
+  -> Val Text -- ^ 'rrsgatHostedZoneId'
+  -> Route53RecordSetGroupAliasTarget
+route53RecordSetGroupAliasTarget dNSNamearg hostedZoneIdarg =
+  Route53RecordSetGroupAliasTarget
+  { _route53RecordSetGroupAliasTargetDNSName = dNSNamearg
+  , _route53RecordSetGroupAliasTargetEvaluateTargetHealth = Nothing
+  , _route53RecordSetGroupAliasTargetHostedZoneId = hostedZoneIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-aliastarget.html#cfn-route53-aliastarget-dnshostname
+rrsgatDNSName :: Lens' Route53RecordSetGroupAliasTarget (Val Text)
+rrsgatDNSName = lens _route53RecordSetGroupAliasTargetDNSName (\s a -> s { _route53RecordSetGroupAliasTargetDNSName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-aliastarget.html#cfn-route53-aliastarget-evaluatetargethealth
+rrsgatEvaluateTargetHealth :: Lens' Route53RecordSetGroupAliasTarget (Maybe (Val Bool'))
+rrsgatEvaluateTargetHealth = lens _route53RecordSetGroupAliasTargetEvaluateTargetHealth (\s a -> s { _route53RecordSetGroupAliasTargetEvaluateTargetHealth = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-aliastarget.html#cfn-route53-aliastarget-hostedzoneid
+rrsgatHostedZoneId :: Lens' Route53RecordSetGroupAliasTarget (Val Text)
+rrsgatHostedZoneId = lens _route53RecordSetGroupAliasTargetHostedZoneId (\s a -> s { _route53RecordSetGroupAliasTargetHostedZoneId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupGeoLocation.hs b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupGeoLocation.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupGeoLocation.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geolocation.html
+
+module Stratosphere.ResourceProperties.Route53RecordSetGroupGeoLocation where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for Route53RecordSetGroupGeoLocation. See
+-- | 'route53RecordSetGroupGeoLocation' for a more convenient constructor.
+data Route53RecordSetGroupGeoLocation =
+  Route53RecordSetGroupGeoLocation
+  { _route53RecordSetGroupGeoLocationContinentCode :: Maybe (Val Text)
+  , _route53RecordSetGroupGeoLocationCountryCode :: Maybe (Val Text)
+  , _route53RecordSetGroupGeoLocationSubdivisionCode :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON Route53RecordSetGroupGeoLocation where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+instance FromJSON Route53RecordSetGroupGeoLocation where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+-- | Constructor for 'Route53RecordSetGroupGeoLocation' containing required
+-- | fields as arguments.
+route53RecordSetGroupGeoLocation
+  :: Route53RecordSetGroupGeoLocation
+route53RecordSetGroupGeoLocation  =
+  Route53RecordSetGroupGeoLocation
+  { _route53RecordSetGroupGeoLocationContinentCode = Nothing
+  , _route53RecordSetGroupGeoLocationCountryCode = Nothing
+  , _route53RecordSetGroupGeoLocationSubdivisionCode = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geolocation.html#cfn-route53-recordsetgroup-geolocation-continentcode
+rrsgglContinentCode :: Lens' Route53RecordSetGroupGeoLocation (Maybe (Val Text))
+rrsgglContinentCode = lens _route53RecordSetGroupGeoLocationContinentCode (\s a -> s { _route53RecordSetGroupGeoLocationContinentCode = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geolocation.html#cfn-route53-recordset-geolocation-countrycode
+rrsgglCountryCode :: Lens' Route53RecordSetGroupGeoLocation (Maybe (Val Text))
+rrsgglCountryCode = lens _route53RecordSetGroupGeoLocationCountryCode (\s a -> s { _route53RecordSetGroupGeoLocationCountryCode = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geolocation.html#cfn-route53-recordset-geolocation-subdivisioncode
+rrsgglSubdivisionCode :: Lens' Route53RecordSetGroupGeoLocation (Maybe (Val Text))
+rrsgglSubdivisionCode = lens _route53RecordSetGroupGeoLocationSubdivisionCode (\s a -> s { _route53RecordSetGroupGeoLocationSubdivisionCode = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupRecordSet.hs b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupRecordSet.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/Route53RecordSetGroupRecordSet.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html
+
+module Stratosphere.ResourceProperties.Route53RecordSetGroupRecordSet where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Route53RecordSetGroupAliasTarget
+import Stratosphere.ResourceProperties.Route53RecordSetGroupGeoLocation
+
+-- | Full data type definition for Route53RecordSetGroupRecordSet. See
+-- | 'route53RecordSetGroupRecordSet' for a more convenient constructor.
+data Route53RecordSetGroupRecordSet =
+  Route53RecordSetGroupRecordSet
+  { _route53RecordSetGroupRecordSetAliasTarget :: Maybe Route53RecordSetGroupAliasTarget
+  , _route53RecordSetGroupRecordSetComment :: Maybe (Val Text)
+  , _route53RecordSetGroupRecordSetFailover :: Maybe (Val Text)
+  , _route53RecordSetGroupRecordSetGeoLocation :: Maybe Route53RecordSetGroupGeoLocation
+  , _route53RecordSetGroupRecordSetHealthCheckId :: Maybe (Val Text)
+  , _route53RecordSetGroupRecordSetHostedZoneId :: Maybe (Val Text)
+  , _route53RecordSetGroupRecordSetHostedZoneName :: Maybe (Val Text)
+  , _route53RecordSetGroupRecordSetName :: Val Text
+  , _route53RecordSetGroupRecordSetRegion :: Maybe (Val Text)
+  , _route53RecordSetGroupRecordSetResourceRecords :: Maybe [Val Text]
+  , _route53RecordSetGroupRecordSetSetIdentifier :: Maybe (Val Text)
+  , _route53RecordSetGroupRecordSetTTL :: Maybe (Val Text)
+  , _route53RecordSetGroupRecordSetType :: Val Text
+  , _route53RecordSetGroupRecordSetWeight :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON Route53RecordSetGroupRecordSet where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+instance FromJSON Route53RecordSetGroupRecordSet where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+-- | Constructor for 'Route53RecordSetGroupRecordSet' containing required
+-- | fields as arguments.
+route53RecordSetGroupRecordSet
+  :: Val Text -- ^ 'rrsgrsName'
+  -> Val Text -- ^ 'rrsgrsType'
+  -> Route53RecordSetGroupRecordSet
+route53RecordSetGroupRecordSet namearg typearg =
+  Route53RecordSetGroupRecordSet
+  { _route53RecordSetGroupRecordSetAliasTarget = Nothing
+  , _route53RecordSetGroupRecordSetComment = Nothing
+  , _route53RecordSetGroupRecordSetFailover = Nothing
+  , _route53RecordSetGroupRecordSetGeoLocation = Nothing
+  , _route53RecordSetGroupRecordSetHealthCheckId = Nothing
+  , _route53RecordSetGroupRecordSetHostedZoneId = Nothing
+  , _route53RecordSetGroupRecordSetHostedZoneName = Nothing
+  , _route53RecordSetGroupRecordSetName = namearg
+  , _route53RecordSetGroupRecordSetRegion = Nothing
+  , _route53RecordSetGroupRecordSetResourceRecords = Nothing
+  , _route53RecordSetGroupRecordSetSetIdentifier = Nothing
+  , _route53RecordSetGroupRecordSetTTL = Nothing
+  , _route53RecordSetGroupRecordSetType = typearg
+  , _route53RecordSetGroupRecordSetWeight = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-aliastarget
+rrsgrsAliasTarget :: Lens' Route53RecordSetGroupRecordSet (Maybe Route53RecordSetGroupAliasTarget)
+rrsgrsAliasTarget = lens _route53RecordSetGroupRecordSetAliasTarget (\s a -> s { _route53RecordSetGroupRecordSetAliasTarget = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-comment
+rrsgrsComment :: Lens' Route53RecordSetGroupRecordSet (Maybe (Val Text))
+rrsgrsComment = lens _route53RecordSetGroupRecordSetComment (\s a -> s { _route53RecordSetGroupRecordSetComment = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-failover
+rrsgrsFailover :: Lens' Route53RecordSetGroupRecordSet (Maybe (Val Text))
+rrsgrsFailover = lens _route53RecordSetGroupRecordSetFailover (\s a -> s { _route53RecordSetGroupRecordSetFailover = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-geolocation
+rrsgrsGeoLocation :: Lens' Route53RecordSetGroupRecordSet (Maybe Route53RecordSetGroupGeoLocation)
+rrsgrsGeoLocation = lens _route53RecordSetGroupRecordSetGeoLocation (\s a -> s { _route53RecordSetGroupRecordSetGeoLocation = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-healthcheckid
+rrsgrsHealthCheckId :: Lens' Route53RecordSetGroupRecordSet (Maybe (Val Text))
+rrsgrsHealthCheckId = lens _route53RecordSetGroupRecordSetHealthCheckId (\s a -> s { _route53RecordSetGroupRecordSetHealthCheckId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-hostedzoneid
+rrsgrsHostedZoneId :: Lens' Route53RecordSetGroupRecordSet (Maybe (Val Text))
+rrsgrsHostedZoneId = lens _route53RecordSetGroupRecordSetHostedZoneId (\s a -> s { _route53RecordSetGroupRecordSetHostedZoneId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-hostedzonename
+rrsgrsHostedZoneName :: Lens' Route53RecordSetGroupRecordSet (Maybe (Val Text))
+rrsgrsHostedZoneName = lens _route53RecordSetGroupRecordSetHostedZoneName (\s a -> s { _route53RecordSetGroupRecordSetHostedZoneName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-name
+rrsgrsName :: Lens' Route53RecordSetGroupRecordSet (Val Text)
+rrsgrsName = lens _route53RecordSetGroupRecordSetName (\s a -> s { _route53RecordSetGroupRecordSetName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-region
+rrsgrsRegion :: Lens' Route53RecordSetGroupRecordSet (Maybe (Val Text))
+rrsgrsRegion = lens _route53RecordSetGroupRecordSetRegion (\s a -> s { _route53RecordSetGroupRecordSetRegion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-resourcerecords
+rrsgrsResourceRecords :: Lens' Route53RecordSetGroupRecordSet (Maybe [Val Text])
+rrsgrsResourceRecords = lens _route53RecordSetGroupRecordSetResourceRecords (\s a -> s { _route53RecordSetGroupRecordSetResourceRecords = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-setidentifier
+rrsgrsSetIdentifier :: Lens' Route53RecordSetGroupRecordSet (Maybe (Val Text))
+rrsgrsSetIdentifier = lens _route53RecordSetGroupRecordSetSetIdentifier (\s a -> s { _route53RecordSetGroupRecordSetSetIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-ttl
+rrsgrsTTL :: Lens' Route53RecordSetGroupRecordSet (Maybe (Val Text))
+rrsgrsTTL = lens _route53RecordSetGroupRecordSetTTL (\s a -> s { _route53RecordSetGroupRecordSetTTL = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-type
+rrsgrsType :: Lens' Route53RecordSetGroupRecordSet (Val Text)
+rrsgrsType = lens _route53RecordSetGroupRecordSetType (\s a -> s { _route53RecordSetGroupRecordSetType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-weight
+rrsgrsWeight :: Lens' Route53RecordSetGroupRecordSet (Maybe (Val Integer'))
+rrsgrsWeight = lens _route53RecordSetGroupRecordSetWeight (\s a -> s { _route53RecordSetGroupRecordSetWeight = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketCorsConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketCorsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketCorsConfiguration.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors.html
+
+module Stratosphere.ResourceProperties.S3BucketCorsConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.S3BucketCorsRule
+
+-- | Full data type definition for S3BucketCorsConfiguration. See
+-- | 's3BucketCorsConfiguration' for a more convenient constructor.
+data S3BucketCorsConfiguration =
+  S3BucketCorsConfiguration
+  { _s3BucketCorsConfigurationCorsRules :: [S3BucketCorsRule]
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketCorsConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+instance FromJSON S3BucketCorsConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketCorsConfiguration' containing required fields as
+-- | arguments.
+s3BucketCorsConfiguration
+  :: [S3BucketCorsRule] -- ^ 'sbccCorsRules'
+  -> S3BucketCorsConfiguration
+s3BucketCorsConfiguration corsRulesarg =
+  S3BucketCorsConfiguration
+  { _s3BucketCorsConfigurationCorsRules = corsRulesarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors.html#cfn-s3-bucket-cors-corsrule
+sbccCorsRules :: Lens' S3BucketCorsConfiguration [S3BucketCorsRule]
+sbccCorsRules = lens _s3BucketCorsConfigurationCorsRules (\s a -> s { _s3BucketCorsConfigurationCorsRules = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketCorsRule.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketCorsRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketCorsRule.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html
+
+module Stratosphere.ResourceProperties.S3BucketCorsRule where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for S3BucketCorsRule. See 's3BucketCorsRule'
+-- | for a more convenient constructor.
+data S3BucketCorsRule =
+  S3BucketCorsRule
+  { _s3BucketCorsRuleAllowedHeaders :: Maybe [Val Text]
+  , _s3BucketCorsRuleAllowedMethods :: [Val Text]
+  , _s3BucketCorsRuleAllowedOrigins :: [Val Text]
+  , _s3BucketCorsRuleExposedHeaders :: Maybe [Val Text]
+  , _s3BucketCorsRuleId :: Maybe (Val Text)
+  , _s3BucketCorsRuleMaxAge :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketCorsRule where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+instance FromJSON S3BucketCorsRule where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketCorsRule' containing required fields as
+-- | arguments.
+s3BucketCorsRule
+  :: [Val Text] -- ^ 'sbcrAllowedMethods'
+  -> [Val Text] -- ^ 'sbcrAllowedOrigins'
+  -> S3BucketCorsRule
+s3BucketCorsRule allowedMethodsarg allowedOriginsarg =
+  S3BucketCorsRule
+  { _s3BucketCorsRuleAllowedHeaders = Nothing
+  , _s3BucketCorsRuleAllowedMethods = allowedMethodsarg
+  , _s3BucketCorsRuleAllowedOrigins = allowedOriginsarg
+  , _s3BucketCorsRuleExposedHeaders = Nothing
+  , _s3BucketCorsRuleId = Nothing
+  , _s3BucketCorsRuleMaxAge = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html#cfn-s3-bucket-cors-corsrule-allowedheaders
+sbcrAllowedHeaders :: Lens' S3BucketCorsRule (Maybe [Val Text])
+sbcrAllowedHeaders = lens _s3BucketCorsRuleAllowedHeaders (\s a -> s { _s3BucketCorsRuleAllowedHeaders = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html#cfn-s3-bucket-cors-corsrule-allowedmethods
+sbcrAllowedMethods :: Lens' S3BucketCorsRule [Val Text]
+sbcrAllowedMethods = lens _s3BucketCorsRuleAllowedMethods (\s a -> s { _s3BucketCorsRuleAllowedMethods = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html#cfn-s3-bucket-cors-corsrule-allowedorigins
+sbcrAllowedOrigins :: Lens' S3BucketCorsRule [Val Text]
+sbcrAllowedOrigins = lens _s3BucketCorsRuleAllowedOrigins (\s a -> s { _s3BucketCorsRuleAllowedOrigins = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html#cfn-s3-bucket-cors-corsrule-exposedheaders
+sbcrExposedHeaders :: Lens' S3BucketCorsRule (Maybe [Val Text])
+sbcrExposedHeaders = lens _s3BucketCorsRuleExposedHeaders (\s a -> s { _s3BucketCorsRuleExposedHeaders = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html#cfn-s3-bucket-cors-corsrule-id
+sbcrId :: Lens' S3BucketCorsRule (Maybe (Val Text))
+sbcrId = lens _s3BucketCorsRuleId (\s a -> s { _s3BucketCorsRuleId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html#cfn-s3-bucket-cors-corsrule-maxage
+sbcrMaxAge :: Lens' S3BucketCorsRule (Maybe (Val Integer'))
+sbcrMaxAge = lens _s3BucketCorsRuleMaxAge (\s a -> s { _s3BucketCorsRuleMaxAge = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketFilterRule.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketFilterRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketFilterRule.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key-rules.html
+
+module Stratosphere.ResourceProperties.S3BucketFilterRule where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for S3BucketFilterRule. See
+-- | 's3BucketFilterRule' for a more convenient constructor.
+data S3BucketFilterRule =
+  S3BucketFilterRule
+  { _s3BucketFilterRuleName :: Val Text
+  , _s3BucketFilterRuleValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketFilterRule where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+instance FromJSON S3BucketFilterRule where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketFilterRule' containing required fields as
+-- | arguments.
+s3BucketFilterRule
+  :: Val Text -- ^ 'sbfrName'
+  -> Val Text -- ^ 'sbfrValue'
+  -> S3BucketFilterRule
+s3BucketFilterRule namearg valuearg =
+  S3BucketFilterRule
+  { _s3BucketFilterRuleName = namearg
+  , _s3BucketFilterRuleValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key-rules.html#cfn-s3-bucket-notificationconfiguraiton-config-filter-s3key-rules-name
+sbfrName :: Lens' S3BucketFilterRule (Val Text)
+sbfrName = lens _s3BucketFilterRuleName (\s a -> s { _s3BucketFilterRuleName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key-rules.html#cfn-s3-bucket-notificationconfiguraiton-config-filter-s3key-rules-value
+sbfrValue :: Lens' S3BucketFilterRule (Val Text)
+sbfrValue = lens _s3BucketFilterRuleValue (\s a -> s { _s3BucketFilterRuleValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketLambdaConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketLambdaConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketLambdaConfiguration.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-lambdaconfig.html
+
+module Stratosphere.ResourceProperties.S3BucketLambdaConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.S3BucketNotificationFilter
+
+-- | Full data type definition for S3BucketLambdaConfiguration. See
+-- | 's3BucketLambdaConfiguration' for a more convenient constructor.
+data S3BucketLambdaConfiguration =
+  S3BucketLambdaConfiguration
+  { _s3BucketLambdaConfigurationEvent :: Val Text
+  , _s3BucketLambdaConfigurationFilter :: Maybe S3BucketNotificationFilter
+  , _s3BucketLambdaConfigurationFunction :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketLambdaConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON S3BucketLambdaConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketLambdaConfiguration' containing required fields
+-- | as arguments.
+s3BucketLambdaConfiguration
+  :: Val Text -- ^ 'sblcEvent'
+  -> Val Text -- ^ 'sblcFunction'
+  -> S3BucketLambdaConfiguration
+s3BucketLambdaConfiguration eventarg functionarg =
+  S3BucketLambdaConfiguration
+  { _s3BucketLambdaConfigurationEvent = eventarg
+  , _s3BucketLambdaConfigurationFilter = Nothing
+  , _s3BucketLambdaConfigurationFunction = functionarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-lambdaconfig.html#cfn-s3-bucket-notificationconfig-lambdaconfig-event
+sblcEvent :: Lens' S3BucketLambdaConfiguration (Val Text)
+sblcEvent = lens _s3BucketLambdaConfigurationEvent (\s a -> s { _s3BucketLambdaConfigurationEvent = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-lambdaconfig.html#cfn-s3-bucket-notificationconfig-lambdaconfig-filter
+sblcFilter :: Lens' S3BucketLambdaConfiguration (Maybe S3BucketNotificationFilter)
+sblcFilter = lens _s3BucketLambdaConfigurationFilter (\s a -> s { _s3BucketLambdaConfigurationFilter = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-lambdaconfig.html#cfn-s3-bucket-notificationconfig-lambdaconfig-function
+sblcFunction :: Lens' S3BucketLambdaConfiguration (Val Text)
+sblcFunction = lens _s3BucketLambdaConfigurationFunction (\s a -> s { _s3BucketLambdaConfigurationFunction = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketLifecycleConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketLifecycleConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketLifecycleConfiguration.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig.html
+
+module Stratosphere.ResourceProperties.S3BucketLifecycleConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.S3BucketRule
+
+-- | Full data type definition for S3BucketLifecycleConfiguration. See
+-- | 's3BucketLifecycleConfiguration' for a more convenient constructor.
+data S3BucketLifecycleConfiguration =
+  S3BucketLifecycleConfiguration
+  { _s3BucketLifecycleConfigurationRules :: [S3BucketRule]
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketLifecycleConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+instance FromJSON S3BucketLifecycleConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketLifecycleConfiguration' containing required
+-- | fields as arguments.
+s3BucketLifecycleConfiguration
+  :: [S3BucketRule] -- ^ 'sblcRules'
+  -> S3BucketLifecycleConfiguration
+s3BucketLifecycleConfiguration rulesarg =
+  S3BucketLifecycleConfiguration
+  { _s3BucketLifecycleConfigurationRules = rulesarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig.html#cfn-s3-bucket-lifecycleconfig-rules
+sblcRules :: Lens' S3BucketLifecycleConfiguration [S3BucketRule]
+sblcRules = lens _s3BucketLifecycleConfigurationRules (\s a -> s { _s3BucketLifecycleConfigurationRules = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketLoggingConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketLoggingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketLoggingConfiguration.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-loggingconfig.html
+
+module Stratosphere.ResourceProperties.S3BucketLoggingConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for S3BucketLoggingConfiguration. See
+-- | 's3BucketLoggingConfiguration' for a more convenient constructor.
+data S3BucketLoggingConfiguration =
+  S3BucketLoggingConfiguration
+  { _s3BucketLoggingConfigurationDestinationBucketName :: Maybe (Val Text)
+  , _s3BucketLoggingConfigurationLogFilePrefix :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketLoggingConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+instance FromJSON S3BucketLoggingConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketLoggingConfiguration' containing required fields
+-- | as arguments.
+s3BucketLoggingConfiguration
+  :: S3BucketLoggingConfiguration
+s3BucketLoggingConfiguration  =
+  S3BucketLoggingConfiguration
+  { _s3BucketLoggingConfigurationDestinationBucketName = Nothing
+  , _s3BucketLoggingConfigurationLogFilePrefix = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-loggingconfig.html#cfn-s3-bucket-loggingconfig-destinationbucketname
+sblcDestinationBucketName :: Lens' S3BucketLoggingConfiguration (Maybe (Val Text))
+sblcDestinationBucketName = lens _s3BucketLoggingConfigurationDestinationBucketName (\s a -> s { _s3BucketLoggingConfigurationDestinationBucketName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-loggingconfig.html#cfn-s3-bucket-loggingconfig-logfileprefix
+sblcLogFilePrefix :: Lens' S3BucketLoggingConfiguration (Maybe (Val Text))
+sblcLogFilePrefix = lens _s3BucketLoggingConfigurationLogFilePrefix (\s a -> s { _s3BucketLoggingConfigurationLogFilePrefix = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketNoncurrentVersionTransition.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketNoncurrentVersionTransition.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketNoncurrentVersionTransition.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-noncurrentversiontransition.html
+
+module Stratosphere.ResourceProperties.S3BucketNoncurrentVersionTransition where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for S3BucketNoncurrentVersionTransition. See
+-- | 's3BucketNoncurrentVersionTransition' for a more convenient constructor.
+data S3BucketNoncurrentVersionTransition =
+  S3BucketNoncurrentVersionTransition
+  { _s3BucketNoncurrentVersionTransitionStorageClass :: Val Text
+  , _s3BucketNoncurrentVersionTransitionTransitionInDays :: Val Integer'
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketNoncurrentVersionTransition where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+instance FromJSON S3BucketNoncurrentVersionTransition where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketNoncurrentVersionTransition' containing required
+-- | fields as arguments.
+s3BucketNoncurrentVersionTransition
+  :: Val Text -- ^ 'sbnvtStorageClass'
+  -> Val Integer' -- ^ 'sbnvtTransitionInDays'
+  -> S3BucketNoncurrentVersionTransition
+s3BucketNoncurrentVersionTransition storageClassarg transitionInDaysarg =
+  S3BucketNoncurrentVersionTransition
+  { _s3BucketNoncurrentVersionTransitionStorageClass = storageClassarg
+  , _s3BucketNoncurrentVersionTransitionTransitionInDays = transitionInDaysarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-noncurrentversiontransition.html#cfn-s3-bucket-lifecycleconfig-rule-noncurrentversiontransition-storageclass
+sbnvtStorageClass :: Lens' S3BucketNoncurrentVersionTransition (Val Text)
+sbnvtStorageClass = lens _s3BucketNoncurrentVersionTransitionStorageClass (\s a -> s { _s3BucketNoncurrentVersionTransitionStorageClass = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-noncurrentversiontransition.html#cfn-s3-bucket-lifecycleconfig-rule-noncurrentversiontransition-transitionindays
+sbnvtTransitionInDays :: Lens' S3BucketNoncurrentVersionTransition (Val Integer')
+sbnvtTransitionInDays = lens _s3BucketNoncurrentVersionTransitionTransitionInDays (\s a -> s { _s3BucketNoncurrentVersionTransitionTransitionInDays = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketNotificationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketNotificationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketNotificationConfiguration.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html
+
+module Stratosphere.ResourceProperties.S3BucketNotificationConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.S3BucketLambdaConfiguration
+import Stratosphere.ResourceProperties.S3BucketQueueConfiguration
+import Stratosphere.ResourceProperties.S3BucketTopicConfiguration
+
+-- | Full data type definition for S3BucketNotificationConfiguration. See
+-- | 's3BucketNotificationConfiguration' for a more convenient constructor.
+data S3BucketNotificationConfiguration =
+  S3BucketNotificationConfiguration
+  { _s3BucketNotificationConfigurationLambdaConfigurations :: Maybe [S3BucketLambdaConfiguration]
+  , _s3BucketNotificationConfigurationQueueConfigurations :: Maybe [S3BucketQueueConfiguration]
+  , _s3BucketNotificationConfigurationTopicConfigurations :: Maybe [S3BucketTopicConfiguration]
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketNotificationConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON S3BucketNotificationConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketNotificationConfiguration' containing required
+-- | fields as arguments.
+s3BucketNotificationConfiguration
+  :: S3BucketNotificationConfiguration
+s3BucketNotificationConfiguration  =
+  S3BucketNotificationConfiguration
+  { _s3BucketNotificationConfigurationLambdaConfigurations = Nothing
+  , _s3BucketNotificationConfigurationQueueConfigurations = Nothing
+  , _s3BucketNotificationConfigurationTopicConfigurations = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html#cfn-s3-bucket-notificationconfig-lambdaconfig
+sbncLambdaConfigurations :: Lens' S3BucketNotificationConfiguration (Maybe [S3BucketLambdaConfiguration])
+sbncLambdaConfigurations = lens _s3BucketNotificationConfigurationLambdaConfigurations (\s a -> s { _s3BucketNotificationConfigurationLambdaConfigurations = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html#cfn-s3-bucket-notificationconfig-queueconfig
+sbncQueueConfigurations :: Lens' S3BucketNotificationConfiguration (Maybe [S3BucketQueueConfiguration])
+sbncQueueConfigurations = lens _s3BucketNotificationConfigurationQueueConfigurations (\s a -> s { _s3BucketNotificationConfigurationQueueConfigurations = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html#cfn-s3-bucket-notificationconfig-topicconfig
+sbncTopicConfigurations :: Lens' S3BucketNotificationConfiguration (Maybe [S3BucketTopicConfiguration])
+sbncTopicConfigurations = lens _s3BucketNotificationConfigurationTopicConfigurations (\s a -> s { _s3BucketNotificationConfigurationTopicConfigurations = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketNotificationFilter.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketNotificationFilter.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketNotificationFilter.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter.html
+
+module Stratosphere.ResourceProperties.S3BucketNotificationFilter where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.S3BucketS3KeyFilter
+
+-- | Full data type definition for S3BucketNotificationFilter. See
+-- | 's3BucketNotificationFilter' for a more convenient constructor.
+data S3BucketNotificationFilter =
+  S3BucketNotificationFilter
+  { _s3BucketNotificationFilterS3Key :: S3BucketS3KeyFilter
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketNotificationFilter where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON S3BucketNotificationFilter where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketNotificationFilter' containing required fields
+-- | as arguments.
+s3BucketNotificationFilter
+  :: S3BucketS3KeyFilter -- ^ 'sbnfS3Key'
+  -> S3BucketNotificationFilter
+s3BucketNotificationFilter s3Keyarg =
+  S3BucketNotificationFilter
+  { _s3BucketNotificationFilterS3Key = s3Keyarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter.html#cfn-s3-bucket-notificationconfiguraiton-config-filter-s3key
+sbnfS3Key :: Lens' S3BucketNotificationFilter S3BucketS3KeyFilter
+sbnfS3Key = lens _s3BucketNotificationFilterS3Key (\s a -> s { _s3BucketNotificationFilterS3Key = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketQueueConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketQueueConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketQueueConfiguration.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-queueconfig.html
+
+module Stratosphere.ResourceProperties.S3BucketQueueConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.S3BucketNotificationFilter
+
+-- | Full data type definition for S3BucketQueueConfiguration. See
+-- | 's3BucketQueueConfiguration' for a more convenient constructor.
+data S3BucketQueueConfiguration =
+  S3BucketQueueConfiguration
+  { _s3BucketQueueConfigurationEvent :: Val Text
+  , _s3BucketQueueConfigurationFilter :: Maybe S3BucketNotificationFilter
+  , _s3BucketQueueConfigurationQueue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketQueueConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON S3BucketQueueConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketQueueConfiguration' containing required fields
+-- | as arguments.
+s3BucketQueueConfiguration
+  :: Val Text -- ^ 'sbqcEvent'
+  -> Val Text -- ^ 'sbqcQueue'
+  -> S3BucketQueueConfiguration
+s3BucketQueueConfiguration eventarg queuearg =
+  S3BucketQueueConfiguration
+  { _s3BucketQueueConfigurationEvent = eventarg
+  , _s3BucketQueueConfigurationFilter = Nothing
+  , _s3BucketQueueConfigurationQueue = queuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-queueconfig.html#cfn-s3-bucket-notificationconfig-queueconfig-event
+sbqcEvent :: Lens' S3BucketQueueConfiguration (Val Text)
+sbqcEvent = lens _s3BucketQueueConfigurationEvent (\s a -> s { _s3BucketQueueConfigurationEvent = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-queueconfig.html#cfn-s3-bucket-notificationconfig-queueconfig-filter
+sbqcFilter :: Lens' S3BucketQueueConfiguration (Maybe S3BucketNotificationFilter)
+sbqcFilter = lens _s3BucketQueueConfigurationFilter (\s a -> s { _s3BucketQueueConfigurationFilter = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-queueconfig.html#cfn-s3-bucket-notificationconfig-queueconfig-queue
+sbqcQueue :: Lens' S3BucketQueueConfiguration (Val Text)
+sbqcQueue = lens _s3BucketQueueConfigurationQueue (\s a -> s { _s3BucketQueueConfigurationQueue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketRedirectAllRequestsTo.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketRedirectAllRequestsTo.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketRedirectAllRequestsTo.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-redirectallrequeststo.html
+
+module Stratosphere.ResourceProperties.S3BucketRedirectAllRequestsTo where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for S3BucketRedirectAllRequestsTo. See
+-- | 's3BucketRedirectAllRequestsTo' for a more convenient constructor.
+data S3BucketRedirectAllRequestsTo =
+  S3BucketRedirectAllRequestsTo
+  { _s3BucketRedirectAllRequestsToHostName :: Val Text
+  , _s3BucketRedirectAllRequestsToProtocol :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketRedirectAllRequestsTo where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+instance FromJSON S3BucketRedirectAllRequestsTo where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketRedirectAllRequestsTo' containing required
+-- | fields as arguments.
+s3BucketRedirectAllRequestsTo
+  :: Val Text -- ^ 'sbrartHostName'
+  -> S3BucketRedirectAllRequestsTo
+s3BucketRedirectAllRequestsTo hostNamearg =
+  S3BucketRedirectAllRequestsTo
+  { _s3BucketRedirectAllRequestsToHostName = hostNamearg
+  , _s3BucketRedirectAllRequestsToProtocol = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-redirectallrequeststo.html#cfn-s3-websiteconfiguration-redirectallrequeststo-hostname
+sbrartHostName :: Lens' S3BucketRedirectAllRequestsTo (Val Text)
+sbrartHostName = lens _s3BucketRedirectAllRequestsToHostName (\s a -> s { _s3BucketRedirectAllRequestsToHostName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-redirectallrequeststo.html#cfn-s3-websiteconfiguration-redirectallrequeststo-protocol
+sbrartProtocol :: Lens' S3BucketRedirectAllRequestsTo (Maybe (Val Text))
+sbrartProtocol = lens _s3BucketRedirectAllRequestsToProtocol (\s a -> s { _s3BucketRedirectAllRequestsToProtocol = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketRedirectRule.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketRedirectRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketRedirectRule.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-redirectrule.html
+
+module Stratosphere.ResourceProperties.S3BucketRedirectRule where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for S3BucketRedirectRule. See
+-- | 's3BucketRedirectRule' for a more convenient constructor.
+data S3BucketRedirectRule =
+  S3BucketRedirectRule
+  { _s3BucketRedirectRuleHostName :: Maybe (Val Text)
+  , _s3BucketRedirectRuleHttpRedirectCode :: Maybe (Val Text)
+  , _s3BucketRedirectRuleProtocol :: Maybe (Val Text)
+  , _s3BucketRedirectRuleReplaceKeyPrefixWith :: Maybe (Val Text)
+  , _s3BucketRedirectRuleReplaceKeyWith :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketRedirectRule where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+instance FromJSON S3BucketRedirectRule where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketRedirectRule' containing required fields as
+-- | arguments.
+s3BucketRedirectRule
+  :: S3BucketRedirectRule
+s3BucketRedirectRule  =
+  S3BucketRedirectRule
+  { _s3BucketRedirectRuleHostName = Nothing
+  , _s3BucketRedirectRuleHttpRedirectCode = Nothing
+  , _s3BucketRedirectRuleProtocol = Nothing
+  , _s3BucketRedirectRuleReplaceKeyPrefixWith = Nothing
+  , _s3BucketRedirectRuleReplaceKeyWith = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-redirectrule.html#cfn-s3-websiteconfiguration-redirectrule-hostname
+sbrrHostName :: Lens' S3BucketRedirectRule (Maybe (Val Text))
+sbrrHostName = lens _s3BucketRedirectRuleHostName (\s a -> s { _s3BucketRedirectRuleHostName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-redirectrule.html#cfn-s3-websiteconfiguration-redirectrule-httpredirectcode
+sbrrHttpRedirectCode :: Lens' S3BucketRedirectRule (Maybe (Val Text))
+sbrrHttpRedirectCode = lens _s3BucketRedirectRuleHttpRedirectCode (\s a -> s { _s3BucketRedirectRuleHttpRedirectCode = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-redirectrule.html#cfn-s3-websiteconfiguration-redirectrule-protocol
+sbrrProtocol :: Lens' S3BucketRedirectRule (Maybe (Val Text))
+sbrrProtocol = lens _s3BucketRedirectRuleProtocol (\s a -> s { _s3BucketRedirectRuleProtocol = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-redirectrule.html#cfn-s3-websiteconfiguration-redirectrule-replacekeyprefixwith
+sbrrReplaceKeyPrefixWith :: Lens' S3BucketRedirectRule (Maybe (Val Text))
+sbrrReplaceKeyPrefixWith = lens _s3BucketRedirectRuleReplaceKeyPrefixWith (\s a -> s { _s3BucketRedirectRuleReplaceKeyPrefixWith = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-redirectrule.html#cfn-s3-websiteconfiguration-redirectrule-replacekeywith
+sbrrReplaceKeyWith :: Lens' S3BucketRedirectRule (Maybe (Val Text))
+sbrrReplaceKeyWith = lens _s3BucketRedirectRuleReplaceKeyWith (\s a -> s { _s3BucketRedirectRuleReplaceKeyWith = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationConfiguration.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration.html
+
+module Stratosphere.ResourceProperties.S3BucketReplicationConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.S3BucketReplicationRule
+
+-- | Full data type definition for S3BucketReplicationConfiguration. See
+-- | 's3BucketReplicationConfiguration' for a more convenient constructor.
+data S3BucketReplicationConfiguration =
+  S3BucketReplicationConfiguration
+  { _s3BucketReplicationConfigurationRole :: Val Text
+  , _s3BucketReplicationConfigurationRules :: [S3BucketReplicationRule]
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketReplicationConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+instance FromJSON S3BucketReplicationConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketReplicationConfiguration' containing required
+-- | fields as arguments.
+s3BucketReplicationConfiguration
+  :: Val Text -- ^ 'sbrcRole'
+  -> [S3BucketReplicationRule] -- ^ 'sbrcRules'
+  -> S3BucketReplicationConfiguration
+s3BucketReplicationConfiguration rolearg rulesarg =
+  S3BucketReplicationConfiguration
+  { _s3BucketReplicationConfigurationRole = rolearg
+  , _s3BucketReplicationConfigurationRules = rulesarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration.html#cfn-s3-bucket-replicationconfiguration-role
+sbrcRole :: Lens' S3BucketReplicationConfiguration (Val Text)
+sbrcRole = lens _s3BucketReplicationConfigurationRole (\s a -> s { _s3BucketReplicationConfigurationRole = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration.html#cfn-s3-bucket-replicationconfiguration-rules
+sbrcRules :: Lens' S3BucketReplicationConfiguration [S3BucketReplicationRule]
+sbrcRules = lens _s3BucketReplicationConfigurationRules (\s a -> s { _s3BucketReplicationConfigurationRules = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationDestination.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationDestination.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationDestination.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules-destination.html
+
+module Stratosphere.ResourceProperties.S3BucketReplicationDestination where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for S3BucketReplicationDestination. See
+-- | 's3BucketReplicationDestination' for a more convenient constructor.
+data S3BucketReplicationDestination =
+  S3BucketReplicationDestination
+  { _s3BucketReplicationDestinationBucket :: Val Text
+  , _s3BucketReplicationDestinationStorageClass :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketReplicationDestination where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+instance FromJSON S3BucketReplicationDestination where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketReplicationDestination' containing required
+-- | fields as arguments.
+s3BucketReplicationDestination
+  :: Val Text -- ^ 'sbrdBucket'
+  -> S3BucketReplicationDestination
+s3BucketReplicationDestination bucketarg =
+  S3BucketReplicationDestination
+  { _s3BucketReplicationDestinationBucket = bucketarg
+  , _s3BucketReplicationDestinationStorageClass = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules-destination.html#cfn-s3-bucket-replicationconfiguration-rules-destination-bucket
+sbrdBucket :: Lens' S3BucketReplicationDestination (Val Text)
+sbrdBucket = lens _s3BucketReplicationDestinationBucket (\s a -> s { _s3BucketReplicationDestinationBucket = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules-destination.html#cfn-s3-bucket-replicationconfiguration-rules-destination-storageclass
+sbrdStorageClass :: Lens' S3BucketReplicationDestination (Maybe (Val Text))
+sbrdStorageClass = lens _s3BucketReplicationDestinationStorageClass (\s a -> s { _s3BucketReplicationDestinationStorageClass = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationRule.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketReplicationRule.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules.html
+
+module Stratosphere.ResourceProperties.S3BucketReplicationRule where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.S3BucketReplicationDestination
+
+-- | Full data type definition for S3BucketReplicationRule. See
+-- | 's3BucketReplicationRule' for a more convenient constructor.
+data S3BucketReplicationRule =
+  S3BucketReplicationRule
+  { _s3BucketReplicationRuleDestination :: S3BucketReplicationDestination
+  , _s3BucketReplicationRuleId :: Maybe (Val Text)
+  , _s3BucketReplicationRulePrefix :: Val Text
+  , _s3BucketReplicationRuleStatus :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketReplicationRule where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+instance FromJSON S3BucketReplicationRule where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketReplicationRule' containing required fields as
+-- | arguments.
+s3BucketReplicationRule
+  :: S3BucketReplicationDestination -- ^ 'sbrrDestination'
+  -> Val Text -- ^ 'sbrrPrefix'
+  -> Val Text -- ^ 'sbrrStatus'
+  -> S3BucketReplicationRule
+s3BucketReplicationRule destinationarg prefixarg statusarg =
+  S3BucketReplicationRule
+  { _s3BucketReplicationRuleDestination = destinationarg
+  , _s3BucketReplicationRuleId = Nothing
+  , _s3BucketReplicationRulePrefix = prefixarg
+  , _s3BucketReplicationRuleStatus = statusarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules.html#cfn-s3-bucket-replicationconfiguration-rules-destination
+sbrrDestination :: Lens' S3BucketReplicationRule S3BucketReplicationDestination
+sbrrDestination = lens _s3BucketReplicationRuleDestination (\s a -> s { _s3BucketReplicationRuleDestination = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules.html#cfn-s3-bucket-replicationconfiguration-rules-id
+sbrrId :: Lens' S3BucketReplicationRule (Maybe (Val Text))
+sbrrId = lens _s3BucketReplicationRuleId (\s a -> s { _s3BucketReplicationRuleId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules.html#cfn-s3-bucket-replicationconfiguration-rules-prefix
+sbrrPrefix :: Lens' S3BucketReplicationRule (Val Text)
+sbrrPrefix = lens _s3BucketReplicationRulePrefix (\s a -> s { _s3BucketReplicationRulePrefix = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules.html#cfn-s3-bucket-replicationconfiguration-rules-status
+sbrrStatus :: Lens' S3BucketReplicationRule (Val Text)
+sbrrStatus = lens _s3BucketReplicationRuleStatus (\s a -> s { _s3BucketReplicationRuleStatus = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketRoutingRule.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketRoutingRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketRoutingRule.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules.html
+
+module Stratosphere.ResourceProperties.S3BucketRoutingRule where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.S3BucketRedirectRule
+import Stratosphere.ResourceProperties.S3BucketRoutingRuleCondition
+
+-- | Full data type definition for S3BucketRoutingRule. See
+-- | 's3BucketRoutingRule' for a more convenient constructor.
+data S3BucketRoutingRule =
+  S3BucketRoutingRule
+  { _s3BucketRoutingRuleRedirectRule :: S3BucketRedirectRule
+  , _s3BucketRoutingRuleRoutingRuleCondition :: Maybe S3BucketRoutingRuleCondition
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketRoutingRule where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+instance FromJSON S3BucketRoutingRule where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketRoutingRule' containing required fields as
+-- | arguments.
+s3BucketRoutingRule
+  :: S3BucketRedirectRule -- ^ 'sbrrRedirectRule'
+  -> S3BucketRoutingRule
+s3BucketRoutingRule redirectRulearg =
+  S3BucketRoutingRule
+  { _s3BucketRoutingRuleRedirectRule = redirectRulearg
+  , _s3BucketRoutingRuleRoutingRuleCondition = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules.html#cfn-s3-websiteconfiguration-routingrules-redirectrule
+sbrrRedirectRule :: Lens' S3BucketRoutingRule S3BucketRedirectRule
+sbrrRedirectRule = lens _s3BucketRoutingRuleRedirectRule (\s a -> s { _s3BucketRoutingRuleRedirectRule = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules.html#cfn-s3-websiteconfiguration-routingrules-routingrulecondition
+sbrrRoutingRuleCondition :: Lens' S3BucketRoutingRule (Maybe S3BucketRoutingRuleCondition)
+sbrrRoutingRuleCondition = lens _s3BucketRoutingRuleRoutingRuleCondition (\s a -> s { _s3BucketRoutingRuleRoutingRuleCondition = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketRoutingRuleCondition.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketRoutingRuleCondition.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketRoutingRuleCondition.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-routingrulecondition.html
+
+module Stratosphere.ResourceProperties.S3BucketRoutingRuleCondition where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for S3BucketRoutingRuleCondition. See
+-- | 's3BucketRoutingRuleCondition' for a more convenient constructor.
+data S3BucketRoutingRuleCondition =
+  S3BucketRoutingRuleCondition
+  { _s3BucketRoutingRuleConditionHttpErrorCodeReturnedEquals :: Maybe (Val Text)
+  , _s3BucketRoutingRuleConditionKeyPrefixEquals :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketRoutingRuleCondition where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+instance FromJSON S3BucketRoutingRuleCondition where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketRoutingRuleCondition' containing required fields
+-- | as arguments.
+s3BucketRoutingRuleCondition
+  :: S3BucketRoutingRuleCondition
+s3BucketRoutingRuleCondition  =
+  S3BucketRoutingRuleCondition
+  { _s3BucketRoutingRuleConditionHttpErrorCodeReturnedEquals = Nothing
+  , _s3BucketRoutingRuleConditionKeyPrefixEquals = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-routingrulecondition.html#cfn-s3-websiteconfiguration-routingrules-routingrulecondition-httperrorcodereturnedequals
+sbrrcHttpErrorCodeReturnedEquals :: Lens' S3BucketRoutingRuleCondition (Maybe (Val Text))
+sbrrcHttpErrorCodeReturnedEquals = lens _s3BucketRoutingRuleConditionHttpErrorCodeReturnedEquals (\s a -> s { _s3BucketRoutingRuleConditionHttpErrorCodeReturnedEquals = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-routingrulecondition.html#cfn-s3-websiteconfiguration-routingrules-routingrulecondition-keyprefixequals
+sbrrcKeyPrefixEquals :: Lens' S3BucketRoutingRuleCondition (Maybe (Val Text))
+sbrrcKeyPrefixEquals = lens _s3BucketRoutingRuleConditionKeyPrefixEquals (\s a -> s { _s3BucketRoutingRuleConditionKeyPrefixEquals = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketRule.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketRule.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html
+
+module Stratosphere.ResourceProperties.S3BucketRule where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.S3BucketNoncurrentVersionTransition
+import Stratosphere.ResourceProperties.S3BucketTransition
+
+-- | Full data type definition for S3BucketRule. See 's3BucketRule' for a more
+-- | convenient constructor.
+data S3BucketRule =
+  S3BucketRule
+  { _s3BucketRuleExpirationDate :: Maybe (Val Text)
+  , _s3BucketRuleExpirationInDays :: Maybe (Val Integer')
+  , _s3BucketRuleId :: Maybe (Val Text)
+  , _s3BucketRuleNoncurrentVersionExpirationInDays :: Maybe (Val Integer')
+  , _s3BucketRuleNoncurrentVersionTransition :: Maybe S3BucketNoncurrentVersionTransition
+  , _s3BucketRuleNoncurrentVersionTransitions :: Maybe S3BucketNoncurrentVersionTransition
+  , _s3BucketRulePrefix :: Maybe (Val Text)
+  , _s3BucketRuleStatus :: Val Text
+  , _s3BucketRuleTransition :: Maybe S3BucketTransition
+  , _s3BucketRuleTransitions :: Maybe S3BucketTransition
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketRule where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+
+instance FromJSON S3BucketRule where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketRule' containing required fields as arguments.
+s3BucketRule
+  :: Val Text -- ^ 'sbrStatus'
+  -> S3BucketRule
+s3BucketRule statusarg =
+  S3BucketRule
+  { _s3BucketRuleExpirationDate = Nothing
+  , _s3BucketRuleExpirationInDays = Nothing
+  , _s3BucketRuleId = Nothing
+  , _s3BucketRuleNoncurrentVersionExpirationInDays = Nothing
+  , _s3BucketRuleNoncurrentVersionTransition = Nothing
+  , _s3BucketRuleNoncurrentVersionTransitions = Nothing
+  , _s3BucketRulePrefix = Nothing
+  , _s3BucketRuleStatus = statusarg
+  , _s3BucketRuleTransition = Nothing
+  , _s3BucketRuleTransitions = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-expirationdate
+sbrExpirationDate :: Lens' S3BucketRule (Maybe (Val Text))
+sbrExpirationDate = lens _s3BucketRuleExpirationDate (\s a -> s { _s3BucketRuleExpirationDate = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-expirationindays
+sbrExpirationInDays :: Lens' S3BucketRule (Maybe (Val Integer'))
+sbrExpirationInDays = lens _s3BucketRuleExpirationInDays (\s a -> s { _s3BucketRuleExpirationInDays = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-id
+sbrId :: Lens' S3BucketRule (Maybe (Val Text))
+sbrId = lens _s3BucketRuleId (\s a -> s { _s3BucketRuleId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-noncurrentversionexpirationindays
+sbrNoncurrentVersionExpirationInDays :: Lens' S3BucketRule (Maybe (Val Integer'))
+sbrNoncurrentVersionExpirationInDays = lens _s3BucketRuleNoncurrentVersionExpirationInDays (\s a -> s { _s3BucketRuleNoncurrentVersionExpirationInDays = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-noncurrentversiontransition
+sbrNoncurrentVersionTransition :: Lens' S3BucketRule (Maybe S3BucketNoncurrentVersionTransition)
+sbrNoncurrentVersionTransition = lens _s3BucketRuleNoncurrentVersionTransition (\s a -> s { _s3BucketRuleNoncurrentVersionTransition = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-noncurrentversiontransitions
+sbrNoncurrentVersionTransitions :: Lens' S3BucketRule (Maybe S3BucketNoncurrentVersionTransition)
+sbrNoncurrentVersionTransitions = lens _s3BucketRuleNoncurrentVersionTransitions (\s a -> s { _s3BucketRuleNoncurrentVersionTransitions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-prefix
+sbrPrefix :: Lens' S3BucketRule (Maybe (Val Text))
+sbrPrefix = lens _s3BucketRulePrefix (\s a -> s { _s3BucketRulePrefix = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-status
+sbrStatus :: Lens' S3BucketRule (Val Text)
+sbrStatus = lens _s3BucketRuleStatus (\s a -> s { _s3BucketRuleStatus = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-transition
+sbrTransition :: Lens' S3BucketRule (Maybe S3BucketTransition)
+sbrTransition = lens _s3BucketRuleTransition (\s a -> s { _s3BucketRuleTransition = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-transitions
+sbrTransitions :: Lens' S3BucketRule (Maybe S3BucketTransition)
+sbrTransitions = lens _s3BucketRuleTransitions (\s a -> s { _s3BucketRuleTransitions = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketS3KeyFilter.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketS3KeyFilter.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketS3KeyFilter.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key.html
+
+module Stratosphere.ResourceProperties.S3BucketS3KeyFilter where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.S3BucketFilterRule
+
+-- | Full data type definition for S3BucketS3KeyFilter. See
+-- | 's3BucketS3KeyFilter' for a more convenient constructor.
+data S3BucketS3KeyFilter =
+  S3BucketS3KeyFilter
+  { _s3BucketS3KeyFilterRules :: [S3BucketFilterRule]
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketS3KeyFilter where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+instance FromJSON S3BucketS3KeyFilter where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketS3KeyFilter' containing required fields as
+-- | arguments.
+s3BucketS3KeyFilter
+  :: [S3BucketFilterRule] -- ^ 'sbskfRules'
+  -> S3BucketS3KeyFilter
+s3BucketS3KeyFilter rulesarg =
+  S3BucketS3KeyFilter
+  { _s3BucketS3KeyFilterRules = rulesarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key.html#cfn-s3-bucket-notificationconfiguraiton-config-filter-s3key-rules
+sbskfRules :: Lens' S3BucketS3KeyFilter [S3BucketFilterRule]
+sbskfRules = lens _s3BucketS3KeyFilterRules (\s a -> s { _s3BucketS3KeyFilterRules = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketTopicConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketTopicConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketTopicConfiguration.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-topicconfig.html
+
+module Stratosphere.ResourceProperties.S3BucketTopicConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.S3BucketNotificationFilter
+
+-- | Full data type definition for S3BucketTopicConfiguration. See
+-- | 's3BucketTopicConfiguration' for a more convenient constructor.
+data S3BucketTopicConfiguration =
+  S3BucketTopicConfiguration
+  { _s3BucketTopicConfigurationEvent :: Val Text
+  , _s3BucketTopicConfigurationFilter :: Maybe S3BucketNotificationFilter
+  , _s3BucketTopicConfigurationTopic :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketTopicConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON S3BucketTopicConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketTopicConfiguration' containing required fields
+-- | as arguments.
+s3BucketTopicConfiguration
+  :: Val Text -- ^ 'sbtcEvent'
+  -> Val Text -- ^ 'sbtcTopic'
+  -> S3BucketTopicConfiguration
+s3BucketTopicConfiguration eventarg topicarg =
+  S3BucketTopicConfiguration
+  { _s3BucketTopicConfigurationEvent = eventarg
+  , _s3BucketTopicConfigurationFilter = Nothing
+  , _s3BucketTopicConfigurationTopic = topicarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-topicconfig.html#cfn-s3-bucket-notificationconfig-topicconfig-event
+sbtcEvent :: Lens' S3BucketTopicConfiguration (Val Text)
+sbtcEvent = lens _s3BucketTopicConfigurationEvent (\s a -> s { _s3BucketTopicConfigurationEvent = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-topicconfig.html#cfn-s3-bucket-notificationconfig-topicconfig-filter
+sbtcFilter :: Lens' S3BucketTopicConfiguration (Maybe S3BucketNotificationFilter)
+sbtcFilter = lens _s3BucketTopicConfigurationFilter (\s a -> s { _s3BucketTopicConfigurationFilter = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-topicconfig.html#cfn-s3-bucket-notificationconfig-topicconfig-topic
+sbtcTopic :: Lens' S3BucketTopicConfiguration (Val Text)
+sbtcTopic = lens _s3BucketTopicConfigurationTopic (\s a -> s { _s3BucketTopicConfigurationTopic = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketTransition.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketTransition.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketTransition.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-transition.html
+
+module Stratosphere.ResourceProperties.S3BucketTransition where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for S3BucketTransition. See
+-- | 's3BucketTransition' for a more convenient constructor.
+data S3BucketTransition =
+  S3BucketTransition
+  { _s3BucketTransitionStorageClass :: Val Text
+  , _s3BucketTransitionTransitionDate :: Maybe (Val Text)
+  , _s3BucketTransitionTransitionInDays :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketTransition where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+instance FromJSON S3BucketTransition where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketTransition' containing required fields as
+-- | arguments.
+s3BucketTransition
+  :: Val Text -- ^ 'sbtStorageClass'
+  -> S3BucketTransition
+s3BucketTransition storageClassarg =
+  S3BucketTransition
+  { _s3BucketTransitionStorageClass = storageClassarg
+  , _s3BucketTransitionTransitionDate = Nothing
+  , _s3BucketTransitionTransitionInDays = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-transition.html#cfn-s3-bucket-lifecycleconfig-rule-transition-storageclass
+sbtStorageClass :: Lens' S3BucketTransition (Val Text)
+sbtStorageClass = lens _s3BucketTransitionStorageClass (\s a -> s { _s3BucketTransitionStorageClass = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-transition.html#cfn-s3-bucket-lifecycleconfig-rule-transition-transitiondate
+sbtTransitionDate :: Lens' S3BucketTransition (Maybe (Val Text))
+sbtTransitionDate = lens _s3BucketTransitionTransitionDate (\s a -> s { _s3BucketTransitionTransitionDate = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-transition.html#cfn-s3-bucket-lifecycleconfig-rule-transition-transitionindays
+sbtTransitionInDays :: Lens' S3BucketTransition (Maybe (Val Integer'))
+sbtTransitionInDays = lens _s3BucketTransitionTransitionInDays (\s a -> s { _s3BucketTransitionTransitionInDays = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketVersioningConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketVersioningConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketVersioningConfiguration.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-versioningconfig.html
+
+module Stratosphere.ResourceProperties.S3BucketVersioningConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for S3BucketVersioningConfiguration. See
+-- | 's3BucketVersioningConfiguration' for a more convenient constructor.
+data S3BucketVersioningConfiguration =
+  S3BucketVersioningConfiguration
+  { _s3BucketVersioningConfigurationStatus :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketVersioningConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+instance FromJSON S3BucketVersioningConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketVersioningConfiguration' containing required
+-- | fields as arguments.
+s3BucketVersioningConfiguration
+  :: Val Text -- ^ 'sbvcStatus'
+  -> S3BucketVersioningConfiguration
+s3BucketVersioningConfiguration statusarg =
+  S3BucketVersioningConfiguration
+  { _s3BucketVersioningConfigurationStatus = statusarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-versioningconfig.html#cfn-s3-bucket-versioningconfig-status
+sbvcStatus :: Lens' S3BucketVersioningConfiguration (Val Text)
+sbvcStatus = lens _s3BucketVersioningConfigurationStatus (\s a -> s { _s3BucketVersioningConfigurationStatus = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3BucketWebsiteConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3BucketWebsiteConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/S3BucketWebsiteConfiguration.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration.html
+
+module Stratosphere.ResourceProperties.S3BucketWebsiteConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.S3BucketRedirectAllRequestsTo
+import Stratosphere.ResourceProperties.S3BucketRoutingRule
+
+-- | Full data type definition for S3BucketWebsiteConfiguration. See
+-- | 's3BucketWebsiteConfiguration' for a more convenient constructor.
+data S3BucketWebsiteConfiguration =
+  S3BucketWebsiteConfiguration
+  { _s3BucketWebsiteConfigurationErrorDocument :: Maybe (Val Text)
+  , _s3BucketWebsiteConfigurationIndexDocument :: Maybe (Val Text)
+  , _s3BucketWebsiteConfigurationRedirectAllRequestsTo :: Maybe S3BucketRedirectAllRequestsTo
+  , _s3BucketWebsiteConfigurationRoutingRules :: Maybe [S3BucketRoutingRule]
+  } deriving (Show, Generic)
+
+instance ToJSON S3BucketWebsiteConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+instance FromJSON S3BucketWebsiteConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+-- | Constructor for 'S3BucketWebsiteConfiguration' containing required fields
+-- | as arguments.
+s3BucketWebsiteConfiguration
+  :: S3BucketWebsiteConfiguration
+s3BucketWebsiteConfiguration  =
+  S3BucketWebsiteConfiguration
+  { _s3BucketWebsiteConfigurationErrorDocument = Nothing
+  , _s3BucketWebsiteConfigurationIndexDocument = Nothing
+  , _s3BucketWebsiteConfigurationRedirectAllRequestsTo = Nothing
+  , _s3BucketWebsiteConfigurationRoutingRules = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration.html#cfn-s3-websiteconfiguration-errordocument
+sbwcErrorDocument :: Lens' S3BucketWebsiteConfiguration (Maybe (Val Text))
+sbwcErrorDocument = lens _s3BucketWebsiteConfigurationErrorDocument (\s a -> s { _s3BucketWebsiteConfigurationErrorDocument = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration.html#cfn-s3-websiteconfiguration-indexdocument
+sbwcIndexDocument :: Lens' S3BucketWebsiteConfiguration (Maybe (Val Text))
+sbwcIndexDocument = lens _s3BucketWebsiteConfigurationIndexDocument (\s a -> s { _s3BucketWebsiteConfigurationIndexDocument = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration.html#cfn-s3-websiteconfiguration-redirectallrequeststo
+sbwcRedirectAllRequestsTo :: Lens' S3BucketWebsiteConfiguration (Maybe S3BucketRedirectAllRequestsTo)
+sbwcRedirectAllRequestsTo = lens _s3BucketWebsiteConfigurationRedirectAllRequestsTo (\s a -> s { _s3BucketWebsiteConfigurationRedirectAllRequestsTo = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration.html#cfn-s3-websiteconfiguration-routingrules
+sbwcRoutingRules :: Lens' S3BucketWebsiteConfiguration (Maybe [S3BucketRoutingRule])
+sbwcRoutingRules = lens _s3BucketWebsiteConfigurationRoutingRules (\s a -> s { _s3BucketWebsiteConfigurationRoutingRules = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3CorsConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3CorsConfiguration.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3CorsConfiguration.hs
+++ /dev/null
@@ -1,43 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Describes the cross-origin access configuration for objects in an
--- AWS::S3::Bucket resource.
-
-module Stratosphere.ResourceProperties.S3CorsConfiguration where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.S3CorsConfigurationRule
-
--- | Full data type definition for S3CorsConfiguration. See
--- 's3CorsConfiguration' for a more convenient constructor.
-data S3CorsConfiguration =
-  S3CorsConfiguration
-  { _s3CorsConfigurationCorsRules :: [S3CorsConfigurationRule]
-  } deriving (Show, Generic)
-
-instance ToJSON S3CorsConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
-
-instance FromJSON S3CorsConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
-
--- | Constructor for 'S3CorsConfiguration' containing required fields as
--- arguments.
-s3CorsConfiguration
-  :: [S3CorsConfigurationRule] -- ^ 'sccCorsRules'
-  -> S3CorsConfiguration
-s3CorsConfiguration corsRulesarg =
-  S3CorsConfiguration
-  { _s3CorsConfigurationCorsRules = corsRulesarg
-  }
-
--- | A set of origins and methods that you allow.
-sccCorsRules :: Lens' S3CorsConfiguration [S3CorsConfigurationRule]
-sccCorsRules = lens _s3CorsConfigurationCorsRules (\s a -> s { _s3CorsConfigurationCorsRules = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3CorsConfigurationRule.hs b/library-gen/Stratosphere/ResourceProperties/S3CorsConfigurationRule.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3CorsConfigurationRule.hs
+++ /dev/null
@@ -1,81 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Describes cross-origin access rules for the Amazon S3 Cors Configuration
--- property.
-
-module Stratosphere.ResourceProperties.S3CorsConfigurationRule where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for S3CorsConfigurationRule. See
--- 's3CorsConfigurationRule' for a more convenient constructor.
-data S3CorsConfigurationRule =
-  S3CorsConfigurationRule
-  { _s3CorsConfigurationRuleAllowedHeaders :: Maybe [Val Text]
-  , _s3CorsConfigurationRuleAllowedMethods :: [Val Text]
-  , _s3CorsConfigurationRuleAllowedOrigins :: [Val Text]
-  , _s3CorsConfigurationRuleExposedHeaders :: Maybe [Val Text]
-  , _s3CorsConfigurationRuleId :: Maybe (Val Text)
-  , _s3CorsConfigurationRuleMaxAge :: Maybe (Val Integer')
-  } deriving (Show, Generic)
-
-instance ToJSON S3CorsConfigurationRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
-
-instance FromJSON S3CorsConfigurationRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
-
--- | Constructor for 'S3CorsConfigurationRule' containing required fields as
--- arguments.
-s3CorsConfigurationRule
-  :: [Val Text] -- ^ 'sccrAllowedMethods'
-  -> [Val Text] -- ^ 'sccrAllowedOrigins'
-  -> S3CorsConfigurationRule
-s3CorsConfigurationRule allowedMethodsarg allowedOriginsarg =
-  S3CorsConfigurationRule
-  { _s3CorsConfigurationRuleAllowedHeaders = Nothing
-  , _s3CorsConfigurationRuleAllowedMethods = allowedMethodsarg
-  , _s3CorsConfigurationRuleAllowedOrigins = allowedOriginsarg
-  , _s3CorsConfigurationRuleExposedHeaders = Nothing
-  , _s3CorsConfigurationRuleId = Nothing
-  , _s3CorsConfigurationRuleMaxAge = Nothing
-  }
-
--- | Headers that are specified in the Access-Control-Request-Headers header.
--- These headers are allowed in a preflight OPTIONS request. In response to
--- any preflight OPTIONS request, Amazon S3 returns any requested headers that
--- are allowed.
-sccrAllowedHeaders :: Lens' S3CorsConfigurationRule (Maybe [Val Text])
-sccrAllowedHeaders = lens _s3CorsConfigurationRuleAllowedHeaders (\s a -> s { _s3CorsConfigurationRuleAllowedHeaders = a })
-
--- | An HTTP method that you allow the origin to execute. The valid values are
--- GET, PUT, HEAD, POST, and DELETE.
-sccrAllowedMethods :: Lens' S3CorsConfigurationRule [Val Text]
-sccrAllowedMethods = lens _s3CorsConfigurationRuleAllowedMethods (\s a -> s { _s3CorsConfigurationRuleAllowedMethods = a })
-
--- | An origin that you allow to send cross-domain requests.
-sccrAllowedOrigins :: Lens' S3CorsConfigurationRule [Val Text]
-sccrAllowedOrigins = lens _s3CorsConfigurationRuleAllowedOrigins (\s a -> s { _s3CorsConfigurationRuleAllowedOrigins = a })
-
--- | One or more headers in the response that are accessible to client
--- applications (for example, from a JavaScript XMLHttpRequest object).
-sccrExposedHeaders :: Lens' S3CorsConfigurationRule (Maybe [Val Text])
-sccrExposedHeaders = lens _s3CorsConfigurationRuleExposedHeaders (\s a -> s { _s3CorsConfigurationRuleExposedHeaders = a })
-
--- | A unique identifier for this rule. The value cannot be more than 255
--- characters.
-sccrId :: Lens' S3CorsConfigurationRule (Maybe (Val Text))
-sccrId = lens _s3CorsConfigurationRuleId (\s a -> s { _s3CorsConfigurationRuleId = a })
-
--- | The time in seconds that your browser is to cache the preflight response
--- for the specified resource.
-sccrMaxAge :: Lens' S3CorsConfigurationRule (Maybe (Val Integer'))
-sccrMaxAge = lens _s3CorsConfigurationRuleMaxAge (\s a -> s { _s3CorsConfigurationRuleMaxAge = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3LifecycleConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3LifecycleConfiguration.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3LifecycleConfiguration.hs
+++ /dev/null
@@ -1,43 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Describes the lifecycle configuration for objects in an AWS::S3::Bucket
--- resource.
-
-module Stratosphere.ResourceProperties.S3LifecycleConfiguration where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.S3LifecycleRule
-
--- | Full data type definition for S3LifecycleConfiguration. See
--- 's3LifecycleConfiguration' for a more convenient constructor.
-data S3LifecycleConfiguration =
-  S3LifecycleConfiguration
-  { _s3LifecycleConfigurationRules :: [S3LifecycleRule]
-  } deriving (Show, Generic)
-
-instance ToJSON S3LifecycleConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
-
-instance FromJSON S3LifecycleConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
-
--- | Constructor for 'S3LifecycleConfiguration' containing required fields as
--- arguments.
-s3LifecycleConfiguration
-  :: [S3LifecycleRule] -- ^ 'slcRules'
-  -> S3LifecycleConfiguration
-s3LifecycleConfiguration rulesarg =
-  S3LifecycleConfiguration
-  { _s3LifecycleConfigurationRules = rulesarg
-  }
-
--- | A lifecycle rule for individual objects in an S3 bucket.
-slcRules :: Lens' S3LifecycleConfiguration [S3LifecycleRule]
-slcRules = lens _s3LifecycleConfigurationRules (\s a -> s { _s3LifecycleConfigurationRules = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3LifecycleRule.hs b/library-gen/Stratosphere/ResourceProperties/S3LifecycleRule.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3LifecycleRule.hs
+++ /dev/null
@@ -1,131 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Describes lifecycle rules for the Amazon S3 Lifecycle Configuration
--- property.
-
-module Stratosphere.ResourceProperties.S3LifecycleRule where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.S3LifecycleRuleNoncurrentVersionTransition
-import Stratosphere.ResourceProperties.S3LifecycleRuleTransition
-
--- | Full data type definition for S3LifecycleRule. See 's3LifecycleRule' for
--- a more convenient constructor.
-data S3LifecycleRule =
-  S3LifecycleRule
-  { _s3LifecycleRuleExpirationDate :: Maybe (Val Text)
-  , _s3LifecycleRuleExpirationInDays :: Maybe (Val Integer')
-  , _s3LifecycleRuleId :: Maybe (Val Text)
-  , _s3LifecycleRuleNoncurrentVersionExpirationInDays :: Maybe (Val Integer')
-  , _s3LifecycleRuleNoncurrentVersionTransition :: Maybe S3LifecycleRuleNoncurrentVersionTransition
-  , _s3LifecycleRuleNoncurrentVersionTransitions :: Maybe [S3LifecycleRuleNoncurrentVersionTransition]
-  , _s3LifecycleRulePrefix :: Maybe (Val Text)
-  , _s3LifecycleRuleStatus :: Val Text
-  , _s3LifecycleRuleTransition :: Maybe S3LifecycleRuleTransition
-  , _s3LifecycleRuleTransitions :: Maybe [S3LifecycleRuleTransition]
-  } deriving (Show, Generic)
-
-instance ToJSON S3LifecycleRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
-
-instance FromJSON S3LifecycleRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
-
--- | Constructor for 'S3LifecycleRule' containing required fields as
--- arguments.
-s3LifecycleRule
-  :: Val Text -- ^ 'slrStatus'
-  -> S3LifecycleRule
-s3LifecycleRule statusarg =
-  S3LifecycleRule
-  { _s3LifecycleRuleExpirationDate = Nothing
-  , _s3LifecycleRuleExpirationInDays = Nothing
-  , _s3LifecycleRuleId = Nothing
-  , _s3LifecycleRuleNoncurrentVersionExpirationInDays = Nothing
-  , _s3LifecycleRuleNoncurrentVersionTransition = Nothing
-  , _s3LifecycleRuleNoncurrentVersionTransitions = Nothing
-  , _s3LifecycleRulePrefix = Nothing
-  , _s3LifecycleRuleStatus = statusarg
-  , _s3LifecycleRuleTransition = Nothing
-  , _s3LifecycleRuleTransitions = Nothing
-  }
-
--- | Indicates when objects are deleted from Amazon S3 and Amazon Glacier. The
--- date value must be in ISO 8601 format. The time is always midnight UTC. If
--- you specify an expiration and transition time, you must use the same time
--- unit for both properties (either in days or by date). The expiration time
--- must also be later than the transition time.
-slrExpirationDate :: Lens' S3LifecycleRule (Maybe (Val Text))
-slrExpirationDate = lens _s3LifecycleRuleExpirationDate (\s a -> s { _s3LifecycleRuleExpirationDate = a })
-
--- | Indicates the number of days after creation when objects are deleted from
--- Amazon S3 and Amazon Glacier. If you specify an expiration and transition
--- time, you must use the same time unit for both properties (either in days
--- or by date). The expiration time must also be later than the transition
--- time.
-slrExpirationInDays :: Lens' S3LifecycleRule (Maybe (Val Integer'))
-slrExpirationInDays = lens _s3LifecycleRuleExpirationInDays (\s a -> s { _s3LifecycleRuleExpirationInDays = a })
-
--- | A unique identifier for this rule. The value cannot be more than 255
--- characters.
-slrId :: Lens' S3LifecycleRule (Maybe (Val Text))
-slrId = lens _s3LifecycleRuleId (\s a -> s { _s3LifecycleRuleId = a })
-
--- | For buckets with versioning enabled (or suspended), specifies the time,
--- in days, between when a new version of the object is uploaded to the bucket
--- and when old versions of the object expire. When object versions expire,
--- Amazon S3 permanently deletes them. If you specify a transition and
--- expiration time, the expiration time must be later than the transition
--- time.
-slrNoncurrentVersionExpirationInDays :: Lens' S3LifecycleRule (Maybe (Val Integer'))
-slrNoncurrentVersionExpirationInDays = lens _s3LifecycleRuleNoncurrentVersionExpirationInDays (\s a -> s { _s3LifecycleRuleNoncurrentVersionExpirationInDays = a })
-
--- | For buckets with versioning enabled (or suspended), specifies when
--- non-current objects transition to a specified storage class. If you specify
--- a transition and expiration time, the expiration time must be later than
--- the transition time. If you specify this property, don't specify the
--- NoncurrentVersionTransitions property.
-slrNoncurrentVersionTransition :: Lens' S3LifecycleRule (Maybe S3LifecycleRuleNoncurrentVersionTransition)
-slrNoncurrentVersionTransition = lens _s3LifecycleRuleNoncurrentVersionTransition (\s a -> s { _s3LifecycleRuleNoncurrentVersionTransition = a })
-
--- | For buckets with versioning enabled (or suspended), one or more
--- transition rules that specify when non-current objects transition to a
--- specified storage class. If you specify a transition and expiration time,
--- the expiration time must be later than the transition time. If you specify
--- this property, don't specify the NoncurrentVersionTransition property.
-slrNoncurrentVersionTransitions :: Lens' S3LifecycleRule (Maybe [S3LifecycleRuleNoncurrentVersionTransition])
-slrNoncurrentVersionTransitions = lens _s3LifecycleRuleNoncurrentVersionTransitions (\s a -> s { _s3LifecycleRuleNoncurrentVersionTransitions = a })
-
--- | Object key prefix that identifies one or more objects to which this rule
--- applies.
-slrPrefix :: Lens' S3LifecycleRule (Maybe (Val Text))
-slrPrefix = lens _s3LifecycleRulePrefix (\s a -> s { _s3LifecycleRulePrefix = a })
-
--- | Specify either Enabled or Disabled. If you specify Enabled, Amazon S3
--- executes this rule as scheduled. If you specify Disabled, Amazon S3 ignores
--- this rule.
-slrStatus :: Lens' S3LifecycleRule (Val Text)
-slrStatus = lens _s3LifecycleRuleStatus (\s a -> s { _s3LifecycleRuleStatus = a })
-
--- | Specifies when an object transitions to a specified storage class. If you
--- specify an expiration and transition time, you must use the same time unit
--- for both properties (either in days or by date). The expiration time must
--- also be later than the transition time. If you specify this property, don't
--- specify the Transitions property.
-slrTransition :: Lens' S3LifecycleRule (Maybe S3LifecycleRuleTransition)
-slrTransition = lens _s3LifecycleRuleTransition (\s a -> s { _s3LifecycleRuleTransition = a })
-
--- | One or more transition rules that specify when an object transitions to a
--- specified storage class. If you specify an expiration and transition time,
--- you must use the same time unit for both properties (either in days or by
--- date). The expiration time must also be later than the transition time. If
--- you specify this property, don't specify the Transition property.
-slrTransitions :: Lens' S3LifecycleRule (Maybe [S3LifecycleRuleTransition])
-slrTransitions = lens _s3LifecycleRuleTransitions (\s a -> s { _s3LifecycleRuleTransitions = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3LifecycleRuleNoncurrentVersionTransition.hs b/library-gen/Stratosphere/ResourceProperties/S3LifecycleRuleNoncurrentVersionTransition.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3LifecycleRuleNoncurrentVersionTransition.hs
+++ /dev/null
@@ -1,56 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | NoncurrentVersionTransition is a property of the Amazon S3 Lifecycle Rule
--- property that describes when noncurrent objects transition to a specified
--- storage class.
-
-module Stratosphere.ResourceProperties.S3LifecycleRuleNoncurrentVersionTransition where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for S3LifecycleRuleNoncurrentVersionTransition.
--- See 's3LifecycleRuleNoncurrentVersionTransition' for a more convenient
--- constructor.
-data S3LifecycleRuleNoncurrentVersionTransition =
-  S3LifecycleRuleNoncurrentVersionTransition
-  { _s3LifecycleRuleNoncurrentVersionTransitionStorageClass :: Val Text
-  , _s3LifecycleRuleNoncurrentVersionTransitionTransitionInDays :: Val Integer'
-  } deriving (Show, Generic)
-
-instance ToJSON S3LifecycleRuleNoncurrentVersionTransition where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 43, omitNothingFields = True }
-
-instance FromJSON S3LifecycleRuleNoncurrentVersionTransition where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 43, omitNothingFields = True }
-
--- | Constructor for 'S3LifecycleRuleNoncurrentVersionTransition' containing
--- required fields as arguments.
-s3LifecycleRuleNoncurrentVersionTransition
-  :: Val Text -- ^ 'slrnvtStorageClass'
-  -> Val Integer' -- ^ 'slrnvtTransitionInDays'
-  -> S3LifecycleRuleNoncurrentVersionTransition
-s3LifecycleRuleNoncurrentVersionTransition storageClassarg transitionInDaysarg =
-  S3LifecycleRuleNoncurrentVersionTransition
-  { _s3LifecycleRuleNoncurrentVersionTransitionStorageClass = storageClassarg
-  , _s3LifecycleRuleNoncurrentVersionTransitionTransitionInDays = transitionInDaysarg
-  }
-
--- | The storage class to which you want the object to transition, such as
--- GLACIER. For valid values, see the StorageClass request element of the PUT
--- Bucket lifecycle action in the Amazon Simple Storage Service API Reference.
-slrnvtStorageClass :: Lens' S3LifecycleRuleNoncurrentVersionTransition (Val Text)
-slrnvtStorageClass = lens _s3LifecycleRuleNoncurrentVersionTransitionStorageClass (\s a -> s { _s3LifecycleRuleNoncurrentVersionTransitionStorageClass = a })
-
--- | The number of days between the time that a new version of the object is
--- uploaded to the bucket and when old versions of the object are transitioned
--- to the specified storage class.
-slrnvtTransitionInDays :: Lens' S3LifecycleRuleNoncurrentVersionTransition (Val Integer')
-slrnvtTransitionInDays = lens _s3LifecycleRuleNoncurrentVersionTransitionTransitionInDays (\s a -> s { _s3LifecycleRuleNoncurrentVersionTransitionTransitionInDays = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3LifecycleRuleTransition.hs b/library-gen/Stratosphere/ResourceProperties/S3LifecycleRuleTransition.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3LifecycleRuleTransition.hs
+++ /dev/null
@@ -1,59 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Describes when an object transitions to a specified storage class for the
--- Amazon S3 Lifecycle Rule property.
-
-module Stratosphere.ResourceProperties.S3LifecycleRuleTransition where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for S3LifecycleRuleTransition. See
--- 's3LifecycleRuleTransition' for a more convenient constructor.
-data S3LifecycleRuleTransition =
-  S3LifecycleRuleTransition
-  { _s3LifecycleRuleTransitionStorageClass :: Val Text
-  , _s3LifecycleRuleTransitionTransitionDate :: Maybe (Val Text)
-  , _s3LifecycleRuleTransitionTransitionInDays :: Maybe (Val Integer')
-  } deriving (Show, Generic)
-
-instance ToJSON S3LifecycleRuleTransition where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
-
-instance FromJSON S3LifecycleRuleTransition where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
-
--- | Constructor for 'S3LifecycleRuleTransition' containing required fields as
--- arguments.
-s3LifecycleRuleTransition
-  :: Val Text -- ^ 'slrtStorageClass'
-  -> S3LifecycleRuleTransition
-s3LifecycleRuleTransition storageClassarg =
-  S3LifecycleRuleTransition
-  { _s3LifecycleRuleTransitionStorageClass = storageClassarg
-  , _s3LifecycleRuleTransitionTransitionDate = Nothing
-  , _s3LifecycleRuleTransitionTransitionInDays = Nothing
-  }
-
--- | The storage class to which you want the object to transition, such as
--- GLACIER. For valid values, see the StorageClass request element of the PUT
--- Bucket lifecycle action in the Amazon Simple Storage Service API Reference.
-slrtStorageClass :: Lens' S3LifecycleRuleTransition (Val Text)
-slrtStorageClass = lens _s3LifecycleRuleTransitionStorageClass (\s a -> s { _s3LifecycleRuleTransitionStorageClass = a })
-
--- | Indicates when objects are transitioned to the specified storage class.
--- The date value must be in ISO 8601 format. The time is always midnight UTC.
-slrtTransitionDate :: Lens' S3LifecycleRuleTransition (Maybe (Val Text))
-slrtTransitionDate = lens _s3LifecycleRuleTransitionTransitionDate (\s a -> s { _s3LifecycleRuleTransitionTransitionDate = a })
-
--- | Indicates the number of days after creation when objects are transitioned
--- to the specified storage class.
-slrtTransitionInDays :: Lens' S3LifecycleRuleTransition (Maybe (Val Integer'))
-slrtTransitionInDays = lens _s3LifecycleRuleTransitionTransitionInDays (\s a -> s { _s3LifecycleRuleTransitionTransitionInDays = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3LoggingConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3LoggingConfiguration.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3LoggingConfiguration.hs
+++ /dev/null
@@ -1,55 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Describes where logs are stored and the prefix that Amazon S3 assigns to
--- all log object keys for an AWS::S3::Bucket resource. These logs track
--- requests to an Amazon S3 bucket. For more information, see PUT Bucket
--- logging in the Amazon Simple Storage Service API Reference.
-
-module Stratosphere.ResourceProperties.S3LoggingConfiguration where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for S3LoggingConfiguration. See
--- 's3LoggingConfiguration' for a more convenient constructor.
-data S3LoggingConfiguration =
-  S3LoggingConfiguration
-  { _s3LoggingConfigurationDestinationBucketName :: Maybe (Val Text)
-  , _s3LoggingConfigurationLogFilePrefix :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON S3LoggingConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
-
-instance FromJSON S3LoggingConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
-
--- | Constructor for 'S3LoggingConfiguration' containing required fields as
--- arguments.
-s3LoggingConfiguration
-  :: S3LoggingConfiguration
-s3LoggingConfiguration  =
-  S3LoggingConfiguration
-  { _s3LoggingConfigurationDestinationBucketName = Nothing
-  , _s3LoggingConfigurationLogFilePrefix = Nothing
-  }
-
--- | The name of an Amazon S3 bucket where Amazon S3 store server access log
--- files. You can store log files in any bucket that you own. By default, logs
--- are stored in the bucket where the LoggingConfiguration property is
--- defined.
-slcDestinationBucketName :: Lens' S3LoggingConfiguration (Maybe (Val Text))
-slcDestinationBucketName = lens _s3LoggingConfigurationDestinationBucketName (\s a -> s { _s3LoggingConfigurationDestinationBucketName = a })
-
--- | A prefix for the all log object keys. If you store log files from
--- multiple Amazon S3 buckets in a single bucket, you can use a prefix to
--- distinguish which log files came from which bucket.
-slcLogFilePrefix :: Lens' S3LoggingConfiguration (Maybe (Val Text))
-slcLogFilePrefix = lens _s3LoggingConfigurationLogFilePrefix (\s a -> s { _s3LoggingConfigurationLogFilePrefix = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3NotificationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3NotificationConfiguration.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3NotificationConfiguration.hs
+++ /dev/null
@@ -1,58 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Describes the notification configuration for an AWS::S3::Bucket resource.
-
-module Stratosphere.ResourceProperties.S3NotificationConfiguration where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.S3NotificationConfigurationLambdaConfiguration
-import Stratosphere.ResourceProperties.S3NotificationConfigurationQueueConfiguration
-import Stratosphere.ResourceProperties.S3NotificationConfigurationTopicConfiguration
-
--- | Full data type definition for S3NotificationConfiguration. See
--- 's3NotificationConfiguration' for a more convenient constructor.
-data S3NotificationConfiguration =
-  S3NotificationConfiguration
-  { _s3NotificationConfigurationLambdaConfigurations :: Maybe [S3NotificationConfigurationLambdaConfiguration]
-  , _s3NotificationConfigurationQueueConfigurations :: Maybe [S3NotificationConfigurationQueueConfiguration]
-  , _s3NotificationConfigurationTopicConfigurations :: Maybe [S3NotificationConfigurationTopicConfiguration]
-  } deriving (Show, Generic)
-
-instance ToJSON S3NotificationConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
-
-instance FromJSON S3NotificationConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
-
--- | Constructor for 'S3NotificationConfiguration' containing required fields
--- as arguments.
-s3NotificationConfiguration
-  :: S3NotificationConfiguration
-s3NotificationConfiguration  =
-  S3NotificationConfiguration
-  { _s3NotificationConfigurationLambdaConfigurations = Nothing
-  , _s3NotificationConfigurationQueueConfigurations = Nothing
-  , _s3NotificationConfigurationTopicConfigurations = Nothing
-  }
-
--- | The AWS Lambda functions to invoke and the events for which to invoke the
--- functions.
-sncLambdaConfigurations :: Lens' S3NotificationConfiguration (Maybe [S3NotificationConfigurationLambdaConfiguration])
-sncLambdaConfigurations = lens _s3NotificationConfigurationLambdaConfigurations (\s a -> s { _s3NotificationConfigurationLambdaConfigurations = a })
-
--- | The Amazon Simple Queue Service queues to publish messages to and the
--- events for which to publish messages.
-sncQueueConfigurations :: Lens' S3NotificationConfiguration (Maybe [S3NotificationConfigurationQueueConfiguration])
-sncQueueConfigurations = lens _s3NotificationConfigurationQueueConfigurations (\s a -> s { _s3NotificationConfigurationQueueConfigurations = a })
-
--- | The topic to which notifications are sent and the events for which
--- notification are generated.
-sncTopicConfigurations :: Lens' S3NotificationConfiguration (Maybe [S3NotificationConfigurationTopicConfiguration])
-sncTopicConfigurations = lens _s3NotificationConfigurationTopicConfigurations (\s a -> s { _s3NotificationConfigurationTopicConfigurations = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationConfigFilter.hs b/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationConfigFilter.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationConfigFilter.hs
+++ /dev/null
@@ -1,47 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Filter is a property of the LambdaConfigurations, QueueConfigurations,
--- and TopicConfigurations properties that describes the filtering rules that
--- determine the Amazon Simple Storage Service (Amazon S3) objects for which
--- to send notifications.
-
-module Stratosphere.ResourceProperties.S3NotificationConfigurationConfigFilter where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.S3NotificationConfigurationConfigFilterS3Key
-
--- | Full data type definition for S3NotificationConfigurationConfigFilter.
--- See 's3NotificationConfigurationConfigFilter' for a more convenient
--- constructor.
-data S3NotificationConfigurationConfigFilter =
-  S3NotificationConfigurationConfigFilter
-  { _s3NotificationConfigurationConfigFilterS3Key :: S3NotificationConfigurationConfigFilterS3Key
-  } deriving (Show, Generic)
-
-instance ToJSON S3NotificationConfigurationConfigFilter where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 40, omitNothingFields = True }
-
-instance FromJSON S3NotificationConfigurationConfigFilter where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 40, omitNothingFields = True }
-
--- | Constructor for 'S3NotificationConfigurationConfigFilter' containing
--- required fields as arguments.
-s3NotificationConfigurationConfigFilter
-  :: S3NotificationConfigurationConfigFilterS3Key -- ^ 'snccfS3Key'
-  -> S3NotificationConfigurationConfigFilter
-s3NotificationConfigurationConfigFilter s3Keyarg =
-  S3NotificationConfigurationConfigFilter
-  { _s3NotificationConfigurationConfigFilterS3Key = s3Keyarg
-  }
-
--- | Amazon S3 filtering rules that describe for which object key names to
--- send notifications.
-snccfS3Key :: Lens' S3NotificationConfigurationConfigFilter S3NotificationConfigurationConfigFilterS3Key
-snccfS3Key = lens _s3NotificationConfigurationConfigFilterS3Key (\s a -> s { _s3NotificationConfigurationConfigFilterS3Key = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationConfigFilterS3Key.hs b/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationConfigFilterS3Key.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationConfigFilterS3Key.hs
+++ /dev/null
@@ -1,47 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | S3Key is a property of the Amazon S3 NotificationConfiguration Config
--- Filter property that specifies the key names of Amazon Simple Storage
--- Service (Amazon S3) objects for which to send notifications.
-
-module Stratosphere.ResourceProperties.S3NotificationConfigurationConfigFilterS3Key where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.S3NotificationConfigurationConfigFilterS3KeyRules
-
--- | Full data type definition for
--- S3NotificationConfigurationConfigFilterS3Key. See
--- 's3NotificationConfigurationConfigFilterS3Key' for a more convenient
--- constructor.
-data S3NotificationConfigurationConfigFilterS3Key =
-  S3NotificationConfigurationConfigFilterS3Key
-  { _s3NotificationConfigurationConfigFilterS3KeyRules :: [S3NotificationConfigurationConfigFilterS3KeyRules]
-  } deriving (Show, Generic)
-
-instance ToJSON S3NotificationConfigurationConfigFilterS3Key where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 45, omitNothingFields = True }
-
-instance FromJSON S3NotificationConfigurationConfigFilterS3Key where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 45, omitNothingFields = True }
-
--- | Constructor for 'S3NotificationConfigurationConfigFilterS3Key' containing
--- required fields as arguments.
-s3NotificationConfigurationConfigFilterS3Key
-  :: [S3NotificationConfigurationConfigFilterS3KeyRules] -- ^ 'snccfskRules'
-  -> S3NotificationConfigurationConfigFilterS3Key
-s3NotificationConfigurationConfigFilterS3Key rulesarg =
-  S3NotificationConfigurationConfigFilterS3Key
-  { _s3NotificationConfigurationConfigFilterS3KeyRules = rulesarg
-  }
-
--- | The object key name to filter on and whether to filter on the suffix or
--- prefix of the key name.
-snccfskRules :: Lens' S3NotificationConfigurationConfigFilterS3Key [S3NotificationConfigurationConfigFilterS3KeyRules]
-snccfskRules = lens _s3NotificationConfigurationConfigFilterS3KeyRules (\s a -> s { _s3NotificationConfigurationConfigFilterS3KeyRules = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationConfigFilterS3KeyRules.hs b/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationConfigFilterS3KeyRules.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationConfigFilterS3KeyRules.hs
+++ /dev/null
@@ -1,56 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Rules is a property of the Amazon S3 NotificationConfiguration Config
--- Filter S3Key property that describes the Amazon Simple Storage Service
--- (Amazon S3) object key name to filter on and whether to filter on the
--- suffix or prefix of the key name.
-
-module Stratosphere.ResourceProperties.S3NotificationConfigurationConfigFilterS3KeyRules where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for
--- S3NotificationConfigurationConfigFilterS3KeyRules. See
--- 's3NotificationConfigurationConfigFilterS3KeyRules' for a more convenient
--- constructor.
-data S3NotificationConfigurationConfigFilterS3KeyRules =
-  S3NotificationConfigurationConfigFilterS3KeyRules
-  { _s3NotificationConfigurationConfigFilterS3KeyRulesName :: Val Text
-  , _s3NotificationConfigurationConfigFilterS3KeyRulesValue :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON S3NotificationConfigurationConfigFilterS3KeyRules where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 50, omitNothingFields = True }
-
-instance FromJSON S3NotificationConfigurationConfigFilterS3KeyRules where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 50, omitNothingFields = True }
-
--- | Constructor for 'S3NotificationConfigurationConfigFilterS3KeyRules'
--- containing required fields as arguments.
-s3NotificationConfigurationConfigFilterS3KeyRules
-  :: Val Text -- ^ 'snccfskrName'
-  -> Val Text -- ^ 'snccfskrValue'
-  -> S3NotificationConfigurationConfigFilterS3KeyRules
-s3NotificationConfigurationConfigFilterS3KeyRules namearg valuearg =
-  S3NotificationConfigurationConfigFilterS3KeyRules
-  { _s3NotificationConfigurationConfigFilterS3KeyRulesName = namearg
-  , _s3NotificationConfigurationConfigFilterS3KeyRulesValue = valuearg
-  }
-
--- | Whether the filter matches the prefix or suffix of object key names. For
--- valid values, see the Name request element of the PUT Bucket notification
--- action in the Amazon Simple Storage Service API Reference.
-snccfskrName :: Lens' S3NotificationConfigurationConfigFilterS3KeyRules (Val Text)
-snccfskrName = lens _s3NotificationConfigurationConfigFilterS3KeyRulesName (\s a -> s { _s3NotificationConfigurationConfigFilterS3KeyRulesName = a })
-
--- | The value that the filter searches for in object key names.
-snccfskrValue :: Lens' S3NotificationConfigurationConfigFilterS3KeyRules (Val Text)
-snccfskrValue = lens _s3NotificationConfigurationConfigFilterS3KeyRulesValue (\s a -> s { _s3NotificationConfigurationConfigFilterS3KeyRulesValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationLambdaConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationLambdaConfiguration.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationLambdaConfiguration.hs
+++ /dev/null
@@ -1,65 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | LambdaConfigurations is a property of the Amazon S3
--- NotificationConfiguration property that describes the AWS Lambda (Lambda)
--- functions to invoke and the events for which to invoke them.
-
-module Stratosphere.ResourceProperties.S3NotificationConfigurationLambdaConfiguration where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.S3NotificationConfigurationConfigFilter
-
--- | Full data type definition for
--- S3NotificationConfigurationLambdaConfiguration. See
--- 's3NotificationConfigurationLambdaConfiguration' for a more convenient
--- constructor.
-data S3NotificationConfigurationLambdaConfiguration =
-  S3NotificationConfigurationLambdaConfiguration
-  { _s3NotificationConfigurationLambdaConfigurationEvent :: Val Text
-  , _s3NotificationConfigurationLambdaConfigurationFilter :: Maybe S3NotificationConfigurationConfigFilter
-  , _s3NotificationConfigurationLambdaConfigurationFunction :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON S3NotificationConfigurationLambdaConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 47, omitNothingFields = True }
-
-instance FromJSON S3NotificationConfigurationLambdaConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 47, omitNothingFields = True }
-
--- | Constructor for 'S3NotificationConfigurationLambdaConfiguration'
--- containing required fields as arguments.
-s3NotificationConfigurationLambdaConfiguration
-  :: Val Text -- ^ 'snclcEvent'
-  -> Val Text -- ^ 'snclcFunction'
-  -> S3NotificationConfigurationLambdaConfiguration
-s3NotificationConfigurationLambdaConfiguration eventarg functionarg =
-  S3NotificationConfigurationLambdaConfiguration
-  { _s3NotificationConfigurationLambdaConfigurationEvent = eventarg
-  , _s3NotificationConfigurationLambdaConfigurationFilter = Nothing
-  , _s3NotificationConfigurationLambdaConfigurationFunction = functionarg
-  }
-
--- | The S3 bucket event for which to invoke the Lambda function. For more
--- information, see Supported Event Types in the Amazon Simple Storage Service
--- Developer Guide.
-snclcEvent :: Lens' S3NotificationConfigurationLambdaConfiguration (Val Text)
-snclcEvent = lens _s3NotificationConfigurationLambdaConfigurationEvent (\s a -> s { _s3NotificationConfigurationLambdaConfigurationEvent = a })
-
--- | The filtering rules that determine which objects invoke the Lambda
--- function. For example, you can create a filter so that only image files
--- with a .jpg extension invoke the function when they are added to the S3
--- bucket.
-snclcFilter :: Lens' S3NotificationConfigurationLambdaConfiguration (Maybe S3NotificationConfigurationConfigFilter)
-snclcFilter = lens _s3NotificationConfigurationLambdaConfigurationFilter (\s a -> s { _s3NotificationConfigurationLambdaConfigurationFilter = a })
-
--- | The Amazon Resource Name (ARN) of the Lambda function that Amazon S3
--- invokes when the specified event type occurs.
-snclcFunction :: Lens' S3NotificationConfigurationLambdaConfiguration (Val Text)
-snclcFunction = lens _s3NotificationConfigurationLambdaConfigurationFunction (\s a -> s { _s3NotificationConfigurationLambdaConfigurationFunction = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationQueueConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationQueueConfiguration.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationQueueConfiguration.hs
+++ /dev/null
@@ -1,66 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | QueueConfigurations is a property of the Amazon S3
--- NotificationConfiguration property that describes the S3 bucket events
--- about which you want to send messages to Amazon SQS and the queues to which
--- you want to send them.
-
-module Stratosphere.ResourceProperties.S3NotificationConfigurationQueueConfiguration where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.S3NotificationConfigurationConfigFilter
-
--- | Full data type definition for
--- S3NotificationConfigurationQueueConfiguration. See
--- 's3NotificationConfigurationQueueConfiguration' for a more convenient
--- constructor.
-data S3NotificationConfigurationQueueConfiguration =
-  S3NotificationConfigurationQueueConfiguration
-  { _s3NotificationConfigurationQueueConfigurationEvent :: Val Text
-  , _s3NotificationConfigurationQueueConfigurationFilter :: Maybe S3NotificationConfigurationConfigFilter
-  , _s3NotificationConfigurationQueueConfigurationQueue :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON S3NotificationConfigurationQueueConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 46, omitNothingFields = True }
-
-instance FromJSON S3NotificationConfigurationQueueConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 46, omitNothingFields = True }
-
--- | Constructor for 'S3NotificationConfigurationQueueConfiguration'
--- containing required fields as arguments.
-s3NotificationConfigurationQueueConfiguration
-  :: Val Text -- ^ 'sncqcEvent'
-  -> Val Text -- ^ 'sncqcQueue'
-  -> S3NotificationConfigurationQueueConfiguration
-s3NotificationConfigurationQueueConfiguration eventarg queuearg =
-  S3NotificationConfigurationQueueConfiguration
-  { _s3NotificationConfigurationQueueConfigurationEvent = eventarg
-  , _s3NotificationConfigurationQueueConfigurationFilter = Nothing
-  , _s3NotificationConfigurationQueueConfigurationQueue = queuearg
-  }
-
--- | The S3 bucket event about which you want to publish messages to Amazon
--- Simple Queue Service ( Amazon SQS). For more information, see Supported
--- Event Types in the Amazon Simple Storage Service Developer Guide.
-sncqcEvent :: Lens' S3NotificationConfigurationQueueConfiguration (Val Text)
-sncqcEvent = lens _s3NotificationConfigurationQueueConfigurationEvent (\s a -> s { _s3NotificationConfigurationQueueConfigurationEvent = a })
-
--- | The filtering rules that determine for which objects to send
--- notifications. For example, you can create a filter so that Amazon Simple
--- Storage Service (Amazon S3) sends notifications only when image files with
--- a .jpg extension are added to the bucket.
-sncqcFilter :: Lens' S3NotificationConfigurationQueueConfiguration (Maybe S3NotificationConfigurationConfigFilter)
-sncqcFilter = lens _s3NotificationConfigurationQueueConfigurationFilter (\s a -> s { _s3NotificationConfigurationQueueConfigurationFilter = a })
-
--- | The Amazon Resource Name (ARN) of the Amazon SQS queue that Amazon S3
--- publishes messages to when the specified event type occurs.
-sncqcQueue :: Lens' S3NotificationConfigurationQueueConfiguration (Val Text)
-sncqcQueue = lens _s3NotificationConfigurationQueueConfigurationQueue (\s a -> s { _s3NotificationConfigurationQueueConfigurationQueue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationTopicConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationTopicConfiguration.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3NotificationConfigurationTopicConfiguration.hs
+++ /dev/null
@@ -1,64 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Describes the topic and events for the Amazon S3
--- NotificationConfiguration property.
-
-module Stratosphere.ResourceProperties.S3NotificationConfigurationTopicConfiguration where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.S3NotificationConfigurationConfigFilter
-
--- | Full data type definition for
--- S3NotificationConfigurationTopicConfiguration. See
--- 's3NotificationConfigurationTopicConfiguration' for a more convenient
--- constructor.
-data S3NotificationConfigurationTopicConfiguration =
-  S3NotificationConfigurationTopicConfiguration
-  { _s3NotificationConfigurationTopicConfigurationEvent :: Val Text
-  , _s3NotificationConfigurationTopicConfigurationFilter :: Maybe S3NotificationConfigurationConfigFilter
-  , _s3NotificationConfigurationTopicConfigurationTopic :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON S3NotificationConfigurationTopicConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 46, omitNothingFields = True }
-
-instance FromJSON S3NotificationConfigurationTopicConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 46, omitNothingFields = True }
-
--- | Constructor for 'S3NotificationConfigurationTopicConfiguration'
--- containing required fields as arguments.
-s3NotificationConfigurationTopicConfiguration
-  :: Val Text -- ^ 'snctcEvent'
-  -> Val Text -- ^ 'snctcTopic'
-  -> S3NotificationConfigurationTopicConfiguration
-s3NotificationConfigurationTopicConfiguration eventarg topicarg =
-  S3NotificationConfigurationTopicConfiguration
-  { _s3NotificationConfigurationTopicConfigurationEvent = eventarg
-  , _s3NotificationConfigurationTopicConfigurationFilter = Nothing
-  , _s3NotificationConfigurationTopicConfigurationTopic = topicarg
-  }
-
--- | The Amazon Simple Storage Service (Amazon S3) bucket event about which to
--- send notifications. For more information, see Supported Event Types in the
--- Amazon Simple Storage Service Developer Guide.
-snctcEvent :: Lens' S3NotificationConfigurationTopicConfiguration (Val Text)
-snctcEvent = lens _s3NotificationConfigurationTopicConfigurationEvent (\s a -> s { _s3NotificationConfigurationTopicConfigurationEvent = a })
-
--- | The filtering rules that determine for which objects to send
--- notifications. For example, you can create a filter so that Amazon Simple
--- Storage Service (Amazon S3) sends notifications only when image files with
--- a .jpg extension are added to the bucket.
-snctcFilter :: Lens' S3NotificationConfigurationTopicConfiguration (Maybe S3NotificationConfigurationConfigFilter)
-snctcFilter = lens _s3NotificationConfigurationTopicConfigurationFilter (\s a -> s { _s3NotificationConfigurationTopicConfigurationFilter = a })
-
--- | The Amazon SNS topic Amazon Resource Name (ARN) to which Amazon S3
--- reports the specified events.
-snctcTopic :: Lens' S3NotificationConfigurationTopicConfiguration (Val Text)
-snctcTopic = lens _s3NotificationConfigurationTopicConfigurationTopic (\s a -> s { _s3NotificationConfigurationTopicConfigurationTopic = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3ReplicationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3ReplicationConfiguration.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3ReplicationConfiguration.hs
+++ /dev/null
@@ -1,56 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | ReplicationConfiguration is a property of the AWS::S3::Bucket resource
--- that specifies replication rules and the AWS Identity and Access Management
--- (IAM) role Amazon Simple Storage Service (Amazon S3) uses to replicate
--- objects.
-
-module Stratosphere.ResourceProperties.S3ReplicationConfiguration where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.S3ReplicationConfigurationRule
-
--- | Full data type definition for S3ReplicationConfiguration. See
--- 's3ReplicationConfiguration' for a more convenient constructor.
-data S3ReplicationConfiguration =
-  S3ReplicationConfiguration
-  { _s3ReplicationConfigurationRole :: Val Text
-  , _s3ReplicationConfigurationRules :: [S3ReplicationConfigurationRule]
-  } deriving (Show, Generic)
-
-instance ToJSON S3ReplicationConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
-
-instance FromJSON S3ReplicationConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
-
--- | Constructor for 'S3ReplicationConfiguration' containing required fields
--- as arguments.
-s3ReplicationConfiguration
-  :: Val Text -- ^ 'srcRole'
-  -> [S3ReplicationConfigurationRule] -- ^ 'srcRules'
-  -> S3ReplicationConfiguration
-s3ReplicationConfiguration rolearg rulesarg =
-  S3ReplicationConfiguration
-  { _s3ReplicationConfigurationRole = rolearg
-  , _s3ReplicationConfigurationRules = rulesarg
-  }
-
--- | The Amazon Resource Name (ARN) of an AWS Identity and Access Management
--- (IAM) role that Amazon S3 assumes when replicating objects. For more
--- information, see How to Set Up Cross-Region Replication in the Amazon
--- Simple Storage Service Developer Guide.
-srcRole :: Lens' S3ReplicationConfiguration (Val Text)
-srcRole = lens _s3ReplicationConfigurationRole (\s a -> s { _s3ReplicationConfigurationRole = a })
-
--- | A replication rule that specifies which objects to replicate and where
--- they are stored.
-srcRules :: Lens' S3ReplicationConfiguration [S3ReplicationConfigurationRule]
-srcRules = lens _s3ReplicationConfigurationRules (\s a -> s { _s3ReplicationConfigurationRules = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3ReplicationConfigurationRule.hs b/library-gen/Stratosphere/ResourceProperties/S3ReplicationConfigurationRule.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3ReplicationConfigurationRule.hs
+++ /dev/null
@@ -1,68 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Rules is a property of the Amazon S3 ReplicationConfiguration property
--- that specifies which Amazon Simple Storage Service (Amazon S3) objects to
--- replicate and where to store them.
-
-module Stratosphere.ResourceProperties.S3ReplicationConfigurationRule where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.S3ReplicationConfigurationRulesDestination
-
--- | Full data type definition for S3ReplicationConfigurationRule. See
--- 's3ReplicationConfigurationRule' for a more convenient constructor.
-data S3ReplicationConfigurationRule =
-  S3ReplicationConfigurationRule
-  { _s3ReplicationConfigurationRuleDestination :: S3ReplicationConfigurationRulesDestination
-  , _s3ReplicationConfigurationRuleId :: Maybe (Val Text)
-  , _s3ReplicationConfigurationRulePrefix :: Val Text
-  , _s3ReplicationConfigurationRuleStatus :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON S3ReplicationConfigurationRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
-
-instance FromJSON S3ReplicationConfigurationRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
-
--- | Constructor for 'S3ReplicationConfigurationRule' containing required
--- fields as arguments.
-s3ReplicationConfigurationRule
-  :: S3ReplicationConfigurationRulesDestination -- ^ 'srcrDestination'
-  -> Val Text -- ^ 'srcrPrefix'
-  -> Val Text -- ^ 'srcrStatus'
-  -> S3ReplicationConfigurationRule
-s3ReplicationConfigurationRule destinationarg prefixarg statusarg =
-  S3ReplicationConfigurationRule
-  { _s3ReplicationConfigurationRuleDestination = destinationarg
-  , _s3ReplicationConfigurationRuleId = Nothing
-  , _s3ReplicationConfigurationRulePrefix = prefixarg
-  , _s3ReplicationConfigurationRuleStatus = statusarg
-  }
-
--- | Defines the destination where Amazon S3 stores replicated objects.
-srcrDestination :: Lens' S3ReplicationConfigurationRule S3ReplicationConfigurationRulesDestination
-srcrDestination = lens _s3ReplicationConfigurationRuleDestination (\s a -> s { _s3ReplicationConfigurationRuleDestination = a })
-
--- | A unique identifier for the rule. If you don't specify a value, AWS
--- CloudFormation generates a random ID.
-srcrId :: Lens' S3ReplicationConfigurationRule (Maybe (Val Text))
-srcrId = lens _s3ReplicationConfigurationRuleId (\s a -> s { _s3ReplicationConfigurationRuleId = a })
-
--- | An object prefix. This rule applies to all Amazon S3 objects with this
--- prefix. To specify all objects in an S3 bucket, specify an empty string.
-srcrPrefix :: Lens' S3ReplicationConfigurationRule (Val Text)
-srcrPrefix = lens _s3ReplicationConfigurationRulePrefix (\s a -> s { _s3ReplicationConfigurationRulePrefix = a })
-
--- | Whether the rule is enabled. For valid values, see the Status element of
--- the PUT Bucket replication action in the Amazon Simple Storage Service API
--- Reference.
-srcrStatus :: Lens' S3ReplicationConfigurationRule (Val Text)
-srcrStatus = lens _s3ReplicationConfigurationRuleStatus (\s a -> s { _s3ReplicationConfigurationRuleStatus = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3ReplicationConfigurationRulesDestination.hs b/library-gen/Stratosphere/ResourceProperties/S3ReplicationConfigurationRulesDestination.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3ReplicationConfigurationRulesDestination.hs
+++ /dev/null
@@ -1,58 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Destination is a property of the Amazon S3 ReplicationConfiguration Rules
--- property that specifies which Amazon Simple Storage Service (Amazon S3)
--- bucket to store replicated objects and their storage class.
-
-module Stratosphere.ResourceProperties.S3ReplicationConfigurationRulesDestination where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for S3ReplicationConfigurationRulesDestination.
--- See 's3ReplicationConfigurationRulesDestination' for a more convenient
--- constructor.
-data S3ReplicationConfigurationRulesDestination =
-  S3ReplicationConfigurationRulesDestination
-  { _s3ReplicationConfigurationRulesDestinationBucket :: Val Text
-  , _s3ReplicationConfigurationRulesDestinationStorageClass :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON S3ReplicationConfigurationRulesDestination where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 43, omitNothingFields = True }
-
-instance FromJSON S3ReplicationConfigurationRulesDestination where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 43, omitNothingFields = True }
-
--- | Constructor for 'S3ReplicationConfigurationRulesDestination' containing
--- required fields as arguments.
-s3ReplicationConfigurationRulesDestination
-  :: Val Text -- ^ 'srcrdBucket'
-  -> S3ReplicationConfigurationRulesDestination
-s3ReplicationConfigurationRulesDestination bucketarg =
-  S3ReplicationConfigurationRulesDestination
-  { _s3ReplicationConfigurationRulesDestinationBucket = bucketarg
-  , _s3ReplicationConfigurationRulesDestinationStorageClass = Nothing
-  }
-
--- | The Amazon resource name (ARN) of an S3 bucket where Amazon S3 stores
--- replicated objects. This destination bucket must be in a different region
--- than your source bucket. If you have multiple rules in your replication
--- configuration, specify the same destination bucket for all of the rules.
-srcrdBucket :: Lens' S3ReplicationConfigurationRulesDestination (Val Text)
-srcrdBucket = lens _s3ReplicationConfigurationRulesDestinationBucket (\s a -> s { _s3ReplicationConfigurationRulesDestinationBucket = a })
-
--- | The storage class to use when replicating objects, such as standard or
--- reduced redundancy. By default, Amazon S3 uses the storage class of the
--- source object to create object replica. For valid values, see the
--- StorageClass element of the PUT Bucket replication action in the Amazon
--- Simple Storage Service API Reference.
-srcrdStorageClass :: Lens' S3ReplicationConfigurationRulesDestination (Maybe (Val Text))
-srcrdStorageClass = lens _s3ReplicationConfigurationRulesDestinationStorageClass (\s a -> s { _s3ReplicationConfigurationRulesDestinationStorageClass = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3VersioningConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3VersioningConfiguration.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3VersioningConfiguration.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Describes the versioning state of an AWS::S3::Bucket resource. For more
--- information, see PUT Bucket versioning in the Amazon Simple Storage Service
--- API Reference.
-
-module Stratosphere.ResourceProperties.S3VersioningConfiguration where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for S3VersioningConfiguration. See
--- 's3VersioningConfiguration' for a more convenient constructor.
-data S3VersioningConfiguration =
-  S3VersioningConfiguration
-  { _s3VersioningConfigurationStatus :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON S3VersioningConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
-
-instance FromJSON S3VersioningConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
-
--- | Constructor for 'S3VersioningConfiguration' containing required fields as
--- arguments.
-s3VersioningConfiguration
-  :: Val Text -- ^ 'svcStatus'
-  -> S3VersioningConfiguration
-s3VersioningConfiguration statusarg =
-  S3VersioningConfiguration
-  { _s3VersioningConfigurationStatus = statusarg
-  }
-
--- | The versioning state of an Amazon S3 bucket. If you enable versioning,
--- you must suspend versioning to disable it.
-svcStatus :: Lens' S3VersioningConfiguration (Val Text)
-svcStatus = lens _s3VersioningConfigurationStatus (\s a -> s { _s3VersioningConfigurationStatus = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3WebsiteConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/S3WebsiteConfiguration.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3WebsiteConfiguration.hs
+++ /dev/null
@@ -1,64 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | WebsiteConfiguration is an embedded property of the AWS::S3::Bucket
--- resource.
-
-module Stratosphere.ResourceProperties.S3WebsiteConfiguration where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.S3WebsiteRedirectAllRequestsTo
-import Stratosphere.ResourceProperties.S3WebsiteRoutingRules
-
--- | Full data type definition for S3WebsiteConfiguration. See
--- 's3WebsiteConfiguration' for a more convenient constructor.
-data S3WebsiteConfiguration =
-  S3WebsiteConfiguration
-  { _s3WebsiteConfigurationErrorDocument :: Maybe (Val Text)
-  , _s3WebsiteConfigurationIndexDocument :: Val Text
-  , _s3WebsiteConfigurationRedirectAllRequestsTo :: Maybe S3WebsiteRedirectAllRequestsTo
-  , _s3WebsiteConfigurationRoutingRules :: Maybe S3WebsiteRoutingRules
-  } deriving (Show, Generic)
-
-instance ToJSON S3WebsiteConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
-
-instance FromJSON S3WebsiteConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
-
--- | Constructor for 'S3WebsiteConfiguration' containing required fields as
--- arguments.
-s3WebsiteConfiguration
-  :: Val Text -- ^ 'swcIndexDocument'
-  -> S3WebsiteConfiguration
-s3WebsiteConfiguration indexDocumentarg =
-  S3WebsiteConfiguration
-  { _s3WebsiteConfigurationErrorDocument = Nothing
-  , _s3WebsiteConfigurationIndexDocument = indexDocumentarg
-  , _s3WebsiteConfigurationRedirectAllRequestsTo = Nothing
-  , _s3WebsiteConfigurationRoutingRules = Nothing
-  }
-
--- | The name of the error document for the website.
-swcErrorDocument :: Lens' S3WebsiteConfiguration (Maybe (Val Text))
-swcErrorDocument = lens _s3WebsiteConfigurationErrorDocument (\s a -> s { _s3WebsiteConfigurationErrorDocument = a })
-
--- | The name of the index document for the website.
-swcIndexDocument :: Lens' S3WebsiteConfiguration (Val Text)
-swcIndexDocument = lens _s3WebsiteConfigurationIndexDocument (\s a -> s { _s3WebsiteConfigurationIndexDocument = a })
-
--- | The redirect behavior for every request to this bucket's website
--- endpoint. Important If you specify this property, you cannot specify any
--- other property.
-swcRedirectAllRequestsTo :: Lens' S3WebsiteConfiguration (Maybe S3WebsiteRedirectAllRequestsTo)
-swcRedirectAllRequestsTo = lens _s3WebsiteConfigurationRedirectAllRequestsTo (\s a -> s { _s3WebsiteConfigurationRedirectAllRequestsTo = a })
-
--- | Rules that define when a redirect is applied and the redirect behavior.
-swcRoutingRules :: Lens' S3WebsiteConfiguration (Maybe S3WebsiteRoutingRules)
-swcRoutingRules = lens _s3WebsiteConfigurationRoutingRules (\s a -> s { _s3WebsiteConfigurationRoutingRules = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3WebsiteRedirectAllRequestsTo.hs b/library-gen/Stratosphere/ResourceProperties/S3WebsiteRedirectAllRequestsTo.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3WebsiteRedirectAllRequestsTo.hs
+++ /dev/null
@@ -1,51 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The RedirectAllRequestsTo code is an embedded property of the Amazon S3
--- Website Configuration Property property that describes the redirect
--- behavior of all requests to a website endpoint of an Amazon S3 bucket.
-
-module Stratosphere.ResourceProperties.S3WebsiteRedirectAllRequestsTo where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for S3WebsiteRedirectAllRequestsTo. See
--- 's3WebsiteRedirectAllRequestsTo' for a more convenient constructor.
-data S3WebsiteRedirectAllRequestsTo =
-  S3WebsiteRedirectAllRequestsTo
-  { _s3WebsiteRedirectAllRequestsToHostName :: Val Text
-  , _s3WebsiteRedirectAllRequestsToProtocol :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON S3WebsiteRedirectAllRequestsTo where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
-
-instance FromJSON S3WebsiteRedirectAllRequestsTo where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
-
--- | Constructor for 'S3WebsiteRedirectAllRequestsTo' containing required
--- fields as arguments.
-s3WebsiteRedirectAllRequestsTo
-  :: Val Text -- ^ 'swrartHostName'
-  -> S3WebsiteRedirectAllRequestsTo
-s3WebsiteRedirectAllRequestsTo hostNamearg =
-  S3WebsiteRedirectAllRequestsTo
-  { _s3WebsiteRedirectAllRequestsToHostName = hostNamearg
-  , _s3WebsiteRedirectAllRequestsToProtocol = Nothing
-  }
-
--- | Name of the host where requests are redirected.
-swrartHostName :: Lens' S3WebsiteRedirectAllRequestsTo (Val Text)
-swrartHostName = lens _s3WebsiteRedirectAllRequestsToHostName (\s a -> s { _s3WebsiteRedirectAllRequestsToHostName = a })
-
--- | Protocol to use (http or https) when redirecting requests. The default is
--- the protocol that is used in the original request.
-swrartProtocol :: Lens' S3WebsiteRedirectAllRequestsTo (Maybe (Val Text))
-swrartProtocol = lens _s3WebsiteRedirectAllRequestsToProtocol (\s a -> s { _s3WebsiteRedirectAllRequestsToProtocol = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3WebsiteRedirectRule.hs b/library-gen/Stratosphere/ResourceProperties/S3WebsiteRedirectRule.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3WebsiteRedirectRule.hs
+++ /dev/null
@@ -1,75 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The RedirectRule property is an embedded property of the Amazon S3
--- Website Configuration Routing Rules Property that describes how requests
--- are redirected. In the event of an error, you can specify a different error
--- code to return.
-
-module Stratosphere.ResourceProperties.S3WebsiteRedirectRule where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for S3WebsiteRedirectRule. See
--- 's3WebsiteRedirectRule' for a more convenient constructor.
-data S3WebsiteRedirectRule =
-  S3WebsiteRedirectRule
-  { _s3WebsiteRedirectRuleHostName :: Maybe (Val Text)
-  , _s3WebsiteRedirectRuleHttpRedirectCode :: Maybe (Val Text)
-  , _s3WebsiteRedirectRuleProtocol :: Maybe (Val Text)
-  , _s3WebsiteRedirectRuleReplaceKeyPrefixWith :: Maybe (Val Text)
-  , _s3WebsiteRedirectRuleReplaceKeyWith :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON S3WebsiteRedirectRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
-
-instance FromJSON S3WebsiteRedirectRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
-
--- | Constructor for 'S3WebsiteRedirectRule' containing required fields as
--- arguments.
-s3WebsiteRedirectRule
-  :: S3WebsiteRedirectRule
-s3WebsiteRedirectRule  =
-  S3WebsiteRedirectRule
-  { _s3WebsiteRedirectRuleHostName = Nothing
-  , _s3WebsiteRedirectRuleHttpRedirectCode = Nothing
-  , _s3WebsiteRedirectRuleProtocol = Nothing
-  , _s3WebsiteRedirectRuleReplaceKeyPrefixWith = Nothing
-  , _s3WebsiteRedirectRuleReplaceKeyWith = Nothing
-  }
-
--- | Name of the host where requests are redirected.
-swrrHostName :: Lens' S3WebsiteRedirectRule (Maybe (Val Text))
-swrrHostName = lens _s3WebsiteRedirectRuleHostName (\s a -> s { _s3WebsiteRedirectRuleHostName = a })
-
--- | The HTTP redirect code to use on the response.
-swrrHttpRedirectCode :: Lens' S3WebsiteRedirectRule (Maybe (Val Text))
-swrrHttpRedirectCode = lens _s3WebsiteRedirectRuleHttpRedirectCode (\s a -> s { _s3WebsiteRedirectRuleHttpRedirectCode = a })
-
--- | The protocol to use in the redirect request.
-swrrProtocol :: Lens' S3WebsiteRedirectRule (Maybe (Val Text))
-swrrProtocol = lens _s3WebsiteRedirectRuleProtocol (\s a -> s { _s3WebsiteRedirectRuleProtocol = a })
-
--- | The object key prefix to use in the redirect request. For example, to
--- redirect requests for all pages with the prefix docs/ (objects in the docs/
--- folder) to the documents/ prefix, you can set the KeyPrefixEquals property
--- in routing condition property to docs/, and set the ReplaceKeyPrefixWith
--- property to documents/. Important If you specify this property, you cannot
--- specify the ReplaceKeyWith property.
-swrrReplaceKeyPrefixWith :: Lens' S3WebsiteRedirectRule (Maybe (Val Text))
-swrrReplaceKeyPrefixWith = lens _s3WebsiteRedirectRuleReplaceKeyPrefixWith (\s a -> s { _s3WebsiteRedirectRuleReplaceKeyPrefixWith = a })
-
--- | The specific object key to use in the redirect request. For example,
--- redirect request to error.html. Important If you specify this property, you
--- cannot specify the ReplaceKeyPrefixWith property.
-swrrReplaceKeyWith :: Lens' S3WebsiteRedirectRule (Maybe (Val Text))
-swrrReplaceKeyWith = lens _s3WebsiteRedirectRuleReplaceKeyWith (\s a -> s { _s3WebsiteRedirectRuleReplaceKeyWith = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3WebsiteRoutingRuleCondition.hs b/library-gen/Stratosphere/ResourceProperties/S3WebsiteRoutingRuleCondition.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3WebsiteRoutingRuleCondition.hs
+++ /dev/null
@@ -1,54 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The RoutingRuleCondition property is an embedded property of the Amazon
--- S3 Website Configuration Routing Rules Property that describes a condition
--- that must be met for a redirect to apply.
-
-module Stratosphere.ResourceProperties.S3WebsiteRoutingRuleCondition where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for S3WebsiteRoutingRuleCondition. See
--- 's3WebsiteRoutingRuleCondition' for a more convenient constructor.
-data S3WebsiteRoutingRuleCondition =
-  S3WebsiteRoutingRuleCondition
-  { _s3WebsiteRoutingRuleConditionHttpErrorCodeReturnedEquals :: Maybe (Val Text)
-  , _s3WebsiteRoutingRuleConditionKeyPrefixEquals :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON S3WebsiteRoutingRuleCondition where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
-
-instance FromJSON S3WebsiteRoutingRuleCondition where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
-
--- | Constructor for 'S3WebsiteRoutingRuleCondition' containing required
--- fields as arguments.
-s3WebsiteRoutingRuleCondition
-  :: S3WebsiteRoutingRuleCondition
-s3WebsiteRoutingRuleCondition  =
-  S3WebsiteRoutingRuleCondition
-  { _s3WebsiteRoutingRuleConditionHttpErrorCodeReturnedEquals = Nothing
-  , _s3WebsiteRoutingRuleConditionKeyPrefixEquals = Nothing
-  }
-
--- | Applies this redirect if the error code equals this value in the event of
--- an error.
-swrrcHttpErrorCodeReturnedEquals :: Lens' S3WebsiteRoutingRuleCondition (Maybe (Val Text))
-swrrcHttpErrorCodeReturnedEquals = lens _s3WebsiteRoutingRuleConditionHttpErrorCodeReturnedEquals (\s a -> s { _s3WebsiteRoutingRuleConditionHttpErrorCodeReturnedEquals = a })
-
--- | The object key name prefix when the redirect is applied. For example, to
--- redirect requests for ExamplePage.html, set the key prefix to
--- ExamplePage.html. To redirect request for all pages with the prefix docs/,
--- set the key prefix to docs/, which identifies all objects in the docs/
--- folder.
-swrrcKeyPrefixEquals :: Lens' S3WebsiteRoutingRuleCondition (Maybe (Val Text))
-swrrcKeyPrefixEquals = lens _s3WebsiteRoutingRuleConditionKeyPrefixEquals (\s a -> s { _s3WebsiteRoutingRuleConditionKeyPrefixEquals = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/S3WebsiteRoutingRules.hs b/library-gen/Stratosphere/ResourceProperties/S3WebsiteRoutingRules.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/S3WebsiteRoutingRules.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The RoutingRules property is an embedded property of the Amazon S3
--- Website Configuration Property property. This property describes the
--- redirect behavior and when a redirect is applied.
-
-module Stratosphere.ResourceProperties.S3WebsiteRoutingRules where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.S3WebsiteRedirectRule
-import Stratosphere.ResourceProperties.S3WebsiteRoutingRuleCondition
-
--- | Full data type definition for S3WebsiteRoutingRules. See
--- 's3WebsiteRoutingRules' for a more convenient constructor.
-data S3WebsiteRoutingRules =
-  S3WebsiteRoutingRules
-  { _s3WebsiteRoutingRulesRedirectRule :: S3WebsiteRedirectRule
-  , _s3WebsiteRoutingRulesRoutingRuleCondition :: Maybe S3WebsiteRoutingRuleCondition
-  } deriving (Show, Generic)
-
-instance ToJSON S3WebsiteRoutingRules where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
-
-instance FromJSON S3WebsiteRoutingRules where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
-
--- | Constructor for 'S3WebsiteRoutingRules' containing required fields as
--- arguments.
-s3WebsiteRoutingRules
-  :: S3WebsiteRedirectRule -- ^ 'swrrRedirectRule'
-  -> S3WebsiteRoutingRules
-s3WebsiteRoutingRules redirectRulearg =
-  S3WebsiteRoutingRules
-  { _s3WebsiteRoutingRulesRedirectRule = redirectRulearg
-  , _s3WebsiteRoutingRulesRoutingRuleCondition = Nothing
-  }
-
--- | Redirect requests to another host, to another page, or with another
--- protocol.
-swrrRedirectRule :: Lens' S3WebsiteRoutingRules S3WebsiteRedirectRule
-swrrRedirectRule = lens _s3WebsiteRoutingRulesRedirectRule (\s a -> s { _s3WebsiteRoutingRulesRedirectRule = a })
-
--- | Rules that define when a redirect is applied.
-swrrRoutingRuleCondition :: Lens' S3WebsiteRoutingRules (Maybe S3WebsiteRoutingRuleCondition)
-swrrRoutingRuleCondition = lens _s3WebsiteRoutingRulesRoutingRuleCondition (\s a -> s { _s3WebsiteRoutingRulesRoutingRuleCondition = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/SNSTopicSubscription.hs b/library-gen/Stratosphere/ResourceProperties/SNSTopicSubscription.hs
--- a/library-gen/Stratosphere/ResourceProperties/SNSTopicSubscription.hs
+++ b/library-gen/Stratosphere/ResourceProperties/SNSTopicSubscription.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | Subscription is an embedded property of the AWS::SNS::Topic resource that
--- describes the subscription endpoints for an Amazon Simple Notification
--- Service (Amazon SNS) topic.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-subscription.html
 
 module Stratosphere.ResourceProperties.SNSTopicSubscription where
 
@@ -17,11 +15,11 @@
 import Stratosphere.Types
 
 -- | Full data type definition for SNSTopicSubscription. See
--- 'snsTopicSubscription' for a more convenient constructor.
+-- | 'snsTopicSubscription' for a more convenient constructor.
 data SNSTopicSubscription =
   SNSTopicSubscription
   { _sNSTopicSubscriptionEndpoint :: Val Text
-  , _sNSTopicSubscriptionProtocol :: SNSProtocol
+  , _sNSTopicSubscriptionProtocol :: Val SNSProtocol
   } deriving (Show, Generic)
 
 instance ToJSON SNSTopicSubscription where
@@ -31,10 +29,10 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
 
 -- | Constructor for 'SNSTopicSubscription' containing required fields as
--- arguments.
+-- | arguments.
 snsTopicSubscription
   :: Val Text -- ^ 'snstsEndpoint'
-  -> SNSProtocol -- ^ 'snstsProtocol'
+  -> Val SNSProtocol -- ^ 'snstsProtocol'
   -> SNSTopicSubscription
 snsTopicSubscription endpointarg protocolarg =
   SNSTopicSubscription
@@ -42,13 +40,10 @@
   , _sNSTopicSubscriptionProtocol = protocolarg
   }
 
--- | The subscription's endpoint (format depends on the protocol). For more
--- information, see the Subscribe Endpoint parameter in the Amazon Simple
--- Notification Service API Reference.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-subscription.html#cfn-sns-topic-subscription-endpoint
 snstsEndpoint :: Lens' SNSTopicSubscription (Val Text)
 snstsEndpoint = lens _sNSTopicSubscriptionEndpoint (\s a -> s { _sNSTopicSubscriptionEndpoint = a })
 
--- | The subscription's protocol. For more information, see the Subscribe
--- Protocol parameter in the Amazon Simple Notification Service API Reference.
-snstsProtocol :: Lens' SNSTopicSubscription SNSProtocol
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-subscription.html#cfn-sns-topic-subscription-protocol
+snstsProtocol :: Lens' SNSTopicSubscription (Val SNSProtocol)
 snstsProtocol = lens _sNSTopicSubscriptionProtocol (\s a -> s { _sNSTopicSubscriptionProtocol = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/SQSRedrivePolicy.hs b/library-gen/Stratosphere/ResourceProperties/SQSRedrivePolicy.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/SQSRedrivePolicy.hs
+++ /dev/null
@@ -1,50 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The RedrivePolicy type is a property of the AWS::SQS::Queue resource.
-
-module Stratosphere.ResourceProperties.SQSRedrivePolicy where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for SQSRedrivePolicy. See 'sqsRedrivePolicy'
--- for a more convenient constructor.
-data SQSRedrivePolicy =
-  SQSRedrivePolicy
-  { _sQSRedrivePolicydeadLetterTargetArn :: Val Text
-  , _sQSRedrivePolicymaxReceiveCount :: Maybe (Val Integer')
-  } deriving (Show, Generic)
-
-instance ToJSON SQSRedrivePolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
-
-instance FromJSON SQSRedrivePolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
-
--- | Constructor for 'SQSRedrivePolicy' containing required fields as
--- arguments.
-sqsRedrivePolicy
-  :: Val Text -- ^ 'sqsrpdeadLetterTargetArn'
-  -> SQSRedrivePolicy
-sqsRedrivePolicy deadLetterTargetArnarg =
-  SQSRedrivePolicy
-  { _sQSRedrivePolicydeadLetterTargetArn = deadLetterTargetArnarg
-  , _sQSRedrivePolicymaxReceiveCount = Nothing
-  }
-
--- | The Amazon Resource Name (ARN) of the dead letter queue to which the
--- messages are sent to after the maxReceiveCount value has been exceeded.
-sqsrpdeadLetterTargetArn :: Lens' SQSRedrivePolicy (Val Text)
-sqsrpdeadLetterTargetArn = lens _sQSRedrivePolicydeadLetterTargetArn (\s a -> s { _sQSRedrivePolicydeadLetterTargetArn = a })
-
--- | The number of times a message is delivered to the source queue before
--- being sent to the dead letter queue.
-sqsrpmaxReceiveCount :: Lens' SQSRedrivePolicy (Maybe (Val Integer'))
-sqsrpmaxReceiveCount = lens _sQSRedrivePolicymaxReceiveCount (\s a -> s { _sQSRedrivePolicymaxReceiveCount = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/SSMAssociationParameterValues.hs b/library-gen/Stratosphere/ResourceProperties/SSMAssociationParameterValues.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/SSMAssociationParameterValues.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssm-association-parametervalues.html
+
+module Stratosphere.ResourceProperties.SSMAssociationParameterValues where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for SSMAssociationParameterValues. See
+-- | 'ssmAssociationParameterValues' for a more convenient constructor.
+data SSMAssociationParameterValues =
+  SSMAssociationParameterValues
+  { _sSMAssociationParameterValuesParameterValues :: [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON SSMAssociationParameterValues where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+instance FromJSON SSMAssociationParameterValues where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+-- | Constructor for 'SSMAssociationParameterValues' containing required
+-- | fields as arguments.
+ssmAssociationParameterValues
+  :: [Val Text] -- ^ 'ssmapvParameterValues'
+  -> SSMAssociationParameterValues
+ssmAssociationParameterValues parameterValuesarg =
+  SSMAssociationParameterValues
+  { _sSMAssociationParameterValuesParameterValues = parameterValuesarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssm-association-parametervalues.html#cfn-ssm-association-parametervalues-parametervalues
+ssmapvParameterValues :: Lens' SSMAssociationParameterValues [Val Text]
+ssmapvParameterValues = lens _sSMAssociationParameterValuesParameterValues (\s a -> s { _sSMAssociationParameterValuesParameterValues = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/SSMAssociationTarget.hs b/library-gen/Stratosphere/ResourceProperties/SSMAssociationTarget.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/SSMAssociationTarget.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssm-association-target.html
+
+module Stratosphere.ResourceProperties.SSMAssociationTarget where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for SSMAssociationTarget. See
+-- | 'ssmAssociationTarget' for a more convenient constructor.
+data SSMAssociationTarget =
+  SSMAssociationTarget
+  { _sSMAssociationTargetKey :: Val Text
+  , _sSMAssociationTargetValues :: [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON SSMAssociationTarget where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+instance FromJSON SSMAssociationTarget where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+-- | Constructor for 'SSMAssociationTarget' containing required fields as
+-- | arguments.
+ssmAssociationTarget
+  :: Val Text -- ^ 'ssmatKey'
+  -> [Val Text] -- ^ 'ssmatValues'
+  -> SSMAssociationTarget
+ssmAssociationTarget keyarg valuesarg =
+  SSMAssociationTarget
+  { _sSMAssociationTargetKey = keyarg
+  , _sSMAssociationTargetValues = valuesarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssm-association-target.html#cfn-ssm-association-target-key
+ssmatKey :: Lens' SSMAssociationTarget (Val Text)
+ssmatKey = lens _sSMAssociationTargetKey (\s a -> s { _sSMAssociationTargetKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssm-association-target.html#cfn-ssm-association-target-values
+ssmatValues :: Lens' SSMAssociationTarget [Val Text]
+ssmatValues = lens _sSMAssociationTargetValues (\s a -> s { _sSMAssociationTargetValues = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/SecurityGroupEgressRule.hs b/library-gen/Stratosphere/ResourceProperties/SecurityGroupEgressRule.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/SecurityGroupEgressRule.hs
+++ /dev/null
@@ -1,72 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The EC2 Security Group Rule is an embedded property of the
--- AWS::EC2::SecurityGroup type.
-
-module Stratosphere.ResourceProperties.SecurityGroupEgressRule where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for SecurityGroupEgressRule. See
--- 'securityGroupEgressRule' for a more convenient constructor.
-data SecurityGroupEgressRule =
-  SecurityGroupEgressRule
-  { _securityGroupEgressRuleCidrIp :: Maybe (Val Text)
-  , _securityGroupEgressRuleDestinationSecurityGroupId :: Maybe (Val Text)
-  , _securityGroupEgressRuleFromPort :: Maybe (Val Integer')
-  , _securityGroupEgressRuleIpProtocol :: Val Text
-  , _securityGroupEgressRuleToPort :: Maybe (Val Integer')
-  } deriving (Show, Generic)
-
-instance ToJSON SecurityGroupEgressRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
-
-instance FromJSON SecurityGroupEgressRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
-
--- | Constructor for 'SecurityGroupEgressRule' containing required fields as
--- arguments.
-securityGroupEgressRule
-  :: Val Text -- ^ 'sgerIpProtocol'
-  -> SecurityGroupEgressRule
-securityGroupEgressRule ipProtocolarg =
-  SecurityGroupEgressRule
-  { _securityGroupEgressRuleCidrIp = Nothing
-  , _securityGroupEgressRuleDestinationSecurityGroupId = Nothing
-  , _securityGroupEgressRuleFromPort = Nothing
-  , _securityGroupEgressRuleIpProtocol = ipProtocolarg
-  , _securityGroupEgressRuleToPort = Nothing
-  }
-
--- | Specifies a CIDR range.
-sgerCidrIp :: Lens' SecurityGroupEgressRule (Maybe (Val Text))
-sgerCidrIp = lens _securityGroupEgressRuleCidrIp (\s a -> s { _securityGroupEgressRuleCidrIp = a })
-
--- | Specifies the GroupId of the destination Amazon VPC security group. Type:
--- String
-sgerDestinationSecurityGroupId :: Lens' SecurityGroupEgressRule (Maybe (Val Text))
-sgerDestinationSecurityGroupId = lens _securityGroupEgressRuleDestinationSecurityGroupId (\s a -> s { _securityGroupEgressRuleDestinationSecurityGroupId = a })
-
--- | The start of port range for the TCP and UDP protocols, or an ICMP type
--- number. An ICMP type number of -1 indicates a wildcard (i.e., any ICMP type
--- number).
-sgerFromPort :: Lens' SecurityGroupEgressRule (Maybe (Val Integer'))
-sgerFromPort = lens _securityGroupEgressRuleFromPort (\s a -> s { _securityGroupEgressRuleFromPort = a })
-
--- | An IP protocol name or number. For valid values, go to the IpProtocol
--- parameter in AuthorizeSecurityGroupIngress
-sgerIpProtocol :: Lens' SecurityGroupEgressRule (Val Text)
-sgerIpProtocol = lens _securityGroupEgressRuleIpProtocol (\s a -> s { _securityGroupEgressRuleIpProtocol = a })
-
--- | The end of port range for the TCP and UDP protocols, or an ICMP code. An
--- ICMP code of -1 indicates a wildcard (i.e., any ICMP code).
-sgerToPort :: Lens' SecurityGroupEgressRule (Maybe (Val Integer'))
-sgerToPort = lens _securityGroupEgressRuleToPort (\s a -> s { _securityGroupEgressRuleToPort = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/SecurityGroupIngressRule.hs b/library-gen/Stratosphere/ResourceProperties/SecurityGroupIngressRule.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/SecurityGroupIngressRule.hs
+++ /dev/null
@@ -1,89 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The EC2 Security Group Rule is an embedded property of the
--- AWS::EC2::SecurityGroup type.
-
-module Stratosphere.ResourceProperties.SecurityGroupIngressRule where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for SecurityGroupIngressRule. See
--- 'securityGroupIngressRule' for a more convenient constructor.
-data SecurityGroupIngressRule =
-  SecurityGroupIngressRule
-  { _securityGroupIngressRuleCidrIp :: Maybe (Val Text)
-  , _securityGroupIngressRuleFromPort :: Maybe (Val Integer')
-  , _securityGroupIngressRuleIpProtocol :: Val Text
-  , _securityGroupIngressRuleSourceSecurityGroupId :: Maybe (Val Text)
-  , _securityGroupIngressRuleSourceSecurityGroupName :: Maybe (Val Text)
-  , _securityGroupIngressRuleSourceSecurityGroupOwnerId :: Maybe (Val Text)
-  , _securityGroupIngressRuleToPort :: Maybe (Val Integer')
-  } deriving (Show, Generic)
-
-instance ToJSON SecurityGroupIngressRule where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
-
-instance FromJSON SecurityGroupIngressRule where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
-
--- | Constructor for 'SecurityGroupIngressRule' containing required fields as
--- arguments.
-securityGroupIngressRule
-  :: Val Text -- ^ 'sgirIpProtocol'
-  -> SecurityGroupIngressRule
-securityGroupIngressRule ipProtocolarg =
-  SecurityGroupIngressRule
-  { _securityGroupIngressRuleCidrIp = Nothing
-  , _securityGroupIngressRuleFromPort = Nothing
-  , _securityGroupIngressRuleIpProtocol = ipProtocolarg
-  , _securityGroupIngressRuleSourceSecurityGroupId = Nothing
-  , _securityGroupIngressRuleSourceSecurityGroupName = Nothing
-  , _securityGroupIngressRuleSourceSecurityGroupOwnerId = Nothing
-  , _securityGroupIngressRuleToPort = Nothing
-  }
-
--- | Specifies a CIDR range.
-sgirCidrIp :: Lens' SecurityGroupIngressRule (Maybe (Val Text))
-sgirCidrIp = lens _securityGroupIngressRuleCidrIp (\s a -> s { _securityGroupIngressRuleCidrIp = a })
-
--- | The start of port range for the TCP and UDP protocols, or an ICMP type
--- number. An ICMP type number of -1 indicates a wildcard (i.e., any ICMP type
--- number). Type: Integer
-sgirFromPort :: Lens' SecurityGroupIngressRule (Maybe (Val Integer'))
-sgirFromPort = lens _securityGroupIngressRuleFromPort (\s a -> s { _securityGroupIngressRuleFromPort = a })
-
--- | An IP protocol name or number. For valid values, go to the IpProtocol
--- parameter in AuthorizeSecurityGroupIngress
-sgirIpProtocol :: Lens' SecurityGroupIngressRule (Val Text)
-sgirIpProtocol = lens _securityGroupIngressRuleIpProtocol (\s a -> s { _securityGroupIngressRuleIpProtocol = a })
-
--- | For VPC security groups only. Specifies the ID of the Amazon EC2 Security
--- Group to allow access. You can use the Ref intrinsic function to refer to
--- the logical ID of a security group defined in the same template.
-sgirSourceSecurityGroupId :: Lens' SecurityGroupIngressRule (Maybe (Val Text))
-sgirSourceSecurityGroupId = lens _securityGroupIngressRuleSourceSecurityGroupId (\s a -> s { _securityGroupIngressRuleSourceSecurityGroupId = a })
-
--- | For non-VPC security groups only. Specifies the name of the Amazon EC2
--- Security Group to use for access. You can use the Ref intrinsic function to
--- refer to the logical name of a security group that is defined in the same
--- template.
-sgirSourceSecurityGroupName :: Lens' SecurityGroupIngressRule (Maybe (Val Text))
-sgirSourceSecurityGroupName = lens _securityGroupIngressRuleSourceSecurityGroupName (\s a -> s { _securityGroupIngressRuleSourceSecurityGroupName = a })
-
--- | Specifies the AWS Account ID of the owner of the Amazon EC2 Security
--- Group that is specified in the SourceSecurityGroupName property.
-sgirSourceSecurityGroupOwnerId :: Lens' SecurityGroupIngressRule (Maybe (Val Text))
-sgirSourceSecurityGroupOwnerId = lens _securityGroupIngressRuleSourceSecurityGroupOwnerId (\s a -> s { _securityGroupIngressRuleSourceSecurityGroupOwnerId = a })
-
--- | The end of port range for the TCP and UDP protocols, or an ICMP code. An
--- ICMP code of -1 indicates a wildcard (i.e., any ICMP code).
-sgirToPort :: Lens' SecurityGroupIngressRule (Maybe (Val Integer'))
-sgirToPort = lens _securityGroupIngressRuleToPort (\s a -> s { _securityGroupIngressRuleToPort = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/StepAdjustments.hs b/library-gen/Stratosphere/ResourceProperties/StepAdjustments.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/StepAdjustments.hs
+++ /dev/null
@@ -1,70 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | StepAdjustments is a property of the AWS::AutoScaling::ScalingPolicy
--- resource that describes a scaling adjustment based on the difference
--- between the value of the aggregated CloudWatch metric and the breach
--- threshold that you've defined for the alarm. For more information, see
--- StepAdjustment in the Auto Scaling API Reference.
-
-module Stratosphere.ResourceProperties.StepAdjustments where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for StepAdjustments. See 'stepAdjustments' for
--- a more convenient constructor.
-data StepAdjustments =
-  StepAdjustments
-  { _stepAdjustmentsMetricIntervalLowerBound :: Maybe Double'
-  , _stepAdjustmentsMetricIntervalUpperBound :: Maybe Double'
-  , _stepAdjustmentsScalingAdjustment :: Val Integer'
-  } deriving (Show, Generic)
-
-instance ToJSON StepAdjustments where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
-
-instance FromJSON StepAdjustments where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
-
--- | Constructor for 'StepAdjustments' containing required fields as
--- arguments.
-stepAdjustments
-  :: Val Integer' -- ^ 'saScalingAdjustment'
-  -> StepAdjustments
-stepAdjustments scalingAdjustmentarg =
-  StepAdjustments
-  { _stepAdjustmentsMetricIntervalLowerBound = Nothing
-  , _stepAdjustmentsMetricIntervalUpperBound = Nothing
-  , _stepAdjustmentsScalingAdjustment = scalingAdjustmentarg
-  }
-
--- | The lower bound for the difference between the breach threshold and the
--- CloudWatch metric. If the metric value exceeds the breach threshold, the
--- lower bound is inclusive (the metric must be greater than or equal to the
--- threshold plus the lower bound). Otherwise, it is exclusive (the metric
--- must be greater than the threshold plus the lower bound). A null value
--- indicates negative infinity.
-saMetricIntervalLowerBound :: Lens' StepAdjustments (Maybe Double')
-saMetricIntervalLowerBound = lens _stepAdjustmentsMetricIntervalLowerBound (\s a -> s { _stepAdjustmentsMetricIntervalLowerBound = a })
-
--- | The upper bound for the difference between the breach threshold and the
--- CloudWatch metric. If the metric value exceeds the breach threshold, the
--- upper bound is exclusive (the metric must be less than the threshold plus
--- the upper bound). Otherwise, it is inclusive (the metric must be less than
--- or equal to the threshold plus the upper bound). A null value indicates
--- positive infinity.
-saMetricIntervalUpperBound :: Lens' StepAdjustments (Maybe Double')
-saMetricIntervalUpperBound = lens _stepAdjustmentsMetricIntervalUpperBound (\s a -> s { _stepAdjustmentsMetricIntervalUpperBound = a })
-
--- | The amount by which to scale, based on the value that you specified in
--- the AdjustmentType property. A positive value adds to the current capacity
--- and a negative number subtracts from the current capacity.
-saScalingAdjustment :: Lens' StepAdjustments (Val Integer')
-saScalingAdjustment = lens _stepAdjustmentsScalingAdjustment (\s a -> s { _stepAdjustmentsScalingAdjustment = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/Tag.hs b/library-gen/Stratosphere/ResourceProperties/Tag.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/Tag.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html
+
+module Stratosphere.ResourceProperties.Tag where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for Tag. See 'tag' for a more convenient
+-- | constructor.
+data Tag =
+  Tag
+  { _tagKey :: Val Text
+  , _tagValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON Tag where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 4, omitNothingFields = True }
+
+instance FromJSON Tag where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 4, omitNothingFields = True }
+
+-- | Constructor for 'Tag' containing required fields as arguments.
+tag
+  :: Val Text -- ^ 'tagKey'
+  -> Val Text -- ^ 'tagValue'
+  -> Tag
+tag keyarg valuearg =
+  Tag
+  { _tagKey = keyarg
+  , _tagValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html#cfn-resource-tags-key
+tagKey :: Lens' Tag (Val Text)
+tagKey = lens _tagKey (\s a -> s { _tagKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html#cfn-resource-tags-value
+tagValue :: Lens' Tag (Val Text)
+tagValue = lens _tagValue (\s a -> s { _tagValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/UserLoginProfile.hs b/library-gen/Stratosphere/ResourceProperties/UserLoginProfile.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/UserLoginProfile.hs
+++ /dev/null
@@ -1,50 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | LoginProfile is a property of the AWS::IAM::User resource that creates a
--- login profile for users so that they can access the AWS Management Console.
-
-module Stratosphere.ResourceProperties.UserLoginProfile where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for UserLoginProfile. See 'userLoginProfile'
--- for a more convenient constructor.
-data UserLoginProfile =
-  UserLoginProfile
-  { _userLoginProfilePassword :: Val Text
-  , _userLoginProfilePasswordResetRequired :: Maybe (Val Bool')
-  } deriving (Show, Generic)
-
-instance ToJSON UserLoginProfile where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
-
-instance FromJSON UserLoginProfile where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
-
--- | Constructor for 'UserLoginProfile' containing required fields as
--- arguments.
-userLoginProfile
-  :: Val Text -- ^ 'ulpPassword'
-  -> UserLoginProfile
-userLoginProfile passwordarg =
-  UserLoginProfile
-  { _userLoginProfilePassword = passwordarg
-  , _userLoginProfilePasswordResetRequired = Nothing
-  }
-
--- | The password for the user.
-ulpPassword :: Lens' UserLoginProfile (Val Text)
-ulpPassword = lens _userLoginProfilePassword (\s a -> s { _userLoginProfilePassword = a })
-
--- | Specifies whether the user is required to set a new password the next
--- time the user logs in to the AWS Management Console.
-ulpPasswordResetRequired :: Lens' UserLoginProfile (Maybe (Val Bool'))
-ulpPasswordResetRequired = lens _userLoginProfilePasswordResetRequired (\s a -> s { _userLoginProfilePasswordResetRequired = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFByteMatchSetByteMatchTuple.hs b/library-gen/Stratosphere/ResourceProperties/WAFByteMatchSetByteMatchTuple.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFByteMatchSetByteMatchTuple.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-bytematchset-bytematchtuples.html
+
+module Stratosphere.ResourceProperties.WAFByteMatchSetByteMatchTuple where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFByteMatchSetFieldToMatch
+
+-- | Full data type definition for WAFByteMatchSetByteMatchTuple. See
+-- | 'wafByteMatchSetByteMatchTuple' for a more convenient constructor.
+data WAFByteMatchSetByteMatchTuple =
+  WAFByteMatchSetByteMatchTuple
+  { _wAFByteMatchSetByteMatchTupleFieldToMatch :: WAFByteMatchSetFieldToMatch
+  , _wAFByteMatchSetByteMatchTuplePositionalConstraint :: Val Text
+  , _wAFByteMatchSetByteMatchTupleTargetString :: Maybe (Val Text)
+  , _wAFByteMatchSetByteMatchTupleTargetStringBase64 :: Maybe (Val Text)
+  , _wAFByteMatchSetByteMatchTupleTextTransformation :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON WAFByteMatchSetByteMatchTuple where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+instance FromJSON WAFByteMatchSetByteMatchTuple where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+-- | Constructor for 'WAFByteMatchSetByteMatchTuple' containing required
+-- | fields as arguments.
+wafByteMatchSetByteMatchTuple
+  :: WAFByteMatchSetFieldToMatch -- ^ 'wafbmsbmtFieldToMatch'
+  -> Val Text -- ^ 'wafbmsbmtPositionalConstraint'
+  -> Val Text -- ^ 'wafbmsbmtTextTransformation'
+  -> WAFByteMatchSetByteMatchTuple
+wafByteMatchSetByteMatchTuple fieldToMatcharg positionalConstraintarg textTransformationarg =
+  WAFByteMatchSetByteMatchTuple
+  { _wAFByteMatchSetByteMatchTupleFieldToMatch = fieldToMatcharg
+  , _wAFByteMatchSetByteMatchTuplePositionalConstraint = positionalConstraintarg
+  , _wAFByteMatchSetByteMatchTupleTargetString = Nothing
+  , _wAFByteMatchSetByteMatchTupleTargetStringBase64 = Nothing
+  , _wAFByteMatchSetByteMatchTupleTextTransformation = textTransformationarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-bytematchset-bytematchtuples.html#cfn-waf-bytematchset-bytematchtuples-fieldtomatch
+wafbmsbmtFieldToMatch :: Lens' WAFByteMatchSetByteMatchTuple WAFByteMatchSetFieldToMatch
+wafbmsbmtFieldToMatch = lens _wAFByteMatchSetByteMatchTupleFieldToMatch (\s a -> s { _wAFByteMatchSetByteMatchTupleFieldToMatch = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-bytematchset-bytematchtuples.html#cfn-waf-bytematchset-bytematchtuples-positionalconstraint
+wafbmsbmtPositionalConstraint :: Lens' WAFByteMatchSetByteMatchTuple (Val Text)
+wafbmsbmtPositionalConstraint = lens _wAFByteMatchSetByteMatchTuplePositionalConstraint (\s a -> s { _wAFByteMatchSetByteMatchTuplePositionalConstraint = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-bytematchset-bytematchtuples.html#cfn-waf-bytematchset-bytematchtuples-targetstring
+wafbmsbmtTargetString :: Lens' WAFByteMatchSetByteMatchTuple (Maybe (Val Text))
+wafbmsbmtTargetString = lens _wAFByteMatchSetByteMatchTupleTargetString (\s a -> s { _wAFByteMatchSetByteMatchTupleTargetString = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-bytematchset-bytematchtuples.html#cfn-waf-bytematchset-bytematchtuples-targetstringbase64
+wafbmsbmtTargetStringBase64 :: Lens' WAFByteMatchSetByteMatchTuple (Maybe (Val Text))
+wafbmsbmtTargetStringBase64 = lens _wAFByteMatchSetByteMatchTupleTargetStringBase64 (\s a -> s { _wAFByteMatchSetByteMatchTupleTargetStringBase64 = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-bytematchset-bytematchtuples.html#cfn-waf-bytematchset-bytematchtuples-texttransformation
+wafbmsbmtTextTransformation :: Lens' WAFByteMatchSetByteMatchTuple (Val Text)
+wafbmsbmtTextTransformation = lens _wAFByteMatchSetByteMatchTupleTextTransformation (\s a -> s { _wAFByteMatchSetByteMatchTupleTextTransformation = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFByteMatchSetFieldToMatch.hs b/library-gen/Stratosphere/ResourceProperties/WAFByteMatchSetFieldToMatch.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFByteMatchSetFieldToMatch.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-bytematchset-bytematchtuples-fieldtomatch.html
+
+module Stratosphere.ResourceProperties.WAFByteMatchSetFieldToMatch where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for WAFByteMatchSetFieldToMatch. See
+-- | 'wafByteMatchSetFieldToMatch' for a more convenient constructor.
+data WAFByteMatchSetFieldToMatch =
+  WAFByteMatchSetFieldToMatch
+  { _wAFByteMatchSetFieldToMatchData :: Maybe (Val Text)
+  , _wAFByteMatchSetFieldToMatchType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON WAFByteMatchSetFieldToMatch where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON WAFByteMatchSetFieldToMatch where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'WAFByteMatchSetFieldToMatch' containing required fields
+-- | as arguments.
+wafByteMatchSetFieldToMatch
+  :: Val Text -- ^ 'wafbmsftmType'
+  -> WAFByteMatchSetFieldToMatch
+wafByteMatchSetFieldToMatch typearg =
+  WAFByteMatchSetFieldToMatch
+  { _wAFByteMatchSetFieldToMatchData = Nothing
+  , _wAFByteMatchSetFieldToMatchType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-bytematchset-bytematchtuples-fieldtomatch.html#cfn-waf-bytematchset-bytematchtuples-fieldtomatch-data
+wafbmsftmData :: Lens' WAFByteMatchSetFieldToMatch (Maybe (Val Text))
+wafbmsftmData = lens _wAFByteMatchSetFieldToMatchData (\s a -> s { _wAFByteMatchSetFieldToMatchData = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-bytematchset-bytematchtuples-fieldtomatch.html#cfn-waf-bytematchset-bytematchtuples-fieldtomatch-type
+wafbmsftmType :: Lens' WAFByteMatchSetFieldToMatch (Val Text)
+wafbmsftmType = lens _wAFByteMatchSetFieldToMatchType (\s a -> s { _wAFByteMatchSetFieldToMatchType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFIPSetIPSetDescriptor.hs b/library-gen/Stratosphere/ResourceProperties/WAFIPSetIPSetDescriptor.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFIPSetIPSetDescriptor.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-ipset-ipsetdescriptors.html
+
+module Stratosphere.ResourceProperties.WAFIPSetIPSetDescriptor where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for WAFIPSetIPSetDescriptor. See
+-- | 'wafipSetIPSetDescriptor' for a more convenient constructor.
+data WAFIPSetIPSetDescriptor =
+  WAFIPSetIPSetDescriptor
+  { _wAFIPSetIPSetDescriptorType :: Val Text
+  , _wAFIPSetIPSetDescriptorValue :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON WAFIPSetIPSetDescriptor where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+instance FromJSON WAFIPSetIPSetDescriptor where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+-- | Constructor for 'WAFIPSetIPSetDescriptor' containing required fields as
+-- | arguments.
+wafipSetIPSetDescriptor
+  :: Val Text -- ^ 'wafipsipsdType'
+  -> Val Text -- ^ 'wafipsipsdValue'
+  -> WAFIPSetIPSetDescriptor
+wafipSetIPSetDescriptor typearg valuearg =
+  WAFIPSetIPSetDescriptor
+  { _wAFIPSetIPSetDescriptorType = typearg
+  , _wAFIPSetIPSetDescriptorValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-ipset-ipsetdescriptors.html#cfn-waf-ipset-ipsetdescriptors-type
+wafipsipsdType :: Lens' WAFIPSetIPSetDescriptor (Val Text)
+wafipsipsdType = lens _wAFIPSetIPSetDescriptorType (\s a -> s { _wAFIPSetIPSetDescriptorType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-ipset-ipsetdescriptors.html#cfn-waf-ipset-ipsetdescriptors-value
+wafipsipsdValue :: Lens' WAFIPSetIPSetDescriptor (Val Text)
+wafipsipsdValue = lens _wAFIPSetIPSetDescriptorValue (\s a -> s { _wAFIPSetIPSetDescriptorValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFRulePredicate.hs b/library-gen/Stratosphere/ResourceProperties/WAFRulePredicate.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFRulePredicate.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-rule-predicates.html
+
+module Stratosphere.ResourceProperties.WAFRulePredicate where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for WAFRulePredicate. See 'wafRulePredicate'
+-- | for a more convenient constructor.
+data WAFRulePredicate =
+  WAFRulePredicate
+  { _wAFRulePredicateDataId :: Val Text
+  , _wAFRulePredicateNegated :: Val Bool'
+  , _wAFRulePredicateType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON WAFRulePredicate where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+instance FromJSON WAFRulePredicate where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+-- | Constructor for 'WAFRulePredicate' containing required fields as
+-- | arguments.
+wafRulePredicate
+  :: Val Text -- ^ 'wafrpDataId'
+  -> Val Bool' -- ^ 'wafrpNegated'
+  -> Val Text -- ^ 'wafrpType'
+  -> WAFRulePredicate
+wafRulePredicate dataIdarg negatedarg typearg =
+  WAFRulePredicate
+  { _wAFRulePredicateDataId = dataIdarg
+  , _wAFRulePredicateNegated = negatedarg
+  , _wAFRulePredicateType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-rule-predicates.html#cfn-waf-rule-predicates-dataid
+wafrpDataId :: Lens' WAFRulePredicate (Val Text)
+wafrpDataId = lens _wAFRulePredicateDataId (\s a -> s { _wAFRulePredicateDataId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-rule-predicates.html#cfn-waf-rule-predicates-negated
+wafrpNegated :: Lens' WAFRulePredicate (Val Bool')
+wafrpNegated = lens _wAFRulePredicateNegated (\s a -> s { _wAFRulePredicateNegated = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-rule-predicates.html#cfn-waf-rule-predicates-type
+wafrpType :: Lens' WAFRulePredicate (Val Text)
+wafrpType = lens _wAFRulePredicateType (\s a -> s { _wAFRulePredicateType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFSizeConstraintSetFieldToMatch.hs b/library-gen/Stratosphere/ResourceProperties/WAFSizeConstraintSetFieldToMatch.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFSizeConstraintSetFieldToMatch.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-sizeconstraintset-sizeconstraint-fieldtomatch.html
+
+module Stratosphere.ResourceProperties.WAFSizeConstraintSetFieldToMatch where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for WAFSizeConstraintSetFieldToMatch. See
+-- | 'wafSizeConstraintSetFieldToMatch' for a more convenient constructor.
+data WAFSizeConstraintSetFieldToMatch =
+  WAFSizeConstraintSetFieldToMatch
+  { _wAFSizeConstraintSetFieldToMatchData :: Maybe (Val Text)
+  , _wAFSizeConstraintSetFieldToMatchType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON WAFSizeConstraintSetFieldToMatch where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+instance FromJSON WAFSizeConstraintSetFieldToMatch where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+-- | Constructor for 'WAFSizeConstraintSetFieldToMatch' containing required
+-- | fields as arguments.
+wafSizeConstraintSetFieldToMatch
+  :: Val Text -- ^ 'wafscsftmType'
+  -> WAFSizeConstraintSetFieldToMatch
+wafSizeConstraintSetFieldToMatch typearg =
+  WAFSizeConstraintSetFieldToMatch
+  { _wAFSizeConstraintSetFieldToMatchData = Nothing
+  , _wAFSizeConstraintSetFieldToMatchType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-sizeconstraintset-sizeconstraint-fieldtomatch.html#cfn-waf-sizeconstraintset-sizeconstraint-fieldtomatch-data
+wafscsftmData :: Lens' WAFSizeConstraintSetFieldToMatch (Maybe (Val Text))
+wafscsftmData = lens _wAFSizeConstraintSetFieldToMatchData (\s a -> s { _wAFSizeConstraintSetFieldToMatchData = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-sizeconstraintset-sizeconstraint-fieldtomatch.html#cfn-waf-sizeconstraintset-sizeconstraint-fieldtomatch-type
+wafscsftmType :: Lens' WAFSizeConstraintSetFieldToMatch (Val Text)
+wafscsftmType = lens _wAFSizeConstraintSetFieldToMatchType (\s a -> s { _wAFSizeConstraintSetFieldToMatchType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFSizeConstraintSetSizeConstraint.hs b/library-gen/Stratosphere/ResourceProperties/WAFSizeConstraintSetSizeConstraint.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFSizeConstraintSetSizeConstraint.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-sizeconstraintset-sizeconstraint.html
+
+module Stratosphere.ResourceProperties.WAFSizeConstraintSetSizeConstraint where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFSizeConstraintSetFieldToMatch
+
+-- | Full data type definition for WAFSizeConstraintSetSizeConstraint. See
+-- | 'wafSizeConstraintSetSizeConstraint' for a more convenient constructor.
+data WAFSizeConstraintSetSizeConstraint =
+  WAFSizeConstraintSetSizeConstraint
+  { _wAFSizeConstraintSetSizeConstraintComparisonOperator :: Val Text
+  , _wAFSizeConstraintSetSizeConstraintFieldToMatch :: WAFSizeConstraintSetFieldToMatch
+  , _wAFSizeConstraintSetSizeConstraintSize :: Val Integer'
+  , _wAFSizeConstraintSetSizeConstraintTextTransformation :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON WAFSizeConstraintSetSizeConstraint where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+instance FromJSON WAFSizeConstraintSetSizeConstraint where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+-- | Constructor for 'WAFSizeConstraintSetSizeConstraint' containing required
+-- | fields as arguments.
+wafSizeConstraintSetSizeConstraint
+  :: Val Text -- ^ 'wafscsscComparisonOperator'
+  -> WAFSizeConstraintSetFieldToMatch -- ^ 'wafscsscFieldToMatch'
+  -> Val Integer' -- ^ 'wafscsscSize'
+  -> Val Text -- ^ 'wafscsscTextTransformation'
+  -> WAFSizeConstraintSetSizeConstraint
+wafSizeConstraintSetSizeConstraint comparisonOperatorarg fieldToMatcharg sizearg textTransformationarg =
+  WAFSizeConstraintSetSizeConstraint
+  { _wAFSizeConstraintSetSizeConstraintComparisonOperator = comparisonOperatorarg
+  , _wAFSizeConstraintSetSizeConstraintFieldToMatch = fieldToMatcharg
+  , _wAFSizeConstraintSetSizeConstraintSize = sizearg
+  , _wAFSizeConstraintSetSizeConstraintTextTransformation = textTransformationarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-sizeconstraintset-sizeconstraint.html#cfn-waf-sizeconstraintset-sizeconstraint-comparisonoperator
+wafscsscComparisonOperator :: Lens' WAFSizeConstraintSetSizeConstraint (Val Text)
+wafscsscComparisonOperator = lens _wAFSizeConstraintSetSizeConstraintComparisonOperator (\s a -> s { _wAFSizeConstraintSetSizeConstraintComparisonOperator = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-sizeconstraintset-sizeconstraint.html#cfn-waf-sizeconstraintset-sizeconstraint-fieldtomatch
+wafscsscFieldToMatch :: Lens' WAFSizeConstraintSetSizeConstraint WAFSizeConstraintSetFieldToMatch
+wafscsscFieldToMatch = lens _wAFSizeConstraintSetSizeConstraintFieldToMatch (\s a -> s { _wAFSizeConstraintSetSizeConstraintFieldToMatch = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-sizeconstraintset-sizeconstraint.html#cfn-waf-sizeconstraintset-sizeconstraint-size
+wafscsscSize :: Lens' WAFSizeConstraintSetSizeConstraint (Val Integer')
+wafscsscSize = lens _wAFSizeConstraintSetSizeConstraintSize (\s a -> s { _wAFSizeConstraintSetSizeConstraintSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-sizeconstraintset-sizeconstraint.html#cfn-waf-sizeconstraintset-sizeconstraint-texttransformation
+wafscsscTextTransformation :: Lens' WAFSizeConstraintSetSizeConstraint (Val Text)
+wafscsscTextTransformation = lens _wAFSizeConstraintSetSizeConstraintTextTransformation (\s a -> s { _wAFSizeConstraintSetSizeConstraintTextTransformation = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFSqlInjectionMatchSetFieldToMatch.hs b/library-gen/Stratosphere/ResourceProperties/WAFSqlInjectionMatchSetFieldToMatch.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFSqlInjectionMatchSetFieldToMatch.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-bytematchset-bytematchtuples-fieldtomatch.html
+
+module Stratosphere.ResourceProperties.WAFSqlInjectionMatchSetFieldToMatch where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for WAFSqlInjectionMatchSetFieldToMatch. See
+-- | 'wafSqlInjectionMatchSetFieldToMatch' for a more convenient constructor.
+data WAFSqlInjectionMatchSetFieldToMatch =
+  WAFSqlInjectionMatchSetFieldToMatch
+  { _wAFSqlInjectionMatchSetFieldToMatchData :: Maybe (Val Text)
+  , _wAFSqlInjectionMatchSetFieldToMatchType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON WAFSqlInjectionMatchSetFieldToMatch where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+instance FromJSON WAFSqlInjectionMatchSetFieldToMatch where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+-- | Constructor for 'WAFSqlInjectionMatchSetFieldToMatch' containing required
+-- | fields as arguments.
+wafSqlInjectionMatchSetFieldToMatch
+  :: Val Text -- ^ 'wafsimsftmType'
+  -> WAFSqlInjectionMatchSetFieldToMatch
+wafSqlInjectionMatchSetFieldToMatch typearg =
+  WAFSqlInjectionMatchSetFieldToMatch
+  { _wAFSqlInjectionMatchSetFieldToMatchData = Nothing
+  , _wAFSqlInjectionMatchSetFieldToMatchType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-bytematchset-bytematchtuples-fieldtomatch.html#cfn-waf-sizeconstraintset-sizeconstraint-fieldtomatch-data
+wafsimsftmData :: Lens' WAFSqlInjectionMatchSetFieldToMatch (Maybe (Val Text))
+wafsimsftmData = lens _wAFSqlInjectionMatchSetFieldToMatchData (\s a -> s { _wAFSqlInjectionMatchSetFieldToMatchData = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-bytematchset-bytematchtuples-fieldtomatch.html#cfn-waf-sizeconstraintset-sizeconstraint-fieldtomatch-type
+wafsimsftmType :: Lens' WAFSqlInjectionMatchSetFieldToMatch (Val Text)
+wafsimsftmType = lens _wAFSqlInjectionMatchSetFieldToMatchType (\s a -> s { _wAFSqlInjectionMatchSetFieldToMatchType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFSqlInjectionMatchSetSqlInjectionMatchTuple.hs b/library-gen/Stratosphere/ResourceProperties/WAFSqlInjectionMatchSetSqlInjectionMatchTuple.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFSqlInjectionMatchSetSqlInjectionMatchTuple.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-sqlinjectionmatchset-sqlinjectionmatchtuples.html
+
+module Stratosphere.ResourceProperties.WAFSqlInjectionMatchSetSqlInjectionMatchTuple where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFSqlInjectionMatchSetFieldToMatch
+
+-- | Full data type definition for
+-- | WAFSqlInjectionMatchSetSqlInjectionMatchTuple. See
+-- | 'wafSqlInjectionMatchSetSqlInjectionMatchTuple' for a more convenient
+-- | constructor.
+data WAFSqlInjectionMatchSetSqlInjectionMatchTuple =
+  WAFSqlInjectionMatchSetSqlInjectionMatchTuple
+  { _wAFSqlInjectionMatchSetSqlInjectionMatchTupleFieldToMatch :: WAFSqlInjectionMatchSetFieldToMatch
+  , _wAFSqlInjectionMatchSetSqlInjectionMatchTupleTextTransformation :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON WAFSqlInjectionMatchSetSqlInjectionMatchTuple where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 46, omitNothingFields = True }
+
+instance FromJSON WAFSqlInjectionMatchSetSqlInjectionMatchTuple where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 46, omitNothingFields = True }
+
+-- | Constructor for 'WAFSqlInjectionMatchSetSqlInjectionMatchTuple'
+-- | containing required fields as arguments.
+wafSqlInjectionMatchSetSqlInjectionMatchTuple
+  :: WAFSqlInjectionMatchSetFieldToMatch -- ^ 'wafsimssimtFieldToMatch'
+  -> Val Text -- ^ 'wafsimssimtTextTransformation'
+  -> WAFSqlInjectionMatchSetSqlInjectionMatchTuple
+wafSqlInjectionMatchSetSqlInjectionMatchTuple fieldToMatcharg textTransformationarg =
+  WAFSqlInjectionMatchSetSqlInjectionMatchTuple
+  { _wAFSqlInjectionMatchSetSqlInjectionMatchTupleFieldToMatch = fieldToMatcharg
+  , _wAFSqlInjectionMatchSetSqlInjectionMatchTupleTextTransformation = textTransformationarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-sqlinjectionmatchset-sqlinjectionmatchtuples.html#cfn-waf-sqlinjectionmatchset-sqlinjectionmatchtuples-fieldtomatch
+wafsimssimtFieldToMatch :: Lens' WAFSqlInjectionMatchSetSqlInjectionMatchTuple WAFSqlInjectionMatchSetFieldToMatch
+wafsimssimtFieldToMatch = lens _wAFSqlInjectionMatchSetSqlInjectionMatchTupleFieldToMatch (\s a -> s { _wAFSqlInjectionMatchSetSqlInjectionMatchTupleFieldToMatch = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-sqlinjectionmatchset-sqlinjectionmatchtuples.html#cfn-waf-sqlinjectionmatchset-sqlinjectionmatchtuples-texttransformation
+wafsimssimtTextTransformation :: Lens' WAFSqlInjectionMatchSetSqlInjectionMatchTuple (Val Text)
+wafsimssimtTextTransformation = lens _wAFSqlInjectionMatchSetSqlInjectionMatchTupleTextTransformation (\s a -> s { _wAFSqlInjectionMatchSetSqlInjectionMatchTupleTextTransformation = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFWebACLActivatedRule.hs b/library-gen/Stratosphere/ResourceProperties/WAFWebACLActivatedRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFWebACLActivatedRule.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-webacl-rules.html
+
+module Stratosphere.ResourceProperties.WAFWebACLActivatedRule where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFWebACLWafAction
+
+-- | Full data type definition for WAFWebACLActivatedRule. See
+-- | 'wafWebACLActivatedRule' for a more convenient constructor.
+data WAFWebACLActivatedRule =
+  WAFWebACLActivatedRule
+  { _wAFWebACLActivatedRuleAction :: WAFWebACLWafAction
+  , _wAFWebACLActivatedRulePriority :: Val Integer'
+  , _wAFWebACLActivatedRuleRuleId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON WAFWebACLActivatedRule where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+instance FromJSON WAFWebACLActivatedRule where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+-- | Constructor for 'WAFWebACLActivatedRule' containing required fields as
+-- | arguments.
+wafWebACLActivatedRule
+  :: WAFWebACLWafAction -- ^ 'wafwaclarAction'
+  -> Val Integer' -- ^ 'wafwaclarPriority'
+  -> Val Text -- ^ 'wafwaclarRuleId'
+  -> WAFWebACLActivatedRule
+wafWebACLActivatedRule actionarg priorityarg ruleIdarg =
+  WAFWebACLActivatedRule
+  { _wAFWebACLActivatedRuleAction = actionarg
+  , _wAFWebACLActivatedRulePriority = priorityarg
+  , _wAFWebACLActivatedRuleRuleId = ruleIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-webacl-rules.html#cfn-waf-webacl-rules-action
+wafwaclarAction :: Lens' WAFWebACLActivatedRule WAFWebACLWafAction
+wafwaclarAction = lens _wAFWebACLActivatedRuleAction (\s a -> s { _wAFWebACLActivatedRuleAction = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-webacl-rules.html#cfn-waf-webacl-rules-priority
+wafwaclarPriority :: Lens' WAFWebACLActivatedRule (Val Integer')
+wafwaclarPriority = lens _wAFWebACLActivatedRulePriority (\s a -> s { _wAFWebACLActivatedRulePriority = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-webacl-rules.html#cfn-waf-webacl-rules-ruleid
+wafwaclarRuleId :: Lens' WAFWebACLActivatedRule (Val Text)
+wafwaclarRuleId = lens _wAFWebACLActivatedRuleRuleId (\s a -> s { _wAFWebACLActivatedRuleRuleId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFWebACLWafAction.hs b/library-gen/Stratosphere/ResourceProperties/WAFWebACLWafAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFWebACLWafAction.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-webacl-action.html
+
+module Stratosphere.ResourceProperties.WAFWebACLWafAction where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for WAFWebACLWafAction. See
+-- | 'wafWebACLWafAction' for a more convenient constructor.
+data WAFWebACLWafAction =
+  WAFWebACLWafAction
+  { _wAFWebACLWafActionType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON WAFWebACLWafAction where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+instance FromJSON WAFWebACLWafAction where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+-- | Constructor for 'WAFWebACLWafAction' containing required fields as
+-- | arguments.
+wafWebACLWafAction
+  :: Val Text -- ^ 'wafwaclwaType'
+  -> WAFWebACLWafAction
+wafWebACLWafAction typearg =
+  WAFWebACLWafAction
+  { _wAFWebACLWafActionType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-webacl-action.html#cfn-waf-webacl-action-type
+wafwaclwaType :: Lens' WAFWebACLWafAction (Val Text)
+wafwaclwaType = lens _wAFWebACLWafActionType (\s a -> s { _wAFWebACLWafActionType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFXssMatchSetFieldToMatch.hs b/library-gen/Stratosphere/ResourceProperties/WAFXssMatchSetFieldToMatch.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFXssMatchSetFieldToMatch.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-xssmatchset-xssmatchtuple-fieldtomatch.html
+
+module Stratosphere.ResourceProperties.WAFXssMatchSetFieldToMatch where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for WAFXssMatchSetFieldToMatch. See
+-- | 'wafXssMatchSetFieldToMatch' for a more convenient constructor.
+data WAFXssMatchSetFieldToMatch =
+  WAFXssMatchSetFieldToMatch
+  { _wAFXssMatchSetFieldToMatchData :: Maybe (Val Text)
+  , _wAFXssMatchSetFieldToMatchType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON WAFXssMatchSetFieldToMatch where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON WAFXssMatchSetFieldToMatch where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'WAFXssMatchSetFieldToMatch' containing required fields
+-- | as arguments.
+wafXssMatchSetFieldToMatch
+  :: Val Text -- ^ 'wafxmsftmType'
+  -> WAFXssMatchSetFieldToMatch
+wafXssMatchSetFieldToMatch typearg =
+  WAFXssMatchSetFieldToMatch
+  { _wAFXssMatchSetFieldToMatchData = Nothing
+  , _wAFXssMatchSetFieldToMatchType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-xssmatchset-xssmatchtuple-fieldtomatch.html#cfn-waf-xssmatchset-xssmatchtuple-fieldtomatch-data
+wafxmsftmData :: Lens' WAFXssMatchSetFieldToMatch (Maybe (Val Text))
+wafxmsftmData = lens _wAFXssMatchSetFieldToMatchData (\s a -> s { _wAFXssMatchSetFieldToMatchData = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-xssmatchset-xssmatchtuple-fieldtomatch.html#cfn-waf-xssmatchset-xssmatchtuple-fieldtomatch-type
+wafxmsftmType :: Lens' WAFXssMatchSetFieldToMatch (Val Text)
+wafxmsftmType = lens _wAFXssMatchSetFieldToMatchType (\s a -> s { _wAFXssMatchSetFieldToMatchType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFXssMatchSetXssMatchTuple.hs b/library-gen/Stratosphere/ResourceProperties/WAFXssMatchSetXssMatchTuple.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFXssMatchSetXssMatchTuple.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-xssmatchset-xssmatchtuple.html
+
+module Stratosphere.ResourceProperties.WAFXssMatchSetXssMatchTuple where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFXssMatchSetFieldToMatch
+
+-- | Full data type definition for WAFXssMatchSetXssMatchTuple. See
+-- | 'wafXssMatchSetXssMatchTuple' for a more convenient constructor.
+data WAFXssMatchSetXssMatchTuple =
+  WAFXssMatchSetXssMatchTuple
+  { _wAFXssMatchSetXssMatchTupleFieldToMatch :: WAFXssMatchSetFieldToMatch
+  , _wAFXssMatchSetXssMatchTupleTextTransformation :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON WAFXssMatchSetXssMatchTuple where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON WAFXssMatchSetXssMatchTuple where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'WAFXssMatchSetXssMatchTuple' containing required fields
+-- | as arguments.
+wafXssMatchSetXssMatchTuple
+  :: WAFXssMatchSetFieldToMatch -- ^ 'wafxmsxmtFieldToMatch'
+  -> Val Text -- ^ 'wafxmsxmtTextTransformation'
+  -> WAFXssMatchSetXssMatchTuple
+wafXssMatchSetXssMatchTuple fieldToMatcharg textTransformationarg =
+  WAFXssMatchSetXssMatchTuple
+  { _wAFXssMatchSetXssMatchTupleFieldToMatch = fieldToMatcharg
+  , _wAFXssMatchSetXssMatchTupleTextTransformation = textTransformationarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-xssmatchset-xssmatchtuple.html#cfn-waf-xssmatchset-xssmatchtuple-fieldtomatch
+wafxmsxmtFieldToMatch :: Lens' WAFXssMatchSetXssMatchTuple WAFXssMatchSetFieldToMatch
+wafxmsxmtFieldToMatch = lens _wAFXssMatchSetXssMatchTupleFieldToMatch (\s a -> s { _wAFXssMatchSetXssMatchTupleFieldToMatch = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-xssmatchset-xssmatchtuple.html#cfn-waf-xssmatchset-xssmatchtuple-texttransformation
+wafxmsxmtTextTransformation :: Lens' WAFXssMatchSetXssMatchTuple (Val Text)
+wafxmsxmtTextTransformation = lens _wAFXssMatchSetXssMatchTupleTextTransformation (\s a -> s { _wAFXssMatchSetXssMatchTupleTextTransformation = a })
diff --git a/library-gen/Stratosphere/Resources.hs b/library-gen/Stratosphere/Resources.hs
--- a/library-gen/Stratosphere/Resources.hs
+++ b/library-gen/Stratosphere/Resources.hs
@@ -1,534 +1,1271 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE ExistentialQuantification #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE FunctionalDependencies #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE TypeFamilies #-}
-
--- | See:
--- http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resources-section-structure.html
---
--- The required Resources section declare the AWS resources that you want as
--- part of your stack, such as an Amazon EC2 instance or an Amazon S3 bucket.
--- You must declare each resource separately; however, you can specify multiple
--- resources of the same type. If you declare multiple resources, separate them
--- with commas.
-
-module Stratosphere.Resources
-     ( module X
-     , Resource (..)
-     , resource
-     , resName
-     , properties
-     , deletionPolicy
-     , resCreationPolicy
-     , resUpdatePolicy
-     , dependsOn
-     , ResourceProperties (..)
-     , DeletionPolicy (..)
-     , Resources (..)
-     ) where
-
-import Control.Lens hiding ((.=))
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Maybe (catMaybes)
-import qualified Data.Text as T
-import GHC.Exts (IsList(..))
-import GHC.Generics (Generic)
-
-import Stratosphere.Resources.AccessKey as X
-import Stratosphere.Resources.ApiGatewayAccount as X
-import Stratosphere.Resources.ApiGatewayDeployment as X
-import Stratosphere.Resources.ApiGatewayMethod as X
-import Stratosphere.Resources.ApiGatewayModel as X
-import Stratosphere.Resources.ApiGatewayResource as X
-import Stratosphere.Resources.ApiGatewayRestApi as X
-import Stratosphere.Resources.ApiGatewayStage as X
-import Stratosphere.Resources.ApiGatewayUsagePlan as X
-import Stratosphere.Resources.AutoScalingGroup as X
-import Stratosphere.Resources.Bucket as X
-import Stratosphere.Resources.CacheCluster as X
-import Stratosphere.Resources.CacheSubnetGroup as X
-import Stratosphere.Resources.DBInstance as X
-import Stratosphere.Resources.DBParameterGroup as X
-import Stratosphere.Resources.DBSecurityGroup as X
-import Stratosphere.Resources.DBSecurityGroupIngress as X
-import Stratosphere.Resources.DBSubnetGroup as X
-import Stratosphere.Resources.DeliveryStream as X
-import Stratosphere.Resources.DynamoDBTable as X
-import Stratosphere.Resources.EC2Instance as X
-import Stratosphere.Resources.EIP as X
-import Stratosphere.Resources.EIPAssociation as X
-import Stratosphere.Resources.EventsRule as X
-import Stratosphere.Resources.Group as X
-import Stratosphere.Resources.IAMRole as X
-import Stratosphere.Resources.InstanceProfile as X
-import Stratosphere.Resources.InternetGateway as X
-import Stratosphere.Resources.KinesisStream as X
-import Stratosphere.Resources.LambdaAlias as X
-import Stratosphere.Resources.LambdaFunction as X
-import Stratosphere.Resources.LambdaPermission as X
-import Stratosphere.Resources.LambdaVersion as X
-import Stratosphere.Resources.LaunchConfiguration as X
-import Stratosphere.Resources.LifecycleHook as X
-import Stratosphere.Resources.LoadBalancer as X
-import Stratosphere.Resources.LogGroup as X
-import Stratosphere.Resources.LogStream as X
-import Stratosphere.Resources.ManagedPolicy as X
-import Stratosphere.Resources.NatGateway as X
-import Stratosphere.Resources.Policy as X
-import Stratosphere.Resources.RecordSet as X
-import Stratosphere.Resources.RecordSetGroup as X
-import Stratosphere.Resources.Route as X
-import Stratosphere.Resources.RouteTable as X
-import Stratosphere.Resources.S3BucketPolicy as X
-import Stratosphere.Resources.SNSSubscription as X
-import Stratosphere.Resources.SNSTopic as X
-import Stratosphere.Resources.SNSTopicPolicy as X
-import Stratosphere.Resources.SQSQueue as X
-import Stratosphere.Resources.SQSQueuePolicy as X
-import Stratosphere.Resources.ScalingPolicy as X
-import Stratosphere.Resources.ScheduledAction as X
-import Stratosphere.Resources.SecurityGroup as X
-import Stratosphere.Resources.SecurityGroupEgress as X
-import Stratosphere.Resources.SecurityGroupIngress as X
-import Stratosphere.Resources.Stack as X
-import Stratosphere.Resources.Subnet as X
-import Stratosphere.Resources.SubnetRouteTableAssociation as X
-import Stratosphere.Resources.Trail as X
-import Stratosphere.Resources.User as X
-import Stratosphere.Resources.UserToGroupAddition as X
-import Stratosphere.Resources.VPC as X
-import Stratosphere.Resources.VPCEndpoint as X
-import Stratosphere.Resources.VPCGatewayAttachment as X
-import Stratosphere.Resources.Volume as X
-import Stratosphere.Resources.VolumeAttachment as X
-
-import Stratosphere.ResourceProperties.APIGatewayDeploymentStageDescription as X
-import Stratosphere.ResourceProperties.APIGatewayDeploymentStageDescriptionMethodSetting as X
-import Stratosphere.ResourceProperties.AccessLoggingPolicy as X
-import Stratosphere.ResourceProperties.AliasTarget as X
-import Stratosphere.ResourceProperties.ApiGatewayIntegration as X
-import Stratosphere.ResourceProperties.ApiGatewayIntegrationResponse as X
-import Stratosphere.ResourceProperties.ApiGatewayMethodResponse as X
-import Stratosphere.ResourceProperties.ApiGatewayRestApiS3Location as X
-import Stratosphere.ResourceProperties.ApiGatewayStageMethodSetting as X
-import Stratosphere.ResourceProperties.ApiGatewayUsagePlanApiStage as X
-import Stratosphere.ResourceProperties.ApiGatewayUsagePlanQuotaSettings as X
-import Stratosphere.ResourceProperties.ApiGatewayUsagePlanThrottleSettings as X
-import Stratosphere.ResourceProperties.AppCookieStickinessPolicy as X
-import Stratosphere.ResourceProperties.AutoScalingBlockDeviceMapping as X
-import Stratosphere.ResourceProperties.AutoScalingEBSBlockDevice as X
-import Stratosphere.ResourceProperties.AutoScalingMetricsCollection as X
-import Stratosphere.ResourceProperties.AutoScalingNotificationConfigurations as X
-import Stratosphere.ResourceProperties.AutoScalingTags as X
-import Stratosphere.ResourceProperties.ConnectionDrainingPolicy as X
-import Stratosphere.ResourceProperties.ConnectionSettings as X
-import Stratosphere.ResourceProperties.DynamoDBAttributeDefinition as X
-import Stratosphere.ResourceProperties.DynamoDBGlobalSecondaryIndex as X
-import Stratosphere.ResourceProperties.DynamoDBKeySchema as X
-import Stratosphere.ResourceProperties.DynamoDBLocalSecondaryIndex as X
-import Stratosphere.ResourceProperties.DynamoDBProjectionObject as X
-import Stratosphere.ResourceProperties.DynamoDBProvisionedThroughput as X
-import Stratosphere.ResourceProperties.DynamoDBStreamSpecification as X
-import Stratosphere.ResourceProperties.EBSBlockDevice as X
-import Stratosphere.ResourceProperties.EC2BlockDeviceMapping as X
-import Stratosphere.ResourceProperties.EC2MountPoint as X
-import Stratosphere.ResourceProperties.EC2SsmAssociationParameters as X
-import Stratosphere.ResourceProperties.EC2SsmAssociations as X
-import Stratosphere.ResourceProperties.ELBPolicy as X
-import Stratosphere.ResourceProperties.HealthCheck as X
-import Stratosphere.ResourceProperties.IAMPolicies as X
-import Stratosphere.ResourceProperties.KinesisFirehoseBufferingHints as X
-import Stratosphere.ResourceProperties.KinesisFirehoseCloudWatchLoggingOptions as X
-import Stratosphere.ResourceProperties.KinesisFirehoseElasticsearchDestinationConfiguration as X
-import Stratosphere.ResourceProperties.KinesisFirehoseElasticsearchRetryOptions as X
-import Stratosphere.ResourceProperties.KinesisFirehoseRedshiftCopyCommand as X
-import Stratosphere.ResourceProperties.KinesisFirehoseRedshiftDestinationConfiguration as X
-import Stratosphere.ResourceProperties.KinesisFirehoseS3DestinationConfiguration as X
-import Stratosphere.ResourceProperties.KinesisFirehoseS3EncryptionConfiguration as X
-import Stratosphere.ResourceProperties.KinesisFirehoseS3KMSEncryptionConfig as X
-import Stratosphere.ResourceProperties.LBCookieStickinessPolicy as X
-import Stratosphere.ResourceProperties.LambdaFunctionCode as X
-import Stratosphere.ResourceProperties.LambdaFunctionVPCConfig as X
-import Stratosphere.ResourceProperties.ListenerProperty as X
-import Stratosphere.ResourceProperties.NameValuePair as X
-import Stratosphere.ResourceProperties.NetworkInterface as X
-import Stratosphere.ResourceProperties.PrivateIpAddressSpecification as X
-import Stratosphere.ResourceProperties.RDSSecurityGroupRule as X
-import Stratosphere.ResourceProperties.RecordSetGeoLocation as X
-import Stratosphere.ResourceProperties.ResourceTag as X
-import Stratosphere.ResourceProperties.S3CorsConfiguration as X
-import Stratosphere.ResourceProperties.S3CorsConfigurationRule as X
-import Stratosphere.ResourceProperties.S3LifecycleConfiguration as X
-import Stratosphere.ResourceProperties.S3LifecycleRule as X
-import Stratosphere.ResourceProperties.S3LifecycleRuleNoncurrentVersionTransition as X
-import Stratosphere.ResourceProperties.S3LifecycleRuleTransition as X
-import Stratosphere.ResourceProperties.S3LoggingConfiguration as X
-import Stratosphere.ResourceProperties.S3NotificationConfiguration as X
-import Stratosphere.ResourceProperties.S3NotificationConfigurationConfigFilter as X
-import Stratosphere.ResourceProperties.S3NotificationConfigurationConfigFilterS3Key as X
-import Stratosphere.ResourceProperties.S3NotificationConfigurationConfigFilterS3KeyRules as X
-import Stratosphere.ResourceProperties.S3NotificationConfigurationLambdaConfiguration as X
-import Stratosphere.ResourceProperties.S3NotificationConfigurationQueueConfiguration as X
-import Stratosphere.ResourceProperties.S3NotificationConfigurationTopicConfiguration as X
-import Stratosphere.ResourceProperties.S3ReplicationConfiguration as X
-import Stratosphere.ResourceProperties.S3ReplicationConfigurationRule as X
-import Stratosphere.ResourceProperties.S3ReplicationConfigurationRulesDestination as X
-import Stratosphere.ResourceProperties.S3VersioningConfiguration as X
-import Stratosphere.ResourceProperties.S3WebsiteConfiguration as X
-import Stratosphere.ResourceProperties.S3WebsiteRedirectAllRequestsTo as X
-import Stratosphere.ResourceProperties.S3WebsiteRedirectRule as X
-import Stratosphere.ResourceProperties.S3WebsiteRoutingRuleCondition as X
-import Stratosphere.ResourceProperties.S3WebsiteRoutingRules as X
-import Stratosphere.ResourceProperties.SNSTopicSubscription as X
-import Stratosphere.ResourceProperties.SQSRedrivePolicy as X
-import Stratosphere.ResourceProperties.SecurityGroupEgressRule as X
-import Stratosphere.ResourceProperties.SecurityGroupIngressRule as X
-import Stratosphere.ResourceProperties.StepAdjustments as X
-import Stratosphere.ResourceProperties.UserLoginProfile as X
-
-import Stratosphere.ResourceAttributes.AutoScalingReplacingUpdate as X
-import Stratosphere.ResourceAttributes.AutoScalingRollingUpdate as X
-import Stratosphere.ResourceAttributes.AutoScalingScheduledAction as X
-import Stratosphere.ResourceAttributes.CreationPolicy as X
-import Stratosphere.ResourceAttributes.ResourceSignal as X
-import Stratosphere.ResourceAttributes.UpdatePolicy as X
-
-import Stratosphere.Helpers
-import Stratosphere.Values
-
-data ResourceProperties
-  = AccessKeyProperties AccessKey
-  | ApiGatewayAccountProperties ApiGatewayAccount
-  | ApiGatewayDeploymentProperties ApiGatewayDeployment
-  | ApiGatewayMethodProperties ApiGatewayMethod
-  | ApiGatewayModelProperties ApiGatewayModel
-  | ApiGatewayResourceProperties ApiGatewayResource
-  | ApiGatewayRestApiProperties ApiGatewayRestApi
-  | ApiGatewayStageProperties ApiGatewayStage
-  | ApiGatewayUsagePlanProperties ApiGatewayUsagePlan
-  | AutoScalingGroupProperties AutoScalingGroup
-  | BucketProperties Bucket
-  | CacheClusterProperties CacheCluster
-  | CacheSubnetGroupProperties CacheSubnetGroup
-  | DBInstanceProperties DBInstance
-  | DBParameterGroupProperties DBParameterGroup
-  | DBSecurityGroupProperties DBSecurityGroup
-  | DBSecurityGroupIngressProperties DBSecurityGroupIngress
-  | DBSubnetGroupProperties DBSubnetGroup
-  | DeliveryStreamProperties DeliveryStream
-  | DynamoDBTableProperties DynamoDBTable
-  | EC2InstanceProperties EC2Instance
-  | EIPProperties EIP
-  | EIPAssociationProperties EIPAssociation
-  | EventsRuleProperties EventsRule
-  | GroupProperties Group
-  | IAMRoleProperties IAMRole
-  | InstanceProfileProperties InstanceProfile
-  | InternetGatewayProperties InternetGateway
-  | KinesisStreamProperties KinesisStream
-  | LambdaAliasProperties LambdaAlias
-  | LambdaFunctionProperties LambdaFunction
-  | LambdaPermissionProperties LambdaPermission
-  | LambdaVersionProperties LambdaVersion
-  | LaunchConfigurationProperties LaunchConfiguration
-  | LifecycleHookProperties LifecycleHook
-  | LoadBalancerProperties LoadBalancer
-  | LogGroupProperties LogGroup
-  | LogStreamProperties LogStream
-  | ManagedPolicyProperties ManagedPolicy
-  | NatGatewayProperties NatGateway
-  | PolicyProperties Policy
-  | RecordSetProperties RecordSet
-  | RecordSetGroupProperties RecordSetGroup
-  | RouteProperties Route
-  | RouteTableProperties RouteTable
-  | S3BucketPolicyProperties S3BucketPolicy
-  | SNSSubscriptionProperties SNSSubscription
-  | SNSTopicProperties SNSTopic
-  | SNSTopicPolicyProperties SNSTopicPolicy
-  | SQSQueueProperties SQSQueue
-  | SQSQueuePolicyProperties SQSQueuePolicy
-  | ScalingPolicyProperties ScalingPolicy
-  | ScheduledActionProperties ScheduledAction
-  | SecurityGroupProperties SecurityGroup
-  | SecurityGroupEgressProperties SecurityGroupEgress
-  | SecurityGroupIngressProperties SecurityGroupIngress
-  | StackProperties Stack
-  | SubnetProperties Subnet
-  | SubnetRouteTableAssociationProperties SubnetRouteTableAssociation
-  | TrailProperties Trail
-  | UserProperties User
-  | UserToGroupAdditionProperties UserToGroupAddition
-  | VPCProperties VPC
-  | VPCEndpointProperties VPCEndpoint
-  | VPCGatewayAttachmentProperties VPCGatewayAttachment
-  | VolumeProperties Volume
-  | VolumeAttachmentProperties VolumeAttachment
-
-  deriving (Show)
-
-data DeletionPolicy
-  = Delete
-  | Retain
-  | Snapshot
-  deriving (Show, Generic)
-
-instance ToJSON DeletionPolicy where
-instance FromJSON DeletionPolicy where
-
-data Resource =
-  Resource
-  { resourceResName :: T.Text
-  , resourceProperties :: ResourceProperties
-  , resourceDeletionPolicy :: Maybe DeletionPolicy
-  , resourceResCreationPolicy :: Maybe CreationPolicy
-  , resourceResUpdatePolicy :: Maybe UpdatePolicy
-  , resourceDependsOn :: Maybe [T.Text]
-  } deriving (Show)
-
-instance ToRef Resource b where
-  toRef r = Ref (resourceResName r)
-
--- | Convenient constructor for 'Resource' with required arguments.
-resource
-  :: T.Text -- ^ Logical name
-  -> ResourceProperties
-  -> Resource
-resource rn rp =
-  Resource
-  { resourceResName = rn
-  , resourceProperties = rp
-  , resourceDeletionPolicy = Nothing
-  , resourceResCreationPolicy = Nothing
-  , resourceResUpdatePolicy = Nothing
-  , resourceDependsOn = Nothing
-  }
-
-$(makeFields ''Resource)
-
-resourceToJSON :: Resource -> Value
-resourceToJSON (Resource _ props dp cp up deps) =
-    object $ resourcePropertiesJSON props ++ catMaybes
-    [ maybeField "DeletionPolicy" dp
-    , maybeField "CreationPolicy" cp
-    , maybeField "UpdatePolicy" up
-    , maybeField "DependsOn" deps
-    ]
-
-resourcePropertiesJSON :: ResourceProperties -> [Pair]
-resourcePropertiesJSON (AccessKeyProperties x) =
-  [ "Type" .= ("AWS::IAM::AccessKey" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (ApiGatewayAccountProperties x) =
-  [ "Type" .= ("Api::Gateway::Account" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (ApiGatewayDeploymentProperties x) =
-  [ "Type" .= ("AWS::ApiGateway::Deployment" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (ApiGatewayMethodProperties x) =
-  [ "Type" .= ("AWS::ApiGateway::Method" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (ApiGatewayModelProperties x) =
-  [ "Type" .= ("AWS::ApiGateway::Model" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (ApiGatewayResourceProperties x) =
-  [ "Type" .= ("AWS::ApiGateway::Resource" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (ApiGatewayRestApiProperties x) =
-  [ "Type" .= ("AWS::ApiGateway::RestApi" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (ApiGatewayStageProperties x) =
-  [ "Type" .= ("AWS::ApiGateway::Stage" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (ApiGatewayUsagePlanProperties x) =
-  [ "Type" .= ("AWS::ApiGateway::UsagePlan" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (AutoScalingGroupProperties x) =
-  [ "Type" .= ("AWS::AutoScaling::AutoScalingGroup" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (BucketProperties x) =
-  [ "Type" .= ("AWS::S3::Bucket" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (CacheClusterProperties x) =
-  [ "Type" .= ("AWS::ElastiCache::CacheCluster" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (CacheSubnetGroupProperties x) =
-  [ "Type" .= ("AWS::ElastiCache::SubnetGroup" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (DBInstanceProperties x) =
-  [ "Type" .= ("AWS::RDS::DBInstance" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (DBParameterGroupProperties x) =
-  [ "Type" .= ("AWS::RDS::DBParameterGroup" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (DBSecurityGroupProperties x) =
-  [ "Type" .= ("AWS::RDS::DBSecurityGroup" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (DBSecurityGroupIngressProperties x) =
-  [ "Type" .= ("AWS::RDS::DBSecurityGroupIngress" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (DBSubnetGroupProperties x) =
-  [ "Type" .= ("AWS::RDS::DBSubnetGroup" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (DeliveryStreamProperties x) =
-  [ "Type" .= ("AWS::KinesisFirehose::DeliveryStream" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (DynamoDBTableProperties x) =
-  [ "Type" .= ("AWS::DynamoDB::Table" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (EC2InstanceProperties x) =
-  [ "Type" .= ("AWS::EC2::Instance" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (EIPProperties x) =
-  [ "Type" .= ("AWS::EC2::EIP" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (EIPAssociationProperties x) =
-  [ "Type" .= ("AWS::EC2::EIPAssociation" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (EventsRuleProperties x) =
-  [ "Type" .= ("AWS::Events::Rule" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (GroupProperties x) =
-  [ "Type" .= ("AWS::IAM::Group" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (IAMRoleProperties x) =
-  [ "Type" .= ("AWS::IAM::Role" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (InstanceProfileProperties x) =
-  [ "Type" .= ("AWS::IAM::InstanceProfile" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (InternetGatewayProperties x) =
-  [ "Type" .= ("AWS::EC2::InternetGateway" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (KinesisStreamProperties x) =
-  [ "Type" .= ("AWS::Kinesis::Stream" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (LambdaAliasProperties x) =
-  [ "Type" .= ("AWS::Lambda::Alias" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (LambdaFunctionProperties x) =
-  [ "Type" .= ("AWS::Lambda::Function" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (LambdaPermissionProperties x) =
-  [ "Type" .= ("AWS::Lambda::Permission" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (LambdaVersionProperties x) =
-  [ "Type" .= ("AWS::Lambda::Version" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (LaunchConfigurationProperties x) =
-  [ "Type" .= ("AWS::AutoScaling::LaunchConfiguration" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (LifecycleHookProperties x) =
-  [ "Type" .= ("AWS::AutoScaling::LifecycleHook" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (LoadBalancerProperties x) =
-  [ "Type" .= ("AWS::ElasticLoadBalancing::LoadBalancer" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (LogGroupProperties x) =
-  [ "Type" .= ("AWS::Logs::LogGroup" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (LogStreamProperties x) =
-  [ "Type" .= ("AWS::Logs::LogStream" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (ManagedPolicyProperties x) =
-  [ "Type" .= ("AWS::IAM::ManagedPolicy" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (NatGatewayProperties x) =
-  [ "Type" .= ("AWS::EC2::NatGateway" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (PolicyProperties x) =
-  [ "Type" .= ("AWS::IAM::Policy" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (RecordSetProperties x) =
-  [ "Type" .= ("AWS::Route53::RecordSet" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (RecordSetGroupProperties x) =
-  [ "Type" .= ("AWS::Route53::RecordSetGroup" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (RouteProperties x) =
-  [ "Type" .= ("AWS::EC2::Route" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (RouteTableProperties x) =
-  [ "Type" .= ("AWS::EC2::RouteTable" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (S3BucketPolicyProperties x) =
-  [ "Type" .= ("AWS::S3::BucketPolicy" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (SNSSubscriptionProperties x) =
-  [ "Type" .= ("AWS::SNS::Subscription" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (SNSTopicProperties x) =
-  [ "Type" .= ("AWS::SNS::Topic" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (SNSTopicPolicyProperties x) =
-  [ "Type" .= ("AWS::SNS::TopicPolicy" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (SQSQueueProperties x) =
-  [ "Type" .= ("AWS::SQS::Queue" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (SQSQueuePolicyProperties x) =
-  [ "Type" .= ("AWS::SQS::QueuePolicy" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (ScalingPolicyProperties x) =
-  [ "Type" .= ("AWS::AutoScaling::ScalingPolicy" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (ScheduledActionProperties x) =
-  [ "Type" .= ("AWS::AutoScaling::ScheduledAction" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (SecurityGroupProperties x) =
-  [ "Type" .= ("AWS::EC2::SecurityGroup" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (SecurityGroupEgressProperties x) =
-  [ "Type" .= ("AWS::EC2::SecurityGroupEgress" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (SecurityGroupIngressProperties x) =
-  [ "Type" .= ("AWS::EC2::SecurityGroupIngress" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (StackProperties x) =
-  [ "Type" .= ("AWS::CloudFormation::Stack" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (SubnetProperties x) =
-  [ "Type" .= ("AWS::EC2::Subnet" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (SubnetRouteTableAssociationProperties x) =
-  [ "Type" .= ("AWS::EC2::SubnetRouteTableAssociation" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (TrailProperties x) =
-  [ "Type" .= ("AWS::CloudTrail::Trail" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (UserProperties x) =
-  [ "Type" .= ("AWS::IAM::User" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (UserToGroupAdditionProperties x) =
-  [ "Type" .= ("AWS::IAM::UserToGroupAddition" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (VPCProperties x) =
-  [ "Type" .= ("AWS::EC2::VPC" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (VPCEndpointProperties x) =
-  [ "Type" .= ("AWS::EC2::VPCEndpoint" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (VPCGatewayAttachmentProperties x) =
-  [ "Type" .= ("AWS::EC2::VPCGatewayAttachment" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (VolumeProperties x) =
-  [ "Type" .= ("AWS::EC2::Volume" :: String), "Properties" .= toJSON x]
-resourcePropertiesJSON (VolumeAttachmentProperties x) =
-  [ "Type" .= ("AWS::EC2::VolumeAttachment" :: String), "Properties" .= toJSON x]
-
-
-resourceFromJSON :: T.Text -> Object -> Parser Resource
-resourceFromJSON n o =
-    do type' <- o .: "Type" :: Parser String
-       props <- case type' of
-         "AWS::IAM::AccessKey" -> AccessKeyProperties <$> (o .: "Properties")
-         "Api::Gateway::Account" -> ApiGatewayAccountProperties <$> (o .: "Properties")
-         "AWS::ApiGateway::Deployment" -> ApiGatewayDeploymentProperties <$> (o .: "Properties")
-         "AWS::ApiGateway::Method" -> ApiGatewayMethodProperties <$> (o .: "Properties")
-         "AWS::ApiGateway::Model" -> ApiGatewayModelProperties <$> (o .: "Properties")
-         "AWS::ApiGateway::Resource" -> ApiGatewayResourceProperties <$> (o .: "Properties")
-         "AWS::ApiGateway::RestApi" -> ApiGatewayRestApiProperties <$> (o .: "Properties")
-         "AWS::ApiGateway::Stage" -> ApiGatewayStageProperties <$> (o .: "Properties")
-         "AWS::ApiGateway::UsagePlan" -> ApiGatewayUsagePlanProperties <$> (o .: "Properties")
-         "AWS::AutoScaling::AutoScalingGroup" -> AutoScalingGroupProperties <$> (o .: "Properties")
-         "AWS::S3::Bucket" -> BucketProperties <$> (o .: "Properties")
-         "AWS::ElastiCache::CacheCluster" -> CacheClusterProperties <$> (o .: "Properties")
-         "AWS::ElastiCache::SubnetGroup" -> CacheSubnetGroupProperties <$> (o .: "Properties")
-         "AWS::RDS::DBInstance" -> DBInstanceProperties <$> (o .: "Properties")
-         "AWS::RDS::DBParameterGroup" -> DBParameterGroupProperties <$> (o .: "Properties")
-         "AWS::RDS::DBSecurityGroup" -> DBSecurityGroupProperties <$> (o .: "Properties")
-         "AWS::RDS::DBSecurityGroupIngress" -> DBSecurityGroupIngressProperties <$> (o .: "Properties")
-         "AWS::RDS::DBSubnetGroup" -> DBSubnetGroupProperties <$> (o .: "Properties")
-         "AWS::KinesisFirehose::DeliveryStream" -> DeliveryStreamProperties <$> (o .: "Properties")
-         "AWS::DynamoDB::Table" -> DynamoDBTableProperties <$> (o .: "Properties")
-         "AWS::EC2::Instance" -> EC2InstanceProperties <$> (o .: "Properties")
-         "AWS::EC2::EIP" -> EIPProperties <$> (o .: "Properties")
-         "AWS::EC2::EIPAssociation" -> EIPAssociationProperties <$> (o .: "Properties")
-         "AWS::Events::Rule" -> EventsRuleProperties <$> (o .: "Properties")
-         "AWS::IAM::Group" -> GroupProperties <$> (o .: "Properties")
-         "AWS::IAM::Role" -> IAMRoleProperties <$> (o .: "Properties")
-         "AWS::IAM::InstanceProfile" -> InstanceProfileProperties <$> (o .: "Properties")
-         "AWS::EC2::InternetGateway" -> InternetGatewayProperties <$> (o .: "Properties")
-         "AWS::Kinesis::Stream" -> KinesisStreamProperties <$> (o .: "Properties")
-         "AWS::Lambda::Alias" -> LambdaAliasProperties <$> (o .: "Properties")
-         "AWS::Lambda::Function" -> LambdaFunctionProperties <$> (o .: "Properties")
-         "AWS::Lambda::Permission" -> LambdaPermissionProperties <$> (o .: "Properties")
-         "AWS::Lambda::Version" -> LambdaVersionProperties <$> (o .: "Properties")
-         "AWS::AutoScaling::LaunchConfiguration" -> LaunchConfigurationProperties <$> (o .: "Properties")
-         "AWS::AutoScaling::LifecycleHook" -> LifecycleHookProperties <$> (o .: "Properties")
-         "AWS::ElasticLoadBalancing::LoadBalancer" -> LoadBalancerProperties <$> (o .: "Properties")
-         "AWS::Logs::LogGroup" -> LogGroupProperties <$> (o .: "Properties")
-         "AWS::Logs::LogStream" -> LogStreamProperties <$> (o .: "Properties")
-         "AWS::IAM::ManagedPolicy" -> ManagedPolicyProperties <$> (o .: "Properties")
-         "AWS::EC2::NatGateway" -> NatGatewayProperties <$> (o .: "Properties")
-         "AWS::IAM::Policy" -> PolicyProperties <$> (o .: "Properties")
-         "AWS::Route53::RecordSet" -> RecordSetProperties <$> (o .: "Properties")
-         "AWS::Route53::RecordSetGroup" -> RecordSetGroupProperties <$> (o .: "Properties")
-         "AWS::EC2::Route" -> RouteProperties <$> (o .: "Properties")
-         "AWS::EC2::RouteTable" -> RouteTableProperties <$> (o .: "Properties")
-         "AWS::S3::BucketPolicy" -> S3BucketPolicyProperties <$> (o .: "Properties")
-         "AWS::SNS::Subscription" -> SNSSubscriptionProperties <$> (o .: "Properties")
-         "AWS::SNS::Topic" -> SNSTopicProperties <$> (o .: "Properties")
-         "AWS::SNS::TopicPolicy" -> SNSTopicPolicyProperties <$> (o .: "Properties")
-         "AWS::SQS::Queue" -> SQSQueueProperties <$> (o .: "Properties")
-         "AWS::SQS::QueuePolicy" -> SQSQueuePolicyProperties <$> (o .: "Properties")
-         "AWS::AutoScaling::ScalingPolicy" -> ScalingPolicyProperties <$> (o .: "Properties")
-         "AWS::AutoScaling::ScheduledAction" -> ScheduledActionProperties <$> (o .: "Properties")
-         "AWS::EC2::SecurityGroup" -> SecurityGroupProperties <$> (o .: "Properties")
-         "AWS::EC2::SecurityGroupEgress" -> SecurityGroupEgressProperties <$> (o .: "Properties")
-         "AWS::EC2::SecurityGroupIngress" -> SecurityGroupIngressProperties <$> (o .: "Properties")
-         "AWS::CloudFormation::Stack" -> StackProperties <$> (o .: "Properties")
-         "AWS::EC2::Subnet" -> SubnetProperties <$> (o .: "Properties")
-         "AWS::EC2::SubnetRouteTableAssociation" -> SubnetRouteTableAssociationProperties <$> (o .: "Properties")
-         "AWS::CloudTrail::Trail" -> TrailProperties <$> (o .: "Properties")
-         "AWS::IAM::User" -> UserProperties <$> (o .: "Properties")
-         "AWS::IAM::UserToGroupAddition" -> UserToGroupAdditionProperties <$> (o .: "Properties")
-         "AWS::EC2::VPC" -> VPCProperties <$> (o .: "Properties")
-         "AWS::EC2::VPCEndpoint" -> VPCEndpointProperties <$> (o .: "Properties")
-         "AWS::EC2::VPCGatewayAttachment" -> VPCGatewayAttachmentProperties <$> (o .: "Properties")
-         "AWS::EC2::Volume" -> VolumeProperties <$> (o .: "Properties")
-         "AWS::EC2::VolumeAttachment" -> VolumeAttachmentProperties <$> (o .: "Properties")
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE ExistentialQuantification #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE FunctionalDependencies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeFamilies #-}
+
+#if MIN_VERSION_GLASGOW_HASKELL(8,0,1,0)
+{-# OPTIONS_GHC -fmax-pmcheck-iterations=10000000 #-}
+#endif
+
+-- | See:
+-- http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resources-section-structure.html
+--
+-- The required Resources section declare the AWS resources that you want as
+-- part of your stack, such as an Amazon EC2 instance or an Amazon S3 bucket.
+-- You must declare each resource separately; however, you can specify multiple
+-- resources of the same type. If you declare multiple resources, separate them
+-- with commas.
+
+module Stratosphere.Resources
+     ( module X
+     , Resource (..)
+     , resource
+     , resName
+     , properties
+     , deletionPolicy
+     , resCreationPolicy
+     , resUpdatePolicy
+     , dependsOn
+     , ResourceProperties (..)
+     , DeletionPolicy (..)
+     , Resources (..)
+     ) where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Maybe (catMaybes)
+import qualified Data.Text as T
+import GHC.Exts (IsList(..))
+import GHC.Generics (Generic)
+
+import Stratosphere.Resources.ApiGatewayAccount as X
+import Stratosphere.Resources.ApiGatewayApiKey as X
+import Stratosphere.Resources.ApiGatewayAuthorizer as X
+import Stratosphere.Resources.ApiGatewayBasePathMapping as X
+import Stratosphere.Resources.ApiGatewayClientCertificate as X
+import Stratosphere.Resources.ApiGatewayDeployment as X
+import Stratosphere.Resources.ApiGatewayMethod as X
+import Stratosphere.Resources.ApiGatewayModel as X
+import Stratosphere.Resources.ApiGatewayResource as X
+import Stratosphere.Resources.ApiGatewayRestApi as X
+import Stratosphere.Resources.ApiGatewayStage as X
+import Stratosphere.Resources.ApiGatewayUsagePlan as X
+import Stratosphere.Resources.ApplicationAutoScalingScalableTarget as X
+import Stratosphere.Resources.ApplicationAutoScalingScalingPolicy as X
+import Stratosphere.Resources.AutoScalingAutoScalingGroup as X
+import Stratosphere.Resources.AutoScalingLaunchConfiguration as X
+import Stratosphere.Resources.AutoScalingLifecycleHook as X
+import Stratosphere.Resources.AutoScalingScalingPolicy as X
+import Stratosphere.Resources.AutoScalingScheduledAction as X
+import Stratosphere.Resources.CertificateManagerCertificate as X
+import Stratosphere.Resources.CloudFormationCustomResource as X
+import Stratosphere.Resources.CloudFormationStack as X
+import Stratosphere.Resources.CloudFormationWaitCondition as X
+import Stratosphere.Resources.CloudFormationWaitConditionHandle as X
+import Stratosphere.Resources.CloudFrontDistribution as X
+import Stratosphere.Resources.CloudTrailTrail as X
+import Stratosphere.Resources.CloudWatchAlarm as X
+import Stratosphere.Resources.CodeBuildProject as X
+import Stratosphere.Resources.CodeCommitRepository as X
+import Stratosphere.Resources.CodeDeployApplication as X
+import Stratosphere.Resources.CodeDeployDeploymentConfig as X
+import Stratosphere.Resources.CodeDeployDeploymentGroup as X
+import Stratosphere.Resources.CodePipelineCustomActionType as X
+import Stratosphere.Resources.CodePipelinePipeline as X
+import Stratosphere.Resources.ConfigConfigRule as X
+import Stratosphere.Resources.ConfigConfigurationRecorder as X
+import Stratosphere.Resources.ConfigDeliveryChannel as X
+import Stratosphere.Resources.DataPipelinePipeline as X
+import Stratosphere.Resources.DirectoryServiceMicrosoftAD as X
+import Stratosphere.Resources.DirectoryServiceSimpleAD as X
+import Stratosphere.Resources.DynamoDBTable as X
+import Stratosphere.Resources.EC2CustomerGateway as X
+import Stratosphere.Resources.EC2DHCPOptions as X
+import Stratosphere.Resources.EC2EIP as X
+import Stratosphere.Resources.EC2EIPAssociation as X
+import Stratosphere.Resources.EC2FlowLog as X
+import Stratosphere.Resources.EC2Host as X
+import Stratosphere.Resources.EC2Instance as X
+import Stratosphere.Resources.EC2InternetGateway as X
+import Stratosphere.Resources.EC2NatGateway as X
+import Stratosphere.Resources.EC2NetworkAcl as X
+import Stratosphere.Resources.EC2NetworkAclEntry as X
+import Stratosphere.Resources.EC2NetworkInterface as X
+import Stratosphere.Resources.EC2NetworkInterfaceAttachment as X
+import Stratosphere.Resources.EC2PlacementGroup as X
+import Stratosphere.Resources.EC2Route as X
+import Stratosphere.Resources.EC2RouteTable as X
+import Stratosphere.Resources.EC2SecurityGroup as X
+import Stratosphere.Resources.EC2SecurityGroupEgress as X
+import Stratosphere.Resources.EC2SecurityGroupIngress as X
+import Stratosphere.Resources.EC2SpotFleet as X
+import Stratosphere.Resources.EC2Subnet as X
+import Stratosphere.Resources.EC2SubnetCidrBlock as X
+import Stratosphere.Resources.EC2SubnetNetworkAclAssociation as X
+import Stratosphere.Resources.EC2SubnetRouteTableAssociation as X
+import Stratosphere.Resources.EC2VPC as X
+import Stratosphere.Resources.EC2VPCCidrBlock as X
+import Stratosphere.Resources.EC2VPCDHCPOptionsAssociation as X
+import Stratosphere.Resources.EC2VPCEndpoint as X
+import Stratosphere.Resources.EC2VPCGatewayAttachment as X
+import Stratosphere.Resources.EC2VPCPeeringConnection as X
+import Stratosphere.Resources.EC2VPNConnection as X
+import Stratosphere.Resources.EC2VPNConnectionRoute as X
+import Stratosphere.Resources.EC2VPNGateway as X
+import Stratosphere.Resources.EC2VPNGatewayRoutePropagation as X
+import Stratosphere.Resources.EC2Volume as X
+import Stratosphere.Resources.EC2VolumeAttachment as X
+import Stratosphere.Resources.ECRRepository as X
+import Stratosphere.Resources.ECSCluster as X
+import Stratosphere.Resources.ECSService as X
+import Stratosphere.Resources.ECSTaskDefinition as X
+import Stratosphere.Resources.EFSFileSystem as X
+import Stratosphere.Resources.EFSMountTarget as X
+import Stratosphere.Resources.EMRCluster as X
+import Stratosphere.Resources.EMRInstanceGroupConfig as X
+import Stratosphere.Resources.EMRStep as X
+import Stratosphere.Resources.ElastiCacheCacheCluster as X
+import Stratosphere.Resources.ElastiCacheParameterGroup as X
+import Stratosphere.Resources.ElastiCacheReplicationGroup as X
+import Stratosphere.Resources.ElastiCacheSecurityGroup as X
+import Stratosphere.Resources.ElastiCacheSecurityGroupIngress as X
+import Stratosphere.Resources.ElastiCacheSubnetGroup as X
+import Stratosphere.Resources.ElasticBeanstalkApplication as X
+import Stratosphere.Resources.ElasticBeanstalkApplicationVersion as X
+import Stratosphere.Resources.ElasticBeanstalkConfigurationTemplate as X
+import Stratosphere.Resources.ElasticBeanstalkEnvironment as X
+import Stratosphere.Resources.ElasticLoadBalancingLoadBalancer as X
+import Stratosphere.Resources.ElasticLoadBalancingV2Listener as X
+import Stratosphere.Resources.ElasticLoadBalancingV2ListenerRule as X
+import Stratosphere.Resources.ElasticLoadBalancingV2LoadBalancer as X
+import Stratosphere.Resources.ElasticLoadBalancingV2TargetGroup as X
+import Stratosphere.Resources.ElasticsearchDomain as X
+import Stratosphere.Resources.EventsRule as X
+import Stratosphere.Resources.GameLiftAlias as X
+import Stratosphere.Resources.GameLiftBuild as X
+import Stratosphere.Resources.GameLiftFleet as X
+import Stratosphere.Resources.IAMAccessKey as X
+import Stratosphere.Resources.IAMGroup as X
+import Stratosphere.Resources.IAMInstanceProfile as X
+import Stratosphere.Resources.IAMManagedPolicy as X
+import Stratosphere.Resources.IAMPolicy as X
+import Stratosphere.Resources.IAMRole as X
+import Stratosphere.Resources.IAMUser as X
+import Stratosphere.Resources.IAMUserToGroupAddition as X
+import Stratosphere.Resources.IoTCertificate as X
+import Stratosphere.Resources.IoTPolicy as X
+import Stratosphere.Resources.IoTPolicyPrincipalAttachment as X
+import Stratosphere.Resources.IoTThing as X
+import Stratosphere.Resources.IoTThingPrincipalAttachment as X
+import Stratosphere.Resources.IoTTopicRule as X
+import Stratosphere.Resources.KMSAlias as X
+import Stratosphere.Resources.KMSKey as X
+import Stratosphere.Resources.KinesisStream as X
+import Stratosphere.Resources.KinesisFirehoseDeliveryStream as X
+import Stratosphere.Resources.LambdaAlias as X
+import Stratosphere.Resources.LambdaEventSourceMapping as X
+import Stratosphere.Resources.LambdaFunction as X
+import Stratosphere.Resources.LambdaPermission as X
+import Stratosphere.Resources.LambdaVersion as X
+import Stratosphere.Resources.LogsDestination as X
+import Stratosphere.Resources.LogsLogGroup as X
+import Stratosphere.Resources.LogsLogStream as X
+import Stratosphere.Resources.LogsMetricFilter as X
+import Stratosphere.Resources.LogsSubscriptionFilter as X
+import Stratosphere.Resources.OpsWorksApp as X
+import Stratosphere.Resources.OpsWorksElasticLoadBalancerAttachment as X
+import Stratosphere.Resources.OpsWorksInstance as X
+import Stratosphere.Resources.OpsWorksLayer as X
+import Stratosphere.Resources.OpsWorksStack as X
+import Stratosphere.Resources.OpsWorksUserProfile as X
+import Stratosphere.Resources.OpsWorksVolume as X
+import Stratosphere.Resources.RDSDBCluster as X
+import Stratosphere.Resources.RDSDBClusterParameterGroup as X
+import Stratosphere.Resources.RDSDBInstance as X
+import Stratosphere.Resources.RDSDBParameterGroup as X
+import Stratosphere.Resources.RDSDBSecurityGroup as X
+import Stratosphere.Resources.RDSDBSecurityGroupIngress as X
+import Stratosphere.Resources.RDSDBSubnetGroup as X
+import Stratosphere.Resources.RDSEventSubscription as X
+import Stratosphere.Resources.RDSOptionGroup as X
+import Stratosphere.Resources.RedshiftCluster as X
+import Stratosphere.Resources.RedshiftClusterParameterGroup as X
+import Stratosphere.Resources.RedshiftClusterSecurityGroup as X
+import Stratosphere.Resources.RedshiftClusterSecurityGroupIngress as X
+import Stratosphere.Resources.RedshiftClusterSubnetGroup as X
+import Stratosphere.Resources.Route53HealthCheck as X
+import Stratosphere.Resources.Route53HostedZone as X
+import Stratosphere.Resources.Route53RecordSet as X
+import Stratosphere.Resources.Route53RecordSetGroup as X
+import Stratosphere.Resources.S3Bucket as X
+import Stratosphere.Resources.S3BucketPolicy as X
+import Stratosphere.Resources.SDBDomain as X
+import Stratosphere.Resources.SNSSubscription as X
+import Stratosphere.Resources.SNSTopic as X
+import Stratosphere.Resources.SNSTopicPolicy as X
+import Stratosphere.Resources.SQSQueue as X
+import Stratosphere.Resources.SQSQueuePolicy as X
+import Stratosphere.Resources.SSMAssociation as X
+import Stratosphere.Resources.SSMDocument as X
+import Stratosphere.Resources.WAFByteMatchSet as X
+import Stratosphere.Resources.WAFIPSet as X
+import Stratosphere.Resources.WAFRule as X
+import Stratosphere.Resources.WAFSizeConstraintSet as X
+import Stratosphere.Resources.WAFSqlInjectionMatchSet as X
+import Stratosphere.Resources.WAFWebACL as X
+import Stratosphere.Resources.WAFXssMatchSet as X
+import Stratosphere.Resources.WorkSpacesWorkspace as X
+import Stratosphere.ResourceProperties.ApiGatewayApiKeyStageKey as X
+import Stratosphere.ResourceProperties.ApiGatewayDeploymentMethodSetting as X
+import Stratosphere.ResourceProperties.ApiGatewayDeploymentStageDescription as X
+import Stratosphere.ResourceProperties.ApiGatewayMethodIntegration as X
+import Stratosphere.ResourceProperties.ApiGatewayMethodIntegrationResponse as X
+import Stratosphere.ResourceProperties.ApiGatewayMethodMethodResponse as X
+import Stratosphere.ResourceProperties.ApiGatewayRestApiS3Location as X
+import Stratosphere.ResourceProperties.ApiGatewayStageMethodSetting as X
+import Stratosphere.ResourceProperties.ApiGatewayUsagePlanApiStage as X
+import Stratosphere.ResourceProperties.ApiGatewayUsagePlanQuotaSettings as X
+import Stratosphere.ResourceProperties.ApiGatewayUsagePlanThrottleSettings as X
+import Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepAdjustment as X
+import Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration as X
+import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupMetricsCollection as X
+import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupNotificationConfigurations as X
+import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupTagProperty as X
+import Stratosphere.ResourceProperties.AutoScalingLaunchConfigurationBlockDevice as X
+import Stratosphere.ResourceProperties.AutoScalingLaunchConfigurationBlockDeviceMapping as X
+import Stratosphere.ResourceProperties.AutoScalingScalingPolicyStepAdjustment as X
+import Stratosphere.ResourceProperties.CertificateManagerCertificateDomainValidationOption as X
+import Stratosphere.ResourceProperties.CloudFrontDistributionCacheBehavior as X
+import Stratosphere.ResourceProperties.CloudFrontDistributionCookies as X
+import Stratosphere.ResourceProperties.CloudFrontDistributionCustomErrorResponse as X
+import Stratosphere.ResourceProperties.CloudFrontDistributionCustomOriginConfig as X
+import Stratosphere.ResourceProperties.CloudFrontDistributionDefaultCacheBehavior as X
+import Stratosphere.ResourceProperties.CloudFrontDistributionDistributionConfig as X
+import Stratosphere.ResourceProperties.CloudFrontDistributionForwardedValues as X
+import Stratosphere.ResourceProperties.CloudFrontDistributionGeoRestriction as X
+import Stratosphere.ResourceProperties.CloudFrontDistributionLogging as X
+import Stratosphere.ResourceProperties.CloudFrontDistributionOrigin as X
+import Stratosphere.ResourceProperties.CloudFrontDistributionOriginCustomHeader as X
+import Stratosphere.ResourceProperties.CloudFrontDistributionRestrictions as X
+import Stratosphere.ResourceProperties.CloudFrontDistributionS3OriginConfig as X
+import Stratosphere.ResourceProperties.CloudFrontDistributionViewerCertificate as X
+import Stratosphere.ResourceProperties.CloudWatchAlarmDimension as X
+import Stratosphere.ResourceProperties.CodeBuildProjectArtifacts as X
+import Stratosphere.ResourceProperties.CodeBuildProjectEnvironment as X
+import Stratosphere.ResourceProperties.CodeBuildProjectEnvironmentVariable as X
+import Stratosphere.ResourceProperties.CodeBuildProjectSource as X
+import Stratosphere.ResourceProperties.CodeBuildProjectSourceAuth as X
+import Stratosphere.ResourceProperties.CodeCommitRepositoryRepositoryTrigger as X
+import Stratosphere.ResourceProperties.CodeDeployDeploymentConfigMinimumHealthyHosts as X
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupDeployment as X
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupEc2TagFilter as X
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupGitHubLocation as X
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupOnPremisesInstanceTagFilter as X
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupRevision as X
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupS3Location as X
+import Stratosphere.ResourceProperties.CodePipelineCustomActionTypeArtifactDetails as X
+import Stratosphere.ResourceProperties.CodePipelineCustomActionTypeConfigurationProperties as X
+import Stratosphere.ResourceProperties.CodePipelineCustomActionTypeSettings as X
+import Stratosphere.ResourceProperties.CodePipelinePipelineActionDeclaration as X
+import Stratosphere.ResourceProperties.CodePipelinePipelineActionTypeId as X
+import Stratosphere.ResourceProperties.CodePipelinePipelineArtifactStore as X
+import Stratosphere.ResourceProperties.CodePipelinePipelineBlockerDeclaration as X
+import Stratosphere.ResourceProperties.CodePipelinePipelineEncryptionKey as X
+import Stratosphere.ResourceProperties.CodePipelinePipelineInputArtifact as X
+import Stratosphere.ResourceProperties.CodePipelinePipelineOutputArtifact as X
+import Stratosphere.ResourceProperties.CodePipelinePipelineStageDeclaration as X
+import Stratosphere.ResourceProperties.CodePipelinePipelineStageTransition as X
+import Stratosphere.ResourceProperties.ConfigConfigRuleScope as X
+import Stratosphere.ResourceProperties.ConfigConfigRuleSource as X
+import Stratosphere.ResourceProperties.ConfigConfigRuleSourceDetail as X
+import Stratosphere.ResourceProperties.ConfigConfigurationRecorderRecordingGroup as X
+import Stratosphere.ResourceProperties.ConfigDeliveryChannelConfigSnapshotDeliveryProperties as X
+import Stratosphere.ResourceProperties.DataPipelinePipelineField as X
+import Stratosphere.ResourceProperties.DataPipelinePipelineParameterAttribute as X
+import Stratosphere.ResourceProperties.DataPipelinePipelineParameterObject as X
+import Stratosphere.ResourceProperties.DataPipelinePipelineParameterValue as X
+import Stratosphere.ResourceProperties.DataPipelinePipelinePipelineObject as X
+import Stratosphere.ResourceProperties.DataPipelinePipelinePipelineTag as X
+import Stratosphere.ResourceProperties.DirectoryServiceMicrosoftADVpcSettings as X
+import Stratosphere.ResourceProperties.DirectoryServiceSimpleADVpcSettings as X
+import Stratosphere.ResourceProperties.DynamoDBTableAttributeDefinition as X
+import Stratosphere.ResourceProperties.DynamoDBTableGlobalSecondaryIndex as X
+import Stratosphere.ResourceProperties.DynamoDBTableKeySchema as X
+import Stratosphere.ResourceProperties.DynamoDBTableLocalSecondaryIndex as X
+import Stratosphere.ResourceProperties.DynamoDBTableProjection as X
+import Stratosphere.ResourceProperties.DynamoDBTableProvisionedThroughput as X
+import Stratosphere.ResourceProperties.DynamoDBTableStreamSpecification as X
+import Stratosphere.ResourceProperties.EC2DHCPOptionsTag as X
+import Stratosphere.ResourceProperties.EC2InstanceAssociationParameter as X
+import Stratosphere.ResourceProperties.EC2InstanceBlockDeviceMapping as X
+import Stratosphere.ResourceProperties.EC2InstanceEbs as X
+import Stratosphere.ResourceProperties.EC2InstanceInstanceIpv6Address as X
+import Stratosphere.ResourceProperties.EC2InstanceNetworkInterface as X
+import Stratosphere.ResourceProperties.EC2InstanceNoDevice as X
+import Stratosphere.ResourceProperties.EC2InstancePrivateIpAddressSpecification as X
+import Stratosphere.ResourceProperties.EC2InstanceSsmAssociation as X
+import Stratosphere.ResourceProperties.EC2InstanceVolume as X
+import Stratosphere.ResourceProperties.EC2NetworkAclEntryIcmp as X
+import Stratosphere.ResourceProperties.EC2NetworkAclEntryPortRange as X
+import Stratosphere.ResourceProperties.EC2NetworkInterfaceInstanceIpv6Address as X
+import Stratosphere.ResourceProperties.EC2NetworkInterfacePrivateIpAddressSpecification as X
+import Stratosphere.ResourceProperties.EC2SecurityGroupRule as X
+import Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMappings as X
+import Stratosphere.ResourceProperties.EC2SpotFleetEbs as X
+import Stratosphere.ResourceProperties.EC2SpotFleetIamInstanceProfile as X
+import Stratosphere.ResourceProperties.EC2SpotFleetInstanceIpv6Address as X
+import Stratosphere.ResourceProperties.EC2SpotFleetLaunchSpecifications as X
+import Stratosphere.ResourceProperties.EC2SpotFleetMonitoring as X
+import Stratosphere.ResourceProperties.EC2SpotFleetNetworkInterfaces as X
+import Stratosphere.ResourceProperties.EC2SpotFleetPlacement as X
+import Stratosphere.ResourceProperties.EC2SpotFleetPrivateIpAddresses as X
+import Stratosphere.ResourceProperties.EC2SpotFleetSecurityGroups as X
+import Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetRequestConfigData as X
+import Stratosphere.ResourceProperties.ECSServiceDeploymentConfiguration as X
+import Stratosphere.ResourceProperties.ECSServiceLoadBalancer as X
+import Stratosphere.ResourceProperties.ECSTaskDefinitionContainerDefinition as X
+import Stratosphere.ResourceProperties.ECSTaskDefinitionHostEntry as X
+import Stratosphere.ResourceProperties.ECSTaskDefinitionHostVolumeProperties as X
+import Stratosphere.ResourceProperties.ECSTaskDefinitionKeyValuePair as X
+import Stratosphere.ResourceProperties.ECSTaskDefinitionLogConfiguration as X
+import Stratosphere.ResourceProperties.ECSTaskDefinitionMountPoint as X
+import Stratosphere.ResourceProperties.ECSTaskDefinitionPortMapping as X
+import Stratosphere.ResourceProperties.ECSTaskDefinitionUlimit as X
+import Stratosphere.ResourceProperties.ECSTaskDefinitionVolume as X
+import Stratosphere.ResourceProperties.ECSTaskDefinitionVolumeFrom as X
+import Stratosphere.ResourceProperties.EFSFileSystemElasticFileSystemTag as X
+import Stratosphere.ResourceProperties.EMRClusterApplication as X
+import Stratosphere.ResourceProperties.EMRClusterBootstrapActionConfig as X
+import Stratosphere.ResourceProperties.EMRClusterConfiguration as X
+import Stratosphere.ResourceProperties.EMRClusterEbsBlockDeviceConfig as X
+import Stratosphere.ResourceProperties.EMRClusterEbsConfiguration as X
+import Stratosphere.ResourceProperties.EMRClusterInstanceGroupConfig as X
+import Stratosphere.ResourceProperties.EMRClusterJobFlowInstancesConfig as X
+import Stratosphere.ResourceProperties.EMRClusterPlacementType as X
+import Stratosphere.ResourceProperties.EMRClusterScriptBootstrapActionConfig as X
+import Stratosphere.ResourceProperties.EMRClusterVolumeSpecification as X
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigConfiguration as X
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigEbsBlockDeviceConfig as X
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigEbsConfiguration as X
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigVolumeSpecification as X
+import Stratosphere.ResourceProperties.EMRStepHadoopJarStepConfig as X
+import Stratosphere.ResourceProperties.EMRStepKeyValue as X
+import Stratosphere.ResourceProperties.ElastiCacheReplicationGroupNodeGroupConfiguration as X
+import Stratosphere.ResourceProperties.ElasticBeanstalkApplicationVersionSourceBundle as X
+import Stratosphere.ResourceProperties.ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting as X
+import Stratosphere.ResourceProperties.ElasticBeanstalkConfigurationTemplateSourceConfiguration as X
+import Stratosphere.ResourceProperties.ElasticBeanstalkEnvironmentOptionSettings as X
+import Stratosphere.ResourceProperties.ElasticBeanstalkEnvironmentTier as X
+import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerAccessLoggingPolicy as X
+import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy as X
+import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy as X
+import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerConnectionSettings as X
+import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerHealthCheck as X
+import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy as X
+import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerListeners as X
+import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerPolicies as X
+import Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerAction as X
+import Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerCertificate as X
+import Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerRuleAction as X
+import Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerRuleRuleCondition as X
+import Stratosphere.ResourceProperties.ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute as X
+import Stratosphere.ResourceProperties.ElasticLoadBalancingV2TargetGroupMatcher as X
+import Stratosphere.ResourceProperties.ElasticLoadBalancingV2TargetGroupTargetDescription as X
+import Stratosphere.ResourceProperties.ElasticLoadBalancingV2TargetGroupTargetGroupAttribute as X
+import Stratosphere.ResourceProperties.ElasticsearchDomainEBSOptions as X
+import Stratosphere.ResourceProperties.ElasticsearchDomainElasticsearchClusterConfig as X
+import Stratosphere.ResourceProperties.ElasticsearchDomainSnapshotOptions as X
+import Stratosphere.ResourceProperties.EventsRuleTarget as X
+import Stratosphere.ResourceProperties.GameLiftAliasRoutingStrategy as X
+import Stratosphere.ResourceProperties.GameLiftBuildS3Location as X
+import Stratosphere.ResourceProperties.GameLiftFleetIpPermission as X
+import Stratosphere.ResourceProperties.IAMGroupPolicy as X
+import Stratosphere.ResourceProperties.IAMRolePolicy as X
+import Stratosphere.ResourceProperties.IAMUserLoginProfile as X
+import Stratosphere.ResourceProperties.IAMUserPolicy as X
+import Stratosphere.ResourceProperties.IoTThingAttributePayload as X
+import Stratosphere.ResourceProperties.IoTTopicRuleAction as X
+import Stratosphere.ResourceProperties.IoTTopicRuleCloudwatchAlarmAction as X
+import Stratosphere.ResourceProperties.IoTTopicRuleCloudwatchMetricAction as X
+import Stratosphere.ResourceProperties.IoTTopicRuleDynamoDBAction as X
+import Stratosphere.ResourceProperties.IoTTopicRuleElasticsearchAction as X
+import Stratosphere.ResourceProperties.IoTTopicRuleFirehoseAction as X
+import Stratosphere.ResourceProperties.IoTTopicRuleKinesisAction as X
+import Stratosphere.ResourceProperties.IoTTopicRuleLambdaAction as X
+import Stratosphere.ResourceProperties.IoTTopicRuleRepublishAction as X
+import Stratosphere.ResourceProperties.IoTTopicRuleS3Action as X
+import Stratosphere.ResourceProperties.IoTTopicRuleSnsAction as X
+import Stratosphere.ResourceProperties.IoTTopicRuleSqsAction as X
+import Stratosphere.ResourceProperties.IoTTopicRuleTopicRulePayload as X
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamBufferingHints as X
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions as X
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCopyCommand as X
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchBufferingHints as X
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration as X
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchRetryOptions as X
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamEncryptionConfiguration as X
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamKMSEncryptionConfig as X
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration as X
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamS3DestinationConfiguration as X
+import Stratosphere.ResourceProperties.LambdaFunctionCode as X
+import Stratosphere.ResourceProperties.LambdaFunctionEnvironment as X
+import Stratosphere.ResourceProperties.LambdaFunctionVpcConfig as X
+import Stratosphere.ResourceProperties.LogsMetricFilterMetricTransformation as X
+import Stratosphere.ResourceProperties.OpsWorksAppDataSource as X
+import Stratosphere.ResourceProperties.OpsWorksAppEnvironmentVariable as X
+import Stratosphere.ResourceProperties.OpsWorksAppSource as X
+import Stratosphere.ResourceProperties.OpsWorksAppSslConfiguration as X
+import Stratosphere.ResourceProperties.OpsWorksInstanceBlockDeviceMapping as X
+import Stratosphere.ResourceProperties.OpsWorksInstanceEbsBlockDevice as X
+import Stratosphere.ResourceProperties.OpsWorksInstanceTimeBasedAutoScaling as X
+import Stratosphere.ResourceProperties.OpsWorksLayerAutoScalingThresholds as X
+import Stratosphere.ResourceProperties.OpsWorksLayerLifecycleEventConfiguration as X
+import Stratosphere.ResourceProperties.OpsWorksLayerLoadBasedAutoScaling as X
+import Stratosphere.ResourceProperties.OpsWorksLayerRecipes as X
+import Stratosphere.ResourceProperties.OpsWorksLayerShutdownEventConfiguration as X
+import Stratosphere.ResourceProperties.OpsWorksLayerVolumeConfiguration as X
+import Stratosphere.ResourceProperties.OpsWorksStackChefConfiguration as X
+import Stratosphere.ResourceProperties.OpsWorksStackElasticIp as X
+import Stratosphere.ResourceProperties.OpsWorksStackRdsDbInstance as X
+import Stratosphere.ResourceProperties.OpsWorksStackSource as X
+import Stratosphere.ResourceProperties.OpsWorksStackStackConfigurationManager as X
+import Stratosphere.ResourceProperties.RDSDBSecurityGroupIngressProperty as X
+import Stratosphere.ResourceProperties.RDSOptionGroupOptionConfiguration as X
+import Stratosphere.ResourceProperties.RDSOptionGroupOptionSetting as X
+import Stratosphere.ResourceProperties.RedshiftClusterParameterGroupParameter as X
+import Stratosphere.ResourceProperties.Route53HealthCheckHealthCheckConfig as X
+import Stratosphere.ResourceProperties.Route53HealthCheckHealthCheckTag as X
+import Stratosphere.ResourceProperties.Route53HostedZoneHostedZoneConfig as X
+import Stratosphere.ResourceProperties.Route53HostedZoneHostedZoneTag as X
+import Stratosphere.ResourceProperties.Route53HostedZoneVPC as X
+import Stratosphere.ResourceProperties.Route53RecordSetAliasTarget as X
+import Stratosphere.ResourceProperties.Route53RecordSetGeoLocation as X
+import Stratosphere.ResourceProperties.Route53RecordSetGroupAliasTarget as X
+import Stratosphere.ResourceProperties.Route53RecordSetGroupGeoLocation as X
+import Stratosphere.ResourceProperties.Route53RecordSetGroupRecordSet as X
+import Stratosphere.ResourceProperties.S3BucketCorsConfiguration as X
+import Stratosphere.ResourceProperties.S3BucketCorsRule as X
+import Stratosphere.ResourceProperties.S3BucketFilterRule as X
+import Stratosphere.ResourceProperties.S3BucketLambdaConfiguration as X
+import Stratosphere.ResourceProperties.S3BucketLifecycleConfiguration as X
+import Stratosphere.ResourceProperties.S3BucketLoggingConfiguration as X
+import Stratosphere.ResourceProperties.S3BucketNoncurrentVersionTransition as X
+import Stratosphere.ResourceProperties.S3BucketNotificationConfiguration as X
+import Stratosphere.ResourceProperties.S3BucketNotificationFilter as X
+import Stratosphere.ResourceProperties.S3BucketQueueConfiguration as X
+import Stratosphere.ResourceProperties.S3BucketRedirectAllRequestsTo as X
+import Stratosphere.ResourceProperties.S3BucketRedirectRule as X
+import Stratosphere.ResourceProperties.S3BucketReplicationConfiguration as X
+import Stratosphere.ResourceProperties.S3BucketReplicationDestination as X
+import Stratosphere.ResourceProperties.S3BucketReplicationRule as X
+import Stratosphere.ResourceProperties.S3BucketRoutingRule as X
+import Stratosphere.ResourceProperties.S3BucketRoutingRuleCondition as X
+import Stratosphere.ResourceProperties.S3BucketRule as X
+import Stratosphere.ResourceProperties.S3BucketS3KeyFilter as X
+import Stratosphere.ResourceProperties.S3BucketTopicConfiguration as X
+import Stratosphere.ResourceProperties.S3BucketTransition as X
+import Stratosphere.ResourceProperties.S3BucketVersioningConfiguration as X
+import Stratosphere.ResourceProperties.S3BucketWebsiteConfiguration as X
+import Stratosphere.ResourceProperties.SNSTopicSubscription as X
+import Stratosphere.ResourceProperties.SSMAssociationParameterValues as X
+import Stratosphere.ResourceProperties.SSMAssociationTarget as X
+import Stratosphere.ResourceProperties.WAFByteMatchSetByteMatchTuple as X
+import Stratosphere.ResourceProperties.WAFByteMatchSetFieldToMatch as X
+import Stratosphere.ResourceProperties.WAFIPSetIPSetDescriptor as X
+import Stratosphere.ResourceProperties.WAFRulePredicate as X
+import Stratosphere.ResourceProperties.WAFSizeConstraintSetFieldToMatch as X
+import Stratosphere.ResourceProperties.WAFSizeConstraintSetSizeConstraint as X
+import Stratosphere.ResourceProperties.WAFSqlInjectionMatchSetFieldToMatch as X
+import Stratosphere.ResourceProperties.WAFSqlInjectionMatchSetSqlInjectionMatchTuple as X
+import Stratosphere.ResourceProperties.WAFWebACLActivatedRule as X
+import Stratosphere.ResourceProperties.WAFWebACLWafAction as X
+import Stratosphere.ResourceProperties.WAFXssMatchSetFieldToMatch as X
+import Stratosphere.ResourceProperties.WAFXssMatchSetXssMatchTuple as X
+import Stratosphere.ResourceProperties.Tag as X
+
+import Stratosphere.ResourceAttributes.AutoScalingReplacingUpdatePolicy as X
+import Stratosphere.ResourceAttributes.AutoScalingRollingUpdatePolicy as X
+import Stratosphere.ResourceAttributes.AutoScalingScheduledActionPolicy as X
+import Stratosphere.ResourceAttributes.CreationPolicy as X
+import Stratosphere.ResourceAttributes.ResourceSignal as X
+import Stratosphere.ResourceAttributes.UpdatePolicy as X
+import Stratosphere.Helpers
+import Stratosphere.Values
+
+data ResourceProperties
+  = ApiGatewayAccountProperties ApiGatewayAccount
+  | ApiGatewayApiKeyProperties ApiGatewayApiKey
+  | ApiGatewayAuthorizerProperties ApiGatewayAuthorizer
+  | ApiGatewayBasePathMappingProperties ApiGatewayBasePathMapping
+  | ApiGatewayClientCertificateProperties ApiGatewayClientCertificate
+  | ApiGatewayDeploymentProperties ApiGatewayDeployment
+  | ApiGatewayMethodProperties ApiGatewayMethod
+  | ApiGatewayModelProperties ApiGatewayModel
+  | ApiGatewayResourceProperties ApiGatewayResource
+  | ApiGatewayRestApiProperties ApiGatewayRestApi
+  | ApiGatewayStageProperties ApiGatewayStage
+  | ApiGatewayUsagePlanProperties ApiGatewayUsagePlan
+  | ApplicationAutoScalingScalableTargetProperties ApplicationAutoScalingScalableTarget
+  | ApplicationAutoScalingScalingPolicyProperties ApplicationAutoScalingScalingPolicy
+  | AutoScalingAutoScalingGroupProperties AutoScalingAutoScalingGroup
+  | AutoScalingLaunchConfigurationProperties AutoScalingLaunchConfiguration
+  | AutoScalingLifecycleHookProperties AutoScalingLifecycleHook
+  | AutoScalingScalingPolicyProperties AutoScalingScalingPolicy
+  | AutoScalingScheduledActionProperties AutoScalingScheduledAction
+  | CertificateManagerCertificateProperties CertificateManagerCertificate
+  | CloudFormationCustomResourceProperties CloudFormationCustomResource
+  | CloudFormationStackProperties CloudFormationStack
+  | CloudFormationWaitConditionProperties CloudFormationWaitCondition
+  | CloudFormationWaitConditionHandleProperties CloudFormationWaitConditionHandle
+  | CloudFrontDistributionProperties CloudFrontDistribution
+  | CloudTrailTrailProperties CloudTrailTrail
+  | CloudWatchAlarmProperties CloudWatchAlarm
+  | CodeBuildProjectProperties CodeBuildProject
+  | CodeCommitRepositoryProperties CodeCommitRepository
+  | CodeDeployApplicationProperties CodeDeployApplication
+  | CodeDeployDeploymentConfigProperties CodeDeployDeploymentConfig
+  | CodeDeployDeploymentGroupProperties CodeDeployDeploymentGroup
+  | CodePipelineCustomActionTypeProperties CodePipelineCustomActionType
+  | CodePipelinePipelineProperties CodePipelinePipeline
+  | ConfigConfigRuleProperties ConfigConfigRule
+  | ConfigConfigurationRecorderProperties ConfigConfigurationRecorder
+  | ConfigDeliveryChannelProperties ConfigDeliveryChannel
+  | DataPipelinePipelineProperties DataPipelinePipeline
+  | DirectoryServiceMicrosoftADProperties DirectoryServiceMicrosoftAD
+  | DirectoryServiceSimpleADProperties DirectoryServiceSimpleAD
+  | DynamoDBTableProperties DynamoDBTable
+  | EC2CustomerGatewayProperties EC2CustomerGateway
+  | EC2DHCPOptionsProperties EC2DHCPOptions
+  | EC2EIPProperties EC2EIP
+  | EC2EIPAssociationProperties EC2EIPAssociation
+  | EC2FlowLogProperties EC2FlowLog
+  | EC2HostProperties EC2Host
+  | EC2InstanceProperties EC2Instance
+  | EC2InternetGatewayProperties EC2InternetGateway
+  | EC2NatGatewayProperties EC2NatGateway
+  | EC2NetworkAclProperties EC2NetworkAcl
+  | EC2NetworkAclEntryProperties EC2NetworkAclEntry
+  | EC2NetworkInterfaceProperties EC2NetworkInterface
+  | EC2NetworkInterfaceAttachmentProperties EC2NetworkInterfaceAttachment
+  | EC2PlacementGroupProperties EC2PlacementGroup
+  | EC2RouteProperties EC2Route
+  | EC2RouteTableProperties EC2RouteTable
+  | EC2SecurityGroupProperties EC2SecurityGroup
+  | EC2SecurityGroupEgressProperties EC2SecurityGroupEgress
+  | EC2SecurityGroupIngressProperties EC2SecurityGroupIngress
+  | EC2SpotFleetProperties EC2SpotFleet
+  | EC2SubnetProperties EC2Subnet
+  | EC2SubnetCidrBlockProperties EC2SubnetCidrBlock
+  | EC2SubnetNetworkAclAssociationProperties EC2SubnetNetworkAclAssociation
+  | EC2SubnetRouteTableAssociationProperties EC2SubnetRouteTableAssociation
+  | EC2VPCProperties EC2VPC
+  | EC2VPCCidrBlockProperties EC2VPCCidrBlock
+  | EC2VPCDHCPOptionsAssociationProperties EC2VPCDHCPOptionsAssociation
+  | EC2VPCEndpointProperties EC2VPCEndpoint
+  | EC2VPCGatewayAttachmentProperties EC2VPCGatewayAttachment
+  | EC2VPCPeeringConnectionProperties EC2VPCPeeringConnection
+  | EC2VPNConnectionProperties EC2VPNConnection
+  | EC2VPNConnectionRouteProperties EC2VPNConnectionRoute
+  | EC2VPNGatewayProperties EC2VPNGateway
+  | EC2VPNGatewayRoutePropagationProperties EC2VPNGatewayRoutePropagation
+  | EC2VolumeProperties EC2Volume
+  | EC2VolumeAttachmentProperties EC2VolumeAttachment
+  | ECRRepositoryProperties ECRRepository
+  | ECSClusterProperties ECSCluster
+  | ECSServiceProperties ECSService
+  | ECSTaskDefinitionProperties ECSTaskDefinition
+  | EFSFileSystemProperties EFSFileSystem
+  | EFSMountTargetProperties EFSMountTarget
+  | EMRClusterProperties EMRCluster
+  | EMRInstanceGroupConfigProperties EMRInstanceGroupConfig
+  | EMRStepProperties EMRStep
+  | ElastiCacheCacheClusterProperties ElastiCacheCacheCluster
+  | ElastiCacheParameterGroupProperties ElastiCacheParameterGroup
+  | ElastiCacheReplicationGroupProperties ElastiCacheReplicationGroup
+  | ElastiCacheSecurityGroupProperties ElastiCacheSecurityGroup
+  | ElastiCacheSecurityGroupIngressProperties ElastiCacheSecurityGroupIngress
+  | ElastiCacheSubnetGroupProperties ElastiCacheSubnetGroup
+  | ElasticBeanstalkApplicationProperties ElasticBeanstalkApplication
+  | ElasticBeanstalkApplicationVersionProperties ElasticBeanstalkApplicationVersion
+  | ElasticBeanstalkConfigurationTemplateProperties ElasticBeanstalkConfigurationTemplate
+  | ElasticBeanstalkEnvironmentProperties ElasticBeanstalkEnvironment
+  | ElasticLoadBalancingLoadBalancerProperties ElasticLoadBalancingLoadBalancer
+  | ElasticLoadBalancingV2ListenerProperties ElasticLoadBalancingV2Listener
+  | ElasticLoadBalancingV2ListenerRuleProperties ElasticLoadBalancingV2ListenerRule
+  | ElasticLoadBalancingV2LoadBalancerProperties ElasticLoadBalancingV2LoadBalancer
+  | ElasticLoadBalancingV2TargetGroupProperties ElasticLoadBalancingV2TargetGroup
+  | ElasticsearchDomainProperties ElasticsearchDomain
+  | EventsRuleProperties EventsRule
+  | GameLiftAliasProperties GameLiftAlias
+  | GameLiftBuildProperties GameLiftBuild
+  | GameLiftFleetProperties GameLiftFleet
+  | IAMAccessKeyProperties IAMAccessKey
+  | IAMGroupProperties IAMGroup
+  | IAMInstanceProfileProperties IAMInstanceProfile
+  | IAMManagedPolicyProperties IAMManagedPolicy
+  | IAMPolicyProperties IAMPolicy
+  | IAMRoleProperties IAMRole
+  | IAMUserProperties IAMUser
+  | IAMUserToGroupAdditionProperties IAMUserToGroupAddition
+  | IoTCertificateProperties IoTCertificate
+  | IoTPolicyProperties IoTPolicy
+  | IoTPolicyPrincipalAttachmentProperties IoTPolicyPrincipalAttachment
+  | IoTThingProperties IoTThing
+  | IoTThingPrincipalAttachmentProperties IoTThingPrincipalAttachment
+  | IoTTopicRuleProperties IoTTopicRule
+  | KMSAliasProperties KMSAlias
+  | KMSKeyProperties KMSKey
+  | KinesisStreamProperties KinesisStream
+  | KinesisFirehoseDeliveryStreamProperties KinesisFirehoseDeliveryStream
+  | LambdaAliasProperties LambdaAlias
+  | LambdaEventSourceMappingProperties LambdaEventSourceMapping
+  | LambdaFunctionProperties LambdaFunction
+  | LambdaPermissionProperties LambdaPermission
+  | LambdaVersionProperties LambdaVersion
+  | LogsDestinationProperties LogsDestination
+  | LogsLogGroupProperties LogsLogGroup
+  | LogsLogStreamProperties LogsLogStream
+  | LogsMetricFilterProperties LogsMetricFilter
+  | LogsSubscriptionFilterProperties LogsSubscriptionFilter
+  | OpsWorksAppProperties OpsWorksApp
+  | OpsWorksElasticLoadBalancerAttachmentProperties OpsWorksElasticLoadBalancerAttachment
+  | OpsWorksInstanceProperties OpsWorksInstance
+  | OpsWorksLayerProperties OpsWorksLayer
+  | OpsWorksStackProperties OpsWorksStack
+  | OpsWorksUserProfileProperties OpsWorksUserProfile
+  | OpsWorksVolumeProperties OpsWorksVolume
+  | RDSDBClusterProperties RDSDBCluster
+  | RDSDBClusterParameterGroupProperties RDSDBClusterParameterGroup
+  | RDSDBInstanceProperties RDSDBInstance
+  | RDSDBParameterGroupProperties RDSDBParameterGroup
+  | RDSDBSecurityGroupProperties RDSDBSecurityGroup
+  | RDSDBSecurityGroupIngressProperties RDSDBSecurityGroupIngress
+  | RDSDBSubnetGroupProperties RDSDBSubnetGroup
+  | RDSEventSubscriptionProperties RDSEventSubscription
+  | RDSOptionGroupProperties RDSOptionGroup
+  | RedshiftClusterProperties RedshiftCluster
+  | RedshiftClusterParameterGroupProperties RedshiftClusterParameterGroup
+  | RedshiftClusterSecurityGroupProperties RedshiftClusterSecurityGroup
+  | RedshiftClusterSecurityGroupIngressProperties RedshiftClusterSecurityGroupIngress
+  | RedshiftClusterSubnetGroupProperties RedshiftClusterSubnetGroup
+  | Route53HealthCheckProperties Route53HealthCheck
+  | Route53HostedZoneProperties Route53HostedZone
+  | Route53RecordSetProperties Route53RecordSet
+  | Route53RecordSetGroupProperties Route53RecordSetGroup
+  | S3BucketProperties S3Bucket
+  | S3BucketPolicyProperties S3BucketPolicy
+  | SDBDomainProperties SDBDomain
+  | SNSSubscriptionProperties SNSSubscription
+  | SNSTopicProperties SNSTopic
+  | SNSTopicPolicyProperties SNSTopicPolicy
+  | SQSQueueProperties SQSQueue
+  | SQSQueuePolicyProperties SQSQueuePolicy
+  | SSMAssociationProperties SSMAssociation
+  | SSMDocumentProperties SSMDocument
+  | WAFByteMatchSetProperties WAFByteMatchSet
+  | WAFIPSetProperties WAFIPSet
+  | WAFRuleProperties WAFRule
+  | WAFSizeConstraintSetProperties WAFSizeConstraintSet
+  | WAFSqlInjectionMatchSetProperties WAFSqlInjectionMatchSet
+  | WAFWebACLProperties WAFWebACL
+  | WAFXssMatchSetProperties WAFXssMatchSet
+  | WorkSpacesWorkspaceProperties WorkSpacesWorkspace
+
+  deriving (Show)
+
+data DeletionPolicy
+  = Delete
+  | Retain
+  | Snapshot
+  deriving (Show, Generic)
+
+instance ToJSON DeletionPolicy where
+instance FromJSON DeletionPolicy where
+
+data Resource =
+  Resource
+  { resourceResName :: T.Text
+  , resourceProperties :: ResourceProperties
+  , resourceDeletionPolicy :: Maybe DeletionPolicy
+  , resourceResCreationPolicy :: Maybe CreationPolicy
+  , resourceResUpdatePolicy :: Maybe UpdatePolicy
+  , resourceDependsOn :: Maybe [T.Text]
+  } deriving (Show)
+
+instance ToRef Resource b where
+  toRef r = Ref (resourceResName r)
+
+-- | Convenient constructor for 'Resource' with required arguments.
+resource
+  :: T.Text -- ^ Logical name
+  -> ResourceProperties
+  -> Resource
+resource rn rp =
+  Resource
+  { resourceResName = rn
+  , resourceProperties = rp
+  , resourceDeletionPolicy = Nothing
+  , resourceResCreationPolicy = Nothing
+  , resourceResUpdatePolicy = Nothing
+  , resourceDependsOn = Nothing
+  }
+
+$(makeFields ''Resource)
+
+resourceToJSON :: Resource -> Value
+resourceToJSON (Resource _ props dp cp up deps) =
+    object $ resourcePropertiesJSON props ++ catMaybes
+    [ maybeField "DeletionPolicy" dp
+    , maybeField "CreationPolicy" cp
+    , maybeField "UpdatePolicy" up
+    , maybeField "DependsOn" deps
+    ]
+
+resourcePropertiesJSON :: ResourceProperties -> [Pair]
+resourcePropertiesJSON (ApiGatewayAccountProperties x) =
+  [ "Type" .= ("AWS::ApiGateway::Account" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ApiGatewayApiKeyProperties x) =
+  [ "Type" .= ("AWS::ApiGateway::ApiKey" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ApiGatewayAuthorizerProperties x) =
+  [ "Type" .= ("AWS::ApiGateway::Authorizer" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ApiGatewayBasePathMappingProperties x) =
+  [ "Type" .= ("AWS::ApiGateway::BasePathMapping" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ApiGatewayClientCertificateProperties x) =
+  [ "Type" .= ("AWS::ApiGateway::ClientCertificate" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ApiGatewayDeploymentProperties x) =
+  [ "Type" .= ("AWS::ApiGateway::Deployment" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ApiGatewayMethodProperties x) =
+  [ "Type" .= ("AWS::ApiGateway::Method" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ApiGatewayModelProperties x) =
+  [ "Type" .= ("AWS::ApiGateway::Model" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ApiGatewayResourceProperties x) =
+  [ "Type" .= ("AWS::ApiGateway::Resource" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ApiGatewayRestApiProperties x) =
+  [ "Type" .= ("AWS::ApiGateway::RestApi" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ApiGatewayStageProperties x) =
+  [ "Type" .= ("AWS::ApiGateway::Stage" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ApiGatewayUsagePlanProperties x) =
+  [ "Type" .= ("AWS::ApiGateway::UsagePlan" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ApplicationAutoScalingScalableTargetProperties x) =
+  [ "Type" .= ("AWS::ApplicationAutoScaling::ScalableTarget" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ApplicationAutoScalingScalingPolicyProperties x) =
+  [ "Type" .= ("AWS::ApplicationAutoScaling::ScalingPolicy" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (AutoScalingAutoScalingGroupProperties x) =
+  [ "Type" .= ("AWS::AutoScaling::AutoScalingGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (AutoScalingLaunchConfigurationProperties x) =
+  [ "Type" .= ("AWS::AutoScaling::LaunchConfiguration" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (AutoScalingLifecycleHookProperties x) =
+  [ "Type" .= ("AWS::AutoScaling::LifecycleHook" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (AutoScalingScalingPolicyProperties x) =
+  [ "Type" .= ("AWS::AutoScaling::ScalingPolicy" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (AutoScalingScheduledActionProperties x) =
+  [ "Type" .= ("AWS::AutoScaling::ScheduledAction" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CertificateManagerCertificateProperties x) =
+  [ "Type" .= ("AWS::CertificateManager::Certificate" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CloudFormationCustomResourceProperties x) =
+  [ "Type" .= ("AWS::CloudFormation::CustomResource" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CloudFormationStackProperties x) =
+  [ "Type" .= ("AWS::CloudFormation::Stack" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CloudFormationWaitConditionProperties x) =
+  [ "Type" .= ("AWS::CloudFormation::WaitCondition" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CloudFormationWaitConditionHandleProperties x) =
+  [ "Type" .= ("AWS::CloudFormation::WaitConditionHandle" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CloudFrontDistributionProperties x) =
+  [ "Type" .= ("AWS::CloudFront::Distribution" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CloudTrailTrailProperties x) =
+  [ "Type" .= ("AWS::CloudTrail::Trail" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CloudWatchAlarmProperties x) =
+  [ "Type" .= ("AWS::CloudWatch::Alarm" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CodeBuildProjectProperties x) =
+  [ "Type" .= ("AWS::CodeBuild::Project" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CodeCommitRepositoryProperties x) =
+  [ "Type" .= ("AWS::CodeCommit::Repository" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CodeDeployApplicationProperties x) =
+  [ "Type" .= ("AWS::CodeDeploy::Application" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CodeDeployDeploymentConfigProperties x) =
+  [ "Type" .= ("AWS::CodeDeploy::DeploymentConfig" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CodeDeployDeploymentGroupProperties x) =
+  [ "Type" .= ("AWS::CodeDeploy::DeploymentGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CodePipelineCustomActionTypeProperties x) =
+  [ "Type" .= ("AWS::CodePipeline::CustomActionType" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CodePipelinePipelineProperties x) =
+  [ "Type" .= ("AWS::CodePipeline::Pipeline" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ConfigConfigRuleProperties x) =
+  [ "Type" .= ("AWS::Config::ConfigRule" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ConfigConfigurationRecorderProperties x) =
+  [ "Type" .= ("AWS::Config::ConfigurationRecorder" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ConfigDeliveryChannelProperties x) =
+  [ "Type" .= ("AWS::Config::DeliveryChannel" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (DataPipelinePipelineProperties x) =
+  [ "Type" .= ("AWS::DataPipeline::Pipeline" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (DirectoryServiceMicrosoftADProperties x) =
+  [ "Type" .= ("AWS::DirectoryService::MicrosoftAD" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (DirectoryServiceSimpleADProperties x) =
+  [ "Type" .= ("AWS::DirectoryService::SimpleAD" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (DynamoDBTableProperties x) =
+  [ "Type" .= ("AWS::DynamoDB::Table" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2CustomerGatewayProperties x) =
+  [ "Type" .= ("AWS::EC2::CustomerGateway" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2DHCPOptionsProperties x) =
+  [ "Type" .= ("AWS::EC2::DHCPOptions" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2EIPProperties x) =
+  [ "Type" .= ("AWS::EC2::EIP" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2EIPAssociationProperties x) =
+  [ "Type" .= ("AWS::EC2::EIPAssociation" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2FlowLogProperties x) =
+  [ "Type" .= ("AWS::EC2::FlowLog" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2HostProperties x) =
+  [ "Type" .= ("AWS::EC2::Host" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2InstanceProperties x) =
+  [ "Type" .= ("AWS::EC2::Instance" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2InternetGatewayProperties x) =
+  [ "Type" .= ("AWS::EC2::InternetGateway" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2NatGatewayProperties x) =
+  [ "Type" .= ("AWS::EC2::NatGateway" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2NetworkAclProperties x) =
+  [ "Type" .= ("AWS::EC2::NetworkAcl" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2NetworkAclEntryProperties x) =
+  [ "Type" .= ("AWS::EC2::NetworkAclEntry" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2NetworkInterfaceProperties x) =
+  [ "Type" .= ("AWS::EC2::NetworkInterface" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2NetworkInterfaceAttachmentProperties x) =
+  [ "Type" .= ("AWS::EC2::NetworkInterfaceAttachment" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2PlacementGroupProperties x) =
+  [ "Type" .= ("AWS::EC2::PlacementGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2RouteProperties x) =
+  [ "Type" .= ("AWS::EC2::Route" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2RouteTableProperties x) =
+  [ "Type" .= ("AWS::EC2::RouteTable" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2SecurityGroupProperties x) =
+  [ "Type" .= ("AWS::EC2::SecurityGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2SecurityGroupEgressProperties x) =
+  [ "Type" .= ("AWS::EC2::SecurityGroupEgress" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2SecurityGroupIngressProperties x) =
+  [ "Type" .= ("AWS::EC2::SecurityGroupIngress" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2SpotFleetProperties x) =
+  [ "Type" .= ("AWS::EC2::SpotFleet" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2SubnetProperties x) =
+  [ "Type" .= ("AWS::EC2::Subnet" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2SubnetCidrBlockProperties x) =
+  [ "Type" .= ("AWS::EC2::SubnetCidrBlock" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2SubnetNetworkAclAssociationProperties x) =
+  [ "Type" .= ("AWS::EC2::SubnetNetworkAclAssociation" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2SubnetRouteTableAssociationProperties x) =
+  [ "Type" .= ("AWS::EC2::SubnetRouteTableAssociation" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2VPCProperties x) =
+  [ "Type" .= ("AWS::EC2::VPC" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2VPCCidrBlockProperties x) =
+  [ "Type" .= ("AWS::EC2::VPCCidrBlock" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2VPCDHCPOptionsAssociationProperties x) =
+  [ "Type" .= ("AWS::EC2::VPCDHCPOptionsAssociation" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2VPCEndpointProperties x) =
+  [ "Type" .= ("AWS::EC2::VPCEndpoint" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2VPCGatewayAttachmentProperties x) =
+  [ "Type" .= ("AWS::EC2::VPCGatewayAttachment" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2VPCPeeringConnectionProperties x) =
+  [ "Type" .= ("AWS::EC2::VPCPeeringConnection" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2VPNConnectionProperties x) =
+  [ "Type" .= ("AWS::EC2::VPNConnection" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2VPNConnectionRouteProperties x) =
+  [ "Type" .= ("AWS::EC2::VPNConnectionRoute" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2VPNGatewayProperties x) =
+  [ "Type" .= ("AWS::EC2::VPNGateway" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2VPNGatewayRoutePropagationProperties x) =
+  [ "Type" .= ("AWS::EC2::VPNGatewayRoutePropagation" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2VolumeProperties x) =
+  [ "Type" .= ("AWS::EC2::Volume" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2VolumeAttachmentProperties x) =
+  [ "Type" .= ("AWS::EC2::VolumeAttachment" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ECRRepositoryProperties x) =
+  [ "Type" .= ("AWS::ECR::Repository" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ECSClusterProperties x) =
+  [ "Type" .= ("AWS::ECS::Cluster" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ECSServiceProperties x) =
+  [ "Type" .= ("AWS::ECS::Service" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ECSTaskDefinitionProperties x) =
+  [ "Type" .= ("AWS::ECS::TaskDefinition" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EFSFileSystemProperties x) =
+  [ "Type" .= ("AWS::EFS::FileSystem" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EFSMountTargetProperties x) =
+  [ "Type" .= ("AWS::EFS::MountTarget" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EMRClusterProperties x) =
+  [ "Type" .= ("AWS::EMR::Cluster" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EMRInstanceGroupConfigProperties x) =
+  [ "Type" .= ("AWS::EMR::InstanceGroupConfig" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EMRStepProperties x) =
+  [ "Type" .= ("AWS::EMR::Step" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ElastiCacheCacheClusterProperties x) =
+  [ "Type" .= ("AWS::ElastiCache::CacheCluster" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ElastiCacheParameterGroupProperties x) =
+  [ "Type" .= ("AWS::ElastiCache::ParameterGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ElastiCacheReplicationGroupProperties x) =
+  [ "Type" .= ("AWS::ElastiCache::ReplicationGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ElastiCacheSecurityGroupProperties x) =
+  [ "Type" .= ("AWS::ElastiCache::SecurityGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ElastiCacheSecurityGroupIngressProperties x) =
+  [ "Type" .= ("AWS::ElastiCache::SecurityGroupIngress" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ElastiCacheSubnetGroupProperties x) =
+  [ "Type" .= ("AWS::ElastiCache::SubnetGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ElasticBeanstalkApplicationProperties x) =
+  [ "Type" .= ("AWS::ElasticBeanstalk::Application" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ElasticBeanstalkApplicationVersionProperties x) =
+  [ "Type" .= ("AWS::ElasticBeanstalk::ApplicationVersion" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ElasticBeanstalkConfigurationTemplateProperties x) =
+  [ "Type" .= ("AWS::ElasticBeanstalk::ConfigurationTemplate" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ElasticBeanstalkEnvironmentProperties x) =
+  [ "Type" .= ("AWS::ElasticBeanstalk::Environment" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ElasticLoadBalancingLoadBalancerProperties x) =
+  [ "Type" .= ("AWS::ElasticLoadBalancing::LoadBalancer" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ElasticLoadBalancingV2ListenerProperties x) =
+  [ "Type" .= ("AWS::ElasticLoadBalancingV2::Listener" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ElasticLoadBalancingV2ListenerRuleProperties x) =
+  [ "Type" .= ("AWS::ElasticLoadBalancingV2::ListenerRule" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ElasticLoadBalancingV2LoadBalancerProperties x) =
+  [ "Type" .= ("AWS::ElasticLoadBalancingV2::LoadBalancer" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ElasticLoadBalancingV2TargetGroupProperties x) =
+  [ "Type" .= ("AWS::ElasticLoadBalancingV2::TargetGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ElasticsearchDomainProperties x) =
+  [ "Type" .= ("AWS::Elasticsearch::Domain" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EventsRuleProperties x) =
+  [ "Type" .= ("AWS::Events::Rule" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (GameLiftAliasProperties x) =
+  [ "Type" .= ("AWS::GameLift::Alias" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (GameLiftBuildProperties x) =
+  [ "Type" .= ("AWS::GameLift::Build" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (GameLiftFleetProperties x) =
+  [ "Type" .= ("AWS::GameLift::Fleet" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (IAMAccessKeyProperties x) =
+  [ "Type" .= ("AWS::IAM::AccessKey" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (IAMGroupProperties x) =
+  [ "Type" .= ("AWS::IAM::Group" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (IAMInstanceProfileProperties x) =
+  [ "Type" .= ("AWS::IAM::InstanceProfile" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (IAMManagedPolicyProperties x) =
+  [ "Type" .= ("AWS::IAM::ManagedPolicy" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (IAMPolicyProperties x) =
+  [ "Type" .= ("AWS::IAM::Policy" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (IAMRoleProperties x) =
+  [ "Type" .= ("AWS::IAM::Role" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (IAMUserProperties x) =
+  [ "Type" .= ("AWS::IAM::User" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (IAMUserToGroupAdditionProperties x) =
+  [ "Type" .= ("AWS::IAM::UserToGroupAddition" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (IoTCertificateProperties x) =
+  [ "Type" .= ("AWS::IoT::Certificate" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (IoTPolicyProperties x) =
+  [ "Type" .= ("AWS::IoT::Policy" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (IoTPolicyPrincipalAttachmentProperties x) =
+  [ "Type" .= ("AWS::IoT::PolicyPrincipalAttachment" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (IoTThingProperties x) =
+  [ "Type" .= ("AWS::IoT::Thing" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (IoTThingPrincipalAttachmentProperties x) =
+  [ "Type" .= ("AWS::IoT::ThingPrincipalAttachment" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (IoTTopicRuleProperties x) =
+  [ "Type" .= ("AWS::IoT::TopicRule" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (KMSAliasProperties x) =
+  [ "Type" .= ("AWS::KMS::Alias" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (KMSKeyProperties x) =
+  [ "Type" .= ("AWS::KMS::Key" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (KinesisStreamProperties x) =
+  [ "Type" .= ("AWS::Kinesis::Stream" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (KinesisFirehoseDeliveryStreamProperties x) =
+  [ "Type" .= ("AWS::KinesisFirehose::DeliveryStream" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (LambdaAliasProperties x) =
+  [ "Type" .= ("AWS::Lambda::Alias" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (LambdaEventSourceMappingProperties x) =
+  [ "Type" .= ("AWS::Lambda::EventSourceMapping" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (LambdaFunctionProperties x) =
+  [ "Type" .= ("AWS::Lambda::Function" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (LambdaPermissionProperties x) =
+  [ "Type" .= ("AWS::Lambda::Permission" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (LambdaVersionProperties x) =
+  [ "Type" .= ("AWS::Lambda::Version" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (LogsDestinationProperties x) =
+  [ "Type" .= ("AWS::Logs::Destination" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (LogsLogGroupProperties x) =
+  [ "Type" .= ("AWS::Logs::LogGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (LogsLogStreamProperties x) =
+  [ "Type" .= ("AWS::Logs::LogStream" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (LogsMetricFilterProperties x) =
+  [ "Type" .= ("AWS::Logs::MetricFilter" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (LogsSubscriptionFilterProperties x) =
+  [ "Type" .= ("AWS::Logs::SubscriptionFilter" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (OpsWorksAppProperties x) =
+  [ "Type" .= ("AWS::OpsWorks::App" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (OpsWorksElasticLoadBalancerAttachmentProperties x) =
+  [ "Type" .= ("AWS::OpsWorks::ElasticLoadBalancerAttachment" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (OpsWorksInstanceProperties x) =
+  [ "Type" .= ("AWS::OpsWorks::Instance" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (OpsWorksLayerProperties x) =
+  [ "Type" .= ("AWS::OpsWorks::Layer" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (OpsWorksStackProperties x) =
+  [ "Type" .= ("AWS::OpsWorks::Stack" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (OpsWorksUserProfileProperties x) =
+  [ "Type" .= ("AWS::OpsWorks::UserProfile" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (OpsWorksVolumeProperties x) =
+  [ "Type" .= ("AWS::OpsWorks::Volume" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (RDSDBClusterProperties x) =
+  [ "Type" .= ("AWS::RDS::DBCluster" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (RDSDBClusterParameterGroupProperties x) =
+  [ "Type" .= ("AWS::RDS::DBClusterParameterGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (RDSDBInstanceProperties x) =
+  [ "Type" .= ("AWS::RDS::DBInstance" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (RDSDBParameterGroupProperties x) =
+  [ "Type" .= ("AWS::RDS::DBParameterGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (RDSDBSecurityGroupProperties x) =
+  [ "Type" .= ("AWS::RDS::DBSecurityGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (RDSDBSecurityGroupIngressProperties x) =
+  [ "Type" .= ("AWS::RDS::DBSecurityGroupIngress" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (RDSDBSubnetGroupProperties x) =
+  [ "Type" .= ("AWS::RDS::DBSubnetGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (RDSEventSubscriptionProperties x) =
+  [ "Type" .= ("AWS::RDS::EventSubscription" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (RDSOptionGroupProperties x) =
+  [ "Type" .= ("AWS::RDS::OptionGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (RedshiftClusterProperties x) =
+  [ "Type" .= ("AWS::Redshift::Cluster" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (RedshiftClusterParameterGroupProperties x) =
+  [ "Type" .= ("AWS::Redshift::ClusterParameterGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (RedshiftClusterSecurityGroupProperties x) =
+  [ "Type" .= ("AWS::Redshift::ClusterSecurityGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (RedshiftClusterSecurityGroupIngressProperties x) =
+  [ "Type" .= ("AWS::Redshift::ClusterSecurityGroupIngress" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (RedshiftClusterSubnetGroupProperties x) =
+  [ "Type" .= ("AWS::Redshift::ClusterSubnetGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (Route53HealthCheckProperties x) =
+  [ "Type" .= ("AWS::Route53::HealthCheck" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (Route53HostedZoneProperties x) =
+  [ "Type" .= ("AWS::Route53::HostedZone" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (Route53RecordSetProperties x) =
+  [ "Type" .= ("AWS::Route53::RecordSet" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (Route53RecordSetGroupProperties x) =
+  [ "Type" .= ("AWS::Route53::RecordSetGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (S3BucketProperties x) =
+  [ "Type" .= ("AWS::S3::Bucket" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (S3BucketPolicyProperties x) =
+  [ "Type" .= ("AWS::S3::BucketPolicy" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (SDBDomainProperties x) =
+  [ "Type" .= ("AWS::SDB::Domain" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (SNSSubscriptionProperties x) =
+  [ "Type" .= ("AWS::SNS::Subscription" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (SNSTopicProperties x) =
+  [ "Type" .= ("AWS::SNS::Topic" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (SNSTopicPolicyProperties x) =
+  [ "Type" .= ("AWS::SNS::TopicPolicy" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (SQSQueueProperties x) =
+  [ "Type" .= ("AWS::SQS::Queue" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (SQSQueuePolicyProperties x) =
+  [ "Type" .= ("AWS::SQS::QueuePolicy" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (SSMAssociationProperties x) =
+  [ "Type" .= ("AWS::SSM::Association" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (SSMDocumentProperties x) =
+  [ "Type" .= ("AWS::SSM::Document" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (WAFByteMatchSetProperties x) =
+  [ "Type" .= ("AWS::WAF::ByteMatchSet" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (WAFIPSetProperties x) =
+  [ "Type" .= ("AWS::WAF::IPSet" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (WAFRuleProperties x) =
+  [ "Type" .= ("AWS::WAF::Rule" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (WAFSizeConstraintSetProperties x) =
+  [ "Type" .= ("AWS::WAF::SizeConstraintSet" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (WAFSqlInjectionMatchSetProperties x) =
+  [ "Type" .= ("AWS::WAF::SqlInjectionMatchSet" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (WAFWebACLProperties x) =
+  [ "Type" .= ("AWS::WAF::WebACL" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (WAFXssMatchSetProperties x) =
+  [ "Type" .= ("AWS::WAF::XssMatchSet" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (WorkSpacesWorkspaceProperties x) =
+  [ "Type" .= ("AWS::WorkSpaces::Workspace" :: String), "Properties" .= toJSON x]
+
+
+resourceFromJSON :: T.Text -> Object -> Parser Resource
+resourceFromJSON n o =
+    do type' <- o .: "Type" :: Parser String
+       props <- case type' of
+         "AWS::ApiGateway::Account" -> ApiGatewayAccountProperties <$> (o .: "Properties")
+         "AWS::ApiGateway::ApiKey" -> ApiGatewayApiKeyProperties <$> (o .: "Properties")
+         "AWS::ApiGateway::Authorizer" -> ApiGatewayAuthorizerProperties <$> (o .: "Properties")
+         "AWS::ApiGateway::BasePathMapping" -> ApiGatewayBasePathMappingProperties <$> (o .: "Properties")
+         "AWS::ApiGateway::ClientCertificate" -> ApiGatewayClientCertificateProperties <$> (o .: "Properties")
+         "AWS::ApiGateway::Deployment" -> ApiGatewayDeploymentProperties <$> (o .: "Properties")
+         "AWS::ApiGateway::Method" -> ApiGatewayMethodProperties <$> (o .: "Properties")
+         "AWS::ApiGateway::Model" -> ApiGatewayModelProperties <$> (o .: "Properties")
+         "AWS::ApiGateway::Resource" -> ApiGatewayResourceProperties <$> (o .: "Properties")
+         "AWS::ApiGateway::RestApi" -> ApiGatewayRestApiProperties <$> (o .: "Properties")
+         "AWS::ApiGateway::Stage" -> ApiGatewayStageProperties <$> (o .: "Properties")
+         "AWS::ApiGateway::UsagePlan" -> ApiGatewayUsagePlanProperties <$> (o .: "Properties")
+         "AWS::ApplicationAutoScaling::ScalableTarget" -> ApplicationAutoScalingScalableTargetProperties <$> (o .: "Properties")
+         "AWS::ApplicationAutoScaling::ScalingPolicy" -> ApplicationAutoScalingScalingPolicyProperties <$> (o .: "Properties")
+         "AWS::AutoScaling::AutoScalingGroup" -> AutoScalingAutoScalingGroupProperties <$> (o .: "Properties")
+         "AWS::AutoScaling::LaunchConfiguration" -> AutoScalingLaunchConfigurationProperties <$> (o .: "Properties")
+         "AWS::AutoScaling::LifecycleHook" -> AutoScalingLifecycleHookProperties <$> (o .: "Properties")
+         "AWS::AutoScaling::ScalingPolicy" -> AutoScalingScalingPolicyProperties <$> (o .: "Properties")
+         "AWS::AutoScaling::ScheduledAction" -> AutoScalingScheduledActionProperties <$> (o .: "Properties")
+         "AWS::CertificateManager::Certificate" -> CertificateManagerCertificateProperties <$> (o .: "Properties")
+         "AWS::CloudFormation::CustomResource" -> CloudFormationCustomResourceProperties <$> (o .: "Properties")
+         "AWS::CloudFormation::Stack" -> CloudFormationStackProperties <$> (o .: "Properties")
+         "AWS::CloudFormation::WaitCondition" -> CloudFormationWaitConditionProperties <$> (o .: "Properties")
+         "AWS::CloudFormation::WaitConditionHandle" -> CloudFormationWaitConditionHandleProperties <$> (o .: "Properties")
+         "AWS::CloudFront::Distribution" -> CloudFrontDistributionProperties <$> (o .: "Properties")
+         "AWS::CloudTrail::Trail" -> CloudTrailTrailProperties <$> (o .: "Properties")
+         "AWS::CloudWatch::Alarm" -> CloudWatchAlarmProperties <$> (o .: "Properties")
+         "AWS::CodeBuild::Project" -> CodeBuildProjectProperties <$> (o .: "Properties")
+         "AWS::CodeCommit::Repository" -> CodeCommitRepositoryProperties <$> (o .: "Properties")
+         "AWS::CodeDeploy::Application" -> CodeDeployApplicationProperties <$> (o .: "Properties")
+         "AWS::CodeDeploy::DeploymentConfig" -> CodeDeployDeploymentConfigProperties <$> (o .: "Properties")
+         "AWS::CodeDeploy::DeploymentGroup" -> CodeDeployDeploymentGroupProperties <$> (o .: "Properties")
+         "AWS::CodePipeline::CustomActionType" -> CodePipelineCustomActionTypeProperties <$> (o .: "Properties")
+         "AWS::CodePipeline::Pipeline" -> CodePipelinePipelineProperties <$> (o .: "Properties")
+         "AWS::Config::ConfigRule" -> ConfigConfigRuleProperties <$> (o .: "Properties")
+         "AWS::Config::ConfigurationRecorder" -> ConfigConfigurationRecorderProperties <$> (o .: "Properties")
+         "AWS::Config::DeliveryChannel" -> ConfigDeliveryChannelProperties <$> (o .: "Properties")
+         "AWS::DataPipeline::Pipeline" -> DataPipelinePipelineProperties <$> (o .: "Properties")
+         "AWS::DirectoryService::MicrosoftAD" -> DirectoryServiceMicrosoftADProperties <$> (o .: "Properties")
+         "AWS::DirectoryService::SimpleAD" -> DirectoryServiceSimpleADProperties <$> (o .: "Properties")
+         "AWS::DynamoDB::Table" -> DynamoDBTableProperties <$> (o .: "Properties")
+         "AWS::EC2::CustomerGateway" -> EC2CustomerGatewayProperties <$> (o .: "Properties")
+         "AWS::EC2::DHCPOptions" -> EC2DHCPOptionsProperties <$> (o .: "Properties")
+         "AWS::EC2::EIP" -> EC2EIPProperties <$> (o .: "Properties")
+         "AWS::EC2::EIPAssociation" -> EC2EIPAssociationProperties <$> (o .: "Properties")
+         "AWS::EC2::FlowLog" -> EC2FlowLogProperties <$> (o .: "Properties")
+         "AWS::EC2::Host" -> EC2HostProperties <$> (o .: "Properties")
+         "AWS::EC2::Instance" -> EC2InstanceProperties <$> (o .: "Properties")
+         "AWS::EC2::InternetGateway" -> EC2InternetGatewayProperties <$> (o .: "Properties")
+         "AWS::EC2::NatGateway" -> EC2NatGatewayProperties <$> (o .: "Properties")
+         "AWS::EC2::NetworkAcl" -> EC2NetworkAclProperties <$> (o .: "Properties")
+         "AWS::EC2::NetworkAclEntry" -> EC2NetworkAclEntryProperties <$> (o .: "Properties")
+         "AWS::EC2::NetworkInterface" -> EC2NetworkInterfaceProperties <$> (o .: "Properties")
+         "AWS::EC2::NetworkInterfaceAttachment" -> EC2NetworkInterfaceAttachmentProperties <$> (o .: "Properties")
+         "AWS::EC2::PlacementGroup" -> EC2PlacementGroupProperties <$> (o .: "Properties")
+         "AWS::EC2::Route" -> EC2RouteProperties <$> (o .: "Properties")
+         "AWS::EC2::RouteTable" -> EC2RouteTableProperties <$> (o .: "Properties")
+         "AWS::EC2::SecurityGroup" -> EC2SecurityGroupProperties <$> (o .: "Properties")
+         "AWS::EC2::SecurityGroupEgress" -> EC2SecurityGroupEgressProperties <$> (o .: "Properties")
+         "AWS::EC2::SecurityGroupIngress" -> EC2SecurityGroupIngressProperties <$> (o .: "Properties")
+         "AWS::EC2::SpotFleet" -> EC2SpotFleetProperties <$> (o .: "Properties")
+         "AWS::EC2::Subnet" -> EC2SubnetProperties <$> (o .: "Properties")
+         "AWS::EC2::SubnetCidrBlock" -> EC2SubnetCidrBlockProperties <$> (o .: "Properties")
+         "AWS::EC2::SubnetNetworkAclAssociation" -> EC2SubnetNetworkAclAssociationProperties <$> (o .: "Properties")
+         "AWS::EC2::SubnetRouteTableAssociation" -> EC2SubnetRouteTableAssociationProperties <$> (o .: "Properties")
+         "AWS::EC2::VPC" -> EC2VPCProperties <$> (o .: "Properties")
+         "AWS::EC2::VPCCidrBlock" -> EC2VPCCidrBlockProperties <$> (o .: "Properties")
+         "AWS::EC2::VPCDHCPOptionsAssociation" -> EC2VPCDHCPOptionsAssociationProperties <$> (o .: "Properties")
+         "AWS::EC2::VPCEndpoint" -> EC2VPCEndpointProperties <$> (o .: "Properties")
+         "AWS::EC2::VPCGatewayAttachment" -> EC2VPCGatewayAttachmentProperties <$> (o .: "Properties")
+         "AWS::EC2::VPCPeeringConnection" -> EC2VPCPeeringConnectionProperties <$> (o .: "Properties")
+         "AWS::EC2::VPNConnection" -> EC2VPNConnectionProperties <$> (o .: "Properties")
+         "AWS::EC2::VPNConnectionRoute" -> EC2VPNConnectionRouteProperties <$> (o .: "Properties")
+         "AWS::EC2::VPNGateway" -> EC2VPNGatewayProperties <$> (o .: "Properties")
+         "AWS::EC2::VPNGatewayRoutePropagation" -> EC2VPNGatewayRoutePropagationProperties <$> (o .: "Properties")
+         "AWS::EC2::Volume" -> EC2VolumeProperties <$> (o .: "Properties")
+         "AWS::EC2::VolumeAttachment" -> EC2VolumeAttachmentProperties <$> (o .: "Properties")
+         "AWS::ECR::Repository" -> ECRRepositoryProperties <$> (o .: "Properties")
+         "AWS::ECS::Cluster" -> ECSClusterProperties <$> (o .: "Properties")
+         "AWS::ECS::Service" -> ECSServiceProperties <$> (o .: "Properties")
+         "AWS::ECS::TaskDefinition" -> ECSTaskDefinitionProperties <$> (o .: "Properties")
+         "AWS::EFS::FileSystem" -> EFSFileSystemProperties <$> (o .: "Properties")
+         "AWS::EFS::MountTarget" -> EFSMountTargetProperties <$> (o .: "Properties")
+         "AWS::EMR::Cluster" -> EMRClusterProperties <$> (o .: "Properties")
+         "AWS::EMR::InstanceGroupConfig" -> EMRInstanceGroupConfigProperties <$> (o .: "Properties")
+         "AWS::EMR::Step" -> EMRStepProperties <$> (o .: "Properties")
+         "AWS::ElastiCache::CacheCluster" -> ElastiCacheCacheClusterProperties <$> (o .: "Properties")
+         "AWS::ElastiCache::ParameterGroup" -> ElastiCacheParameterGroupProperties <$> (o .: "Properties")
+         "AWS::ElastiCache::ReplicationGroup" -> ElastiCacheReplicationGroupProperties <$> (o .: "Properties")
+         "AWS::ElastiCache::SecurityGroup" -> ElastiCacheSecurityGroupProperties <$> (o .: "Properties")
+         "AWS::ElastiCache::SecurityGroupIngress" -> ElastiCacheSecurityGroupIngressProperties <$> (o .: "Properties")
+         "AWS::ElastiCache::SubnetGroup" -> ElastiCacheSubnetGroupProperties <$> (o .: "Properties")
+         "AWS::ElasticBeanstalk::Application" -> ElasticBeanstalkApplicationProperties <$> (o .: "Properties")
+         "AWS::ElasticBeanstalk::ApplicationVersion" -> ElasticBeanstalkApplicationVersionProperties <$> (o .: "Properties")
+         "AWS::ElasticBeanstalk::ConfigurationTemplate" -> ElasticBeanstalkConfigurationTemplateProperties <$> (o .: "Properties")
+         "AWS::ElasticBeanstalk::Environment" -> ElasticBeanstalkEnvironmentProperties <$> (o .: "Properties")
+         "AWS::ElasticLoadBalancing::LoadBalancer" -> ElasticLoadBalancingLoadBalancerProperties <$> (o .: "Properties")
+         "AWS::ElasticLoadBalancingV2::Listener" -> ElasticLoadBalancingV2ListenerProperties <$> (o .: "Properties")
+         "AWS::ElasticLoadBalancingV2::ListenerRule" -> ElasticLoadBalancingV2ListenerRuleProperties <$> (o .: "Properties")
+         "AWS::ElasticLoadBalancingV2::LoadBalancer" -> ElasticLoadBalancingV2LoadBalancerProperties <$> (o .: "Properties")
+         "AWS::ElasticLoadBalancingV2::TargetGroup" -> ElasticLoadBalancingV2TargetGroupProperties <$> (o .: "Properties")
+         "AWS::Elasticsearch::Domain" -> ElasticsearchDomainProperties <$> (o .: "Properties")
+         "AWS::Events::Rule" -> EventsRuleProperties <$> (o .: "Properties")
+         "AWS::GameLift::Alias" -> GameLiftAliasProperties <$> (o .: "Properties")
+         "AWS::GameLift::Build" -> GameLiftBuildProperties <$> (o .: "Properties")
+         "AWS::GameLift::Fleet" -> GameLiftFleetProperties <$> (o .: "Properties")
+         "AWS::IAM::AccessKey" -> IAMAccessKeyProperties <$> (o .: "Properties")
+         "AWS::IAM::Group" -> IAMGroupProperties <$> (o .: "Properties")
+         "AWS::IAM::InstanceProfile" -> IAMInstanceProfileProperties <$> (o .: "Properties")
+         "AWS::IAM::ManagedPolicy" -> IAMManagedPolicyProperties <$> (o .: "Properties")
+         "AWS::IAM::Policy" -> IAMPolicyProperties <$> (o .: "Properties")
+         "AWS::IAM::Role" -> IAMRoleProperties <$> (o .: "Properties")
+         "AWS::IAM::User" -> IAMUserProperties <$> (o .: "Properties")
+         "AWS::IAM::UserToGroupAddition" -> IAMUserToGroupAdditionProperties <$> (o .: "Properties")
+         "AWS::IoT::Certificate" -> IoTCertificateProperties <$> (o .: "Properties")
+         "AWS::IoT::Policy" -> IoTPolicyProperties <$> (o .: "Properties")
+         "AWS::IoT::PolicyPrincipalAttachment" -> IoTPolicyPrincipalAttachmentProperties <$> (o .: "Properties")
+         "AWS::IoT::Thing" -> IoTThingProperties <$> (o .: "Properties")
+         "AWS::IoT::ThingPrincipalAttachment" -> IoTThingPrincipalAttachmentProperties <$> (o .: "Properties")
+         "AWS::IoT::TopicRule" -> IoTTopicRuleProperties <$> (o .: "Properties")
+         "AWS::KMS::Alias" -> KMSAliasProperties <$> (o .: "Properties")
+         "AWS::KMS::Key" -> KMSKeyProperties <$> (o .: "Properties")
+         "AWS::Kinesis::Stream" -> KinesisStreamProperties <$> (o .: "Properties")
+         "AWS::KinesisFirehose::DeliveryStream" -> KinesisFirehoseDeliveryStreamProperties <$> (o .: "Properties")
+         "AWS::Lambda::Alias" -> LambdaAliasProperties <$> (o .: "Properties")
+         "AWS::Lambda::EventSourceMapping" -> LambdaEventSourceMappingProperties <$> (o .: "Properties")
+         "AWS::Lambda::Function" -> LambdaFunctionProperties <$> (o .: "Properties")
+         "AWS::Lambda::Permission" -> LambdaPermissionProperties <$> (o .: "Properties")
+         "AWS::Lambda::Version" -> LambdaVersionProperties <$> (o .: "Properties")
+         "AWS::Logs::Destination" -> LogsDestinationProperties <$> (o .: "Properties")
+         "AWS::Logs::LogGroup" -> LogsLogGroupProperties <$> (o .: "Properties")
+         "AWS::Logs::LogStream" -> LogsLogStreamProperties <$> (o .: "Properties")
+         "AWS::Logs::MetricFilter" -> LogsMetricFilterProperties <$> (o .: "Properties")
+         "AWS::Logs::SubscriptionFilter" -> LogsSubscriptionFilterProperties <$> (o .: "Properties")
+         "AWS::OpsWorks::App" -> OpsWorksAppProperties <$> (o .: "Properties")
+         "AWS::OpsWorks::ElasticLoadBalancerAttachment" -> OpsWorksElasticLoadBalancerAttachmentProperties <$> (o .: "Properties")
+         "AWS::OpsWorks::Instance" -> OpsWorksInstanceProperties <$> (o .: "Properties")
+         "AWS::OpsWorks::Layer" -> OpsWorksLayerProperties <$> (o .: "Properties")
+         "AWS::OpsWorks::Stack" -> OpsWorksStackProperties <$> (o .: "Properties")
+         "AWS::OpsWorks::UserProfile" -> OpsWorksUserProfileProperties <$> (o .: "Properties")
+         "AWS::OpsWorks::Volume" -> OpsWorksVolumeProperties <$> (o .: "Properties")
+         "AWS::RDS::DBCluster" -> RDSDBClusterProperties <$> (o .: "Properties")
+         "AWS::RDS::DBClusterParameterGroup" -> RDSDBClusterParameterGroupProperties <$> (o .: "Properties")
+         "AWS::RDS::DBInstance" -> RDSDBInstanceProperties <$> (o .: "Properties")
+         "AWS::RDS::DBParameterGroup" -> RDSDBParameterGroupProperties <$> (o .: "Properties")
+         "AWS::RDS::DBSecurityGroup" -> RDSDBSecurityGroupProperties <$> (o .: "Properties")
+         "AWS::RDS::DBSecurityGroupIngress" -> RDSDBSecurityGroupIngressProperties <$> (o .: "Properties")
+         "AWS::RDS::DBSubnetGroup" -> RDSDBSubnetGroupProperties <$> (o .: "Properties")
+         "AWS::RDS::EventSubscription" -> RDSEventSubscriptionProperties <$> (o .: "Properties")
+         "AWS::RDS::OptionGroup" -> RDSOptionGroupProperties <$> (o .: "Properties")
+         "AWS::Redshift::Cluster" -> RedshiftClusterProperties <$> (o .: "Properties")
+         "AWS::Redshift::ClusterParameterGroup" -> RedshiftClusterParameterGroupProperties <$> (o .: "Properties")
+         "AWS::Redshift::ClusterSecurityGroup" -> RedshiftClusterSecurityGroupProperties <$> (o .: "Properties")
+         "AWS::Redshift::ClusterSecurityGroupIngress" -> RedshiftClusterSecurityGroupIngressProperties <$> (o .: "Properties")
+         "AWS::Redshift::ClusterSubnetGroup" -> RedshiftClusterSubnetGroupProperties <$> (o .: "Properties")
+         "AWS::Route53::HealthCheck" -> Route53HealthCheckProperties <$> (o .: "Properties")
+         "AWS::Route53::HostedZone" -> Route53HostedZoneProperties <$> (o .: "Properties")
+         "AWS::Route53::RecordSet" -> Route53RecordSetProperties <$> (o .: "Properties")
+         "AWS::Route53::RecordSetGroup" -> Route53RecordSetGroupProperties <$> (o .: "Properties")
+         "AWS::S3::Bucket" -> S3BucketProperties <$> (o .: "Properties")
+         "AWS::S3::BucketPolicy" -> S3BucketPolicyProperties <$> (o .: "Properties")
+         "AWS::SDB::Domain" -> SDBDomainProperties <$> (o .: "Properties")
+         "AWS::SNS::Subscription" -> SNSSubscriptionProperties <$> (o .: "Properties")
+         "AWS::SNS::Topic" -> SNSTopicProperties <$> (o .: "Properties")
+         "AWS::SNS::TopicPolicy" -> SNSTopicPolicyProperties <$> (o .: "Properties")
+         "AWS::SQS::Queue" -> SQSQueueProperties <$> (o .: "Properties")
+         "AWS::SQS::QueuePolicy" -> SQSQueuePolicyProperties <$> (o .: "Properties")
+         "AWS::SSM::Association" -> SSMAssociationProperties <$> (o .: "Properties")
+         "AWS::SSM::Document" -> SSMDocumentProperties <$> (o .: "Properties")
+         "AWS::WAF::ByteMatchSet" -> WAFByteMatchSetProperties <$> (o .: "Properties")
+         "AWS::WAF::IPSet" -> WAFIPSetProperties <$> (o .: "Properties")
+         "AWS::WAF::Rule" -> WAFRuleProperties <$> (o .: "Properties")
+         "AWS::WAF::SizeConstraintSet" -> WAFSizeConstraintSetProperties <$> (o .: "Properties")
+         "AWS::WAF::SqlInjectionMatchSet" -> WAFSqlInjectionMatchSetProperties <$> (o .: "Properties")
+         "AWS::WAF::WebACL" -> WAFWebACLProperties <$> (o .: "Properties")
+         "AWS::WAF::XssMatchSet" -> WAFXssMatchSetProperties <$> (o .: "Properties")
+         "AWS::WorkSpaces::Workspace" -> WorkSpacesWorkspaceProperties <$> (o .: "Properties")
 
          _ -> fail $ "Unknown resource type: " ++ type'
        dp <- o .:? "DeletionPolicy"
diff --git a/library-gen/Stratosphere/Resources/AccessKey.hs b/library-gen/Stratosphere/Resources/AccessKey.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/AccessKey.hs
+++ /dev/null
@@ -1,60 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::IAM::AccessKey resource type generates a secret access key and
--- assigns it to an IAM user or AWS account. This type supports updates. For
--- more information about updating stacks, see AWS CloudFormation Stacks
--- Updates.
-
-module Stratosphere.Resources.AccessKey where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for AccessKey. See 'accessKey' for a more
--- convenient constructor.
-data AccessKey =
-  AccessKey
-  { _accessKeySerial :: Maybe (Val Integer')
-  , _accessKeyStatus :: Maybe (Val Text)
-  , _accessKeyUserName :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON AccessKey where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
-
-instance FromJSON AccessKey where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
-
--- | Constructor for 'AccessKey' containing required fields as arguments.
-accessKey
-  :: Val Text -- ^ 'akUserName'
-  -> AccessKey
-accessKey userNamearg =
-  AccessKey
-  { _accessKeySerial = Nothing
-  , _accessKeyStatus = Nothing
-  , _accessKeyUserName = userNamearg
-  }
-
--- | This value is specific to AWS CloudFormation and can only be incremented.
--- Incrementing this value notifies AWS CloudFormation that you want to rotate
--- your access key. When you update your stack, AWS CloudFormation will
--- replace the existing access key with a new key.
-akSerial :: Lens' AccessKey (Maybe (Val Integer'))
-akSerial = lens _accessKeySerial (\s a -> s { _accessKeySerial = a })
-
--- | The status of the access key. By default, AWS CloudFormation sets this
--- property value to Active.
-akStatus :: Lens' AccessKey (Maybe (Val Text))
-akStatus = lens _accessKeyStatus (\s a -> s { _accessKeyStatus = a })
-
--- | The name of the user that the new key will belong to.
-akUserName :: Lens' AccessKey (Val Text)
-akUserName = lens _accessKeyUserName (\s a -> s { _accessKeyUserName = a })
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayAccount.hs b/library-gen/Stratosphere/Resources/ApiGatewayAccount.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayAccount.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayAccount.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::ApiGateway::Account resource specifies the AWS Identity and
--- Access Management (IAM) role that Amazon API Gateway (API Gateway) uses to
--- write API logs to Amazon CloudWatch Logs (CloudWatch Logs).
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-account.html
 
 module Stratosphere.Resources.ApiGatewayAccount where
 
@@ -17,7 +15,7 @@
 
 
 -- | Full data type definition for ApiGatewayAccount. See 'apiGatewayAccount'
--- for a more convenient constructor.
+-- | for a more convenient constructor.
 data ApiGatewayAccount =
   ApiGatewayAccount
   { _apiGatewayAccountCloudWatchRoleArn :: Maybe (Val Text)
@@ -30,7 +28,7 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
 
 -- | Constructor for 'ApiGatewayAccount' containing required fields as
--- arguments.
+-- | arguments.
 apiGatewayAccount
   :: ApiGatewayAccount
 apiGatewayAccount  =
@@ -38,7 +36,6 @@
   { _apiGatewayAccountCloudWatchRoleArn = Nothing
   }
 
--- | The Amazon Resource Name (ARN) of an IAM role that has write access to
--- CloudWatch Logs in your account.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-account.html#cfn-apigateway-account-cloudwatchrolearn
 agaCloudWatchRoleArn :: Lens' ApiGatewayAccount (Maybe (Val Text))
 agaCloudWatchRoleArn = lens _apiGatewayAccountCloudWatchRoleArn (\s a -> s { _apiGatewayAccountCloudWatchRoleArn = a })
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayApiKey.hs b/library-gen/Stratosphere/Resources/ApiGatewayApiKey.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ApiGatewayApiKey.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html
+
+module Stratosphere.Resources.ApiGatewayApiKey where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ApiGatewayApiKeyStageKey
+
+-- | Full data type definition for ApiGatewayApiKey. See 'apiGatewayApiKey'
+-- | for a more convenient constructor.
+data ApiGatewayApiKey =
+  ApiGatewayApiKey
+  { _apiGatewayApiKeyDescription :: Maybe (Val Text)
+  , _apiGatewayApiKeyEnabled :: Maybe (Val Bool')
+  , _apiGatewayApiKeyName :: Maybe (Val Text)
+  , _apiGatewayApiKeyStageKeys :: Maybe [ApiGatewayApiKeyStageKey]
+  } deriving (Show, Generic)
+
+instance ToJSON ApiGatewayApiKey where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+instance FromJSON ApiGatewayApiKey where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+-- | Constructor for 'ApiGatewayApiKey' containing required fields as
+-- | arguments.
+apiGatewayApiKey
+  :: ApiGatewayApiKey
+apiGatewayApiKey  =
+  ApiGatewayApiKey
+  { _apiGatewayApiKeyDescription = Nothing
+  , _apiGatewayApiKeyEnabled = Nothing
+  , _apiGatewayApiKeyName = Nothing
+  , _apiGatewayApiKeyStageKeys = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apigateway-apikey-description
+agakDescription :: Lens' ApiGatewayApiKey (Maybe (Val Text))
+agakDescription = lens _apiGatewayApiKeyDescription (\s a -> s { _apiGatewayApiKeyDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apigateway-apikey-enabled
+agakEnabled :: Lens' ApiGatewayApiKey (Maybe (Val Bool'))
+agakEnabled = lens _apiGatewayApiKeyEnabled (\s a -> s { _apiGatewayApiKeyEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apigateway-apikey-name
+agakName :: Lens' ApiGatewayApiKey (Maybe (Val Text))
+agakName = lens _apiGatewayApiKeyName (\s a -> s { _apiGatewayApiKeyName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apigateway-apikey-stagekeys
+agakStageKeys :: Lens' ApiGatewayApiKey (Maybe [ApiGatewayApiKeyStageKey])
+agakStageKeys = lens _apiGatewayApiKeyStageKeys (\s a -> s { _apiGatewayApiKeyStageKeys = a })
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayAuthorizer.hs b/library-gen/Stratosphere/Resources/ApiGatewayAuthorizer.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ApiGatewayAuthorizer.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html
+
+module Stratosphere.Resources.ApiGatewayAuthorizer where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ApiGatewayAuthorizer. See
+-- | 'apiGatewayAuthorizer' for a more convenient constructor.
+data ApiGatewayAuthorizer =
+  ApiGatewayAuthorizer
+  { _apiGatewayAuthorizerAuthorizerCredentials :: Maybe (Val Text)
+  , _apiGatewayAuthorizerAuthorizerResultTtlInSeconds :: Maybe (Val Integer')
+  , _apiGatewayAuthorizerAuthorizerUri :: Maybe (Val Text)
+  , _apiGatewayAuthorizerIdentitySource :: Maybe (Val Text)
+  , _apiGatewayAuthorizerIdentityValidationExpression :: Maybe (Val Text)
+  , _apiGatewayAuthorizerName :: Maybe (Val Text)
+  , _apiGatewayAuthorizerProviderARNs :: Maybe [Val Text]
+  , _apiGatewayAuthorizerRestApiId :: Maybe (Val Text)
+  , _apiGatewayAuthorizerType :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ApiGatewayAuthorizer where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+instance FromJSON ApiGatewayAuthorizer where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+-- | Constructor for 'ApiGatewayAuthorizer' containing required fields as
+-- | arguments.
+apiGatewayAuthorizer
+  :: ApiGatewayAuthorizer
+apiGatewayAuthorizer  =
+  ApiGatewayAuthorizer
+  { _apiGatewayAuthorizerAuthorizerCredentials = Nothing
+  , _apiGatewayAuthorizerAuthorizerResultTtlInSeconds = Nothing
+  , _apiGatewayAuthorizerAuthorizerUri = Nothing
+  , _apiGatewayAuthorizerIdentitySource = Nothing
+  , _apiGatewayAuthorizerIdentityValidationExpression = Nothing
+  , _apiGatewayAuthorizerName = Nothing
+  , _apiGatewayAuthorizerProviderARNs = Nothing
+  , _apiGatewayAuthorizerRestApiId = Nothing
+  , _apiGatewayAuthorizerType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-authorizercredentials
+agaAuthorizerCredentials :: Lens' ApiGatewayAuthorizer (Maybe (Val Text))
+agaAuthorizerCredentials = lens _apiGatewayAuthorizerAuthorizerCredentials (\s a -> s { _apiGatewayAuthorizerAuthorizerCredentials = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-authorizerresultttlinseconds
+agaAuthorizerResultTtlInSeconds :: Lens' ApiGatewayAuthorizer (Maybe (Val Integer'))
+agaAuthorizerResultTtlInSeconds = lens _apiGatewayAuthorizerAuthorizerResultTtlInSeconds (\s a -> s { _apiGatewayAuthorizerAuthorizerResultTtlInSeconds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-authorizeruri
+agaAuthorizerUri :: Lens' ApiGatewayAuthorizer (Maybe (Val Text))
+agaAuthorizerUri = lens _apiGatewayAuthorizerAuthorizerUri (\s a -> s { _apiGatewayAuthorizerAuthorizerUri = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-identitysource
+agaIdentitySource :: Lens' ApiGatewayAuthorizer (Maybe (Val Text))
+agaIdentitySource = lens _apiGatewayAuthorizerIdentitySource (\s a -> s { _apiGatewayAuthorizerIdentitySource = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-identityvalidationexpression
+agaIdentityValidationExpression :: Lens' ApiGatewayAuthorizer (Maybe (Val Text))
+agaIdentityValidationExpression = lens _apiGatewayAuthorizerIdentityValidationExpression (\s a -> s { _apiGatewayAuthorizerIdentityValidationExpression = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-name
+agaName :: Lens' ApiGatewayAuthorizer (Maybe (Val Text))
+agaName = lens _apiGatewayAuthorizerName (\s a -> s { _apiGatewayAuthorizerName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-providerarns
+agaProviderARNs :: Lens' ApiGatewayAuthorizer (Maybe [Val Text])
+agaProviderARNs = lens _apiGatewayAuthorizerProviderARNs (\s a -> s { _apiGatewayAuthorizerProviderARNs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-restapiid
+agaRestApiId :: Lens' ApiGatewayAuthorizer (Maybe (Val Text))
+agaRestApiId = lens _apiGatewayAuthorizerRestApiId (\s a -> s { _apiGatewayAuthorizerRestApiId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-type
+agaType :: Lens' ApiGatewayAuthorizer (Maybe (Val Text))
+agaType = lens _apiGatewayAuthorizerType (\s a -> s { _apiGatewayAuthorizerType = a })
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayBasePathMapping.hs b/library-gen/Stratosphere/Resources/ApiGatewayBasePathMapping.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ApiGatewayBasePathMapping.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html
+
+module Stratosphere.Resources.ApiGatewayBasePathMapping where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ApiGatewayBasePathMapping. See
+-- | 'apiGatewayBasePathMapping' for a more convenient constructor.
+data ApiGatewayBasePathMapping =
+  ApiGatewayBasePathMapping
+  { _apiGatewayBasePathMappingBasePath :: Maybe (Val Text)
+  , _apiGatewayBasePathMappingDomainName :: Maybe (Val Text)
+  , _apiGatewayBasePathMappingRestApiId :: Maybe (Val Text)
+  , _apiGatewayBasePathMappingStage :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ApiGatewayBasePathMapping where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+instance FromJSON ApiGatewayBasePathMapping where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+-- | Constructor for 'ApiGatewayBasePathMapping' containing required fields as
+-- | arguments.
+apiGatewayBasePathMapping
+  :: ApiGatewayBasePathMapping
+apiGatewayBasePathMapping  =
+  ApiGatewayBasePathMapping
+  { _apiGatewayBasePathMappingBasePath = Nothing
+  , _apiGatewayBasePathMappingDomainName = Nothing
+  , _apiGatewayBasePathMappingRestApiId = Nothing
+  , _apiGatewayBasePathMappingStage = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html#cfn-apigateway-basepathmapping-basepath
+agbpmBasePath :: Lens' ApiGatewayBasePathMapping (Maybe (Val Text))
+agbpmBasePath = lens _apiGatewayBasePathMappingBasePath (\s a -> s { _apiGatewayBasePathMappingBasePath = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html#cfn-apigateway-basepathmapping-domainname
+agbpmDomainName :: Lens' ApiGatewayBasePathMapping (Maybe (Val Text))
+agbpmDomainName = lens _apiGatewayBasePathMappingDomainName (\s a -> s { _apiGatewayBasePathMappingDomainName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html#cfn-apigateway-basepathmapping-restapiid
+agbpmRestApiId :: Lens' ApiGatewayBasePathMapping (Maybe (Val Text))
+agbpmRestApiId = lens _apiGatewayBasePathMappingRestApiId (\s a -> s { _apiGatewayBasePathMappingRestApiId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html#cfn-apigateway-basepathmapping-stage
+agbpmStage :: Lens' ApiGatewayBasePathMapping (Maybe (Val Text))
+agbpmStage = lens _apiGatewayBasePathMappingStage (\s a -> s { _apiGatewayBasePathMappingStage = a })
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayClientCertificate.hs b/library-gen/Stratosphere/Resources/ApiGatewayClientCertificate.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ApiGatewayClientCertificate.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-clientcertificate.html
+
+module Stratosphere.Resources.ApiGatewayClientCertificate where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ApiGatewayClientCertificate. See
+-- | 'apiGatewayClientCertificate' for a more convenient constructor.
+data ApiGatewayClientCertificate =
+  ApiGatewayClientCertificate
+  { _apiGatewayClientCertificateDescription :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ApiGatewayClientCertificate where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON ApiGatewayClientCertificate where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'ApiGatewayClientCertificate' containing required fields
+-- | as arguments.
+apiGatewayClientCertificate
+  :: ApiGatewayClientCertificate
+apiGatewayClientCertificate  =
+  ApiGatewayClientCertificate
+  { _apiGatewayClientCertificateDescription = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-clientcertificate.html#cfn-apigateway-clientcertificate-description
+agccDescription :: Lens' ApiGatewayClientCertificate (Maybe (Val Text))
+agccDescription = lens _apiGatewayClientCertificateDescription (\s a -> s { _apiGatewayClientCertificateDescription = a })
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayDeployment.hs b/library-gen/Stratosphere/Resources/ApiGatewayDeployment.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayDeployment.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayDeployment.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::ApiGateway::Deployment resource deploys an Amazon API Gateway
--- (API Gateway) RestApi resource to a stage so that clients can call the API
--- over the Internet. The stage acts as an environment.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html
 
 module Stratosphere.Resources.ApiGatewayDeployment where
 
@@ -14,15 +12,15 @@
 import GHC.Generics
 
 import Stratosphere.Values
-import Stratosphere.ResourceProperties.APIGatewayDeploymentStageDescription
+import Stratosphere.ResourceProperties.ApiGatewayDeploymentStageDescription
 
 -- | Full data type definition for ApiGatewayDeployment. See
--- 'apiGatewayDeployment' for a more convenient constructor.
+-- | 'apiGatewayDeployment' for a more convenient constructor.
 data ApiGatewayDeployment =
   ApiGatewayDeployment
   { _apiGatewayDeploymentDescription :: Maybe (Val Text)
   , _apiGatewayDeploymentRestApiId :: Val Text
-  , _apiGatewayDeploymentStageDescription :: Maybe APIGatewayDeploymentStageDescription
+  , _apiGatewayDeploymentStageDescription :: Maybe ApiGatewayDeploymentStageDescription
   , _apiGatewayDeploymentStageName :: Maybe (Val Text)
   } deriving (Show, Generic)
 
@@ -33,7 +31,7 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
 
 -- | Constructor for 'ApiGatewayDeployment' containing required fields as
--- arguments.
+-- | arguments.
 apiGatewayDeployment
   :: Val Text -- ^ 'agdRestApiId'
   -> ApiGatewayDeployment
@@ -45,19 +43,18 @@
   , _apiGatewayDeploymentStageName = Nothing
   }
 
--- | A description of the purpose of the API Gateway deployment.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html#cfn-apigateway-deployment-description
 agdDescription :: Lens' ApiGatewayDeployment (Maybe (Val Text))
 agdDescription = lens _apiGatewayDeploymentDescription (\s a -> s { _apiGatewayDeploymentDescription = a })
 
--- | The ID of the RestApi resource to deploy.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html#cfn-apigateway-deployment-restapiid
 agdRestApiId :: Lens' ApiGatewayDeployment (Val Text)
 agdRestApiId = lens _apiGatewayDeploymentRestApiId (\s a -> s { _apiGatewayDeploymentRestApiId = a })
 
--- | Configures the stage that API Gateway creates with this deployment.
-agdStageDescription :: Lens' ApiGatewayDeployment (Maybe APIGatewayDeploymentStageDescription)
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html#cfn-apigateway-deployment-stagedescription
+agdStageDescription :: Lens' ApiGatewayDeployment (Maybe ApiGatewayDeploymentStageDescription)
 agdStageDescription = lens _apiGatewayDeploymentStageDescription (\s a -> s { _apiGatewayDeploymentStageDescription = a })
 
--- | A name for the stage that API Gateway creates with this deployment. Use
--- only alphanumeric characters.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html#cfn-apigateway-deployment-stagename
 agdStageName :: Lens' ApiGatewayDeployment (Maybe (Val Text))
 agdStageName = lens _apiGatewayDeploymentStageName (\s a -> s { _apiGatewayDeploymentStageName = a })
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayMethod.hs b/library-gen/Stratosphere/Resources/ApiGatewayMethod.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayMethod.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayMethod.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::ApiGateway::Method resource creates Amazon API Gateway (API
--- Gateway) methods that define the parameters and body that clients must send
--- in their requests.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html
 
 module Stratosphere.Resources.ApiGatewayMethod where
 
@@ -14,24 +12,24 @@
 import GHC.Generics
 
 import Stratosphere.Values
-import Stratosphere.ResourceProperties.ApiGatewayIntegration
-import Stratosphere.ResourceProperties.ApiGatewayMethodResponse
 import Stratosphere.Types
+import Stratosphere.ResourceProperties.ApiGatewayMethodIntegration
+import Stratosphere.ResourceProperties.ApiGatewayMethodMethodResponse
 
 -- | Full data type definition for ApiGatewayMethod. See 'apiGatewayMethod'
--- for a more convenient constructor.
+-- | for a more convenient constructor.
 data ApiGatewayMethod =
   ApiGatewayMethod
   { _apiGatewayMethodApiKeyRequired :: Maybe (Val Bool')
-  , _apiGatewayMethodAuthorizationType :: AuthorizationType
+  , _apiGatewayMethodAuthorizationType :: Maybe (Val AuthorizationType)
   , _apiGatewayMethodAuthorizerId :: Maybe (Val Text)
-  , _apiGatewayMethodHttpMethod :: HttpMethod
-  , _apiGatewayMethodIntegration :: Maybe ApiGatewayIntegration
-  , _apiGatewayMethodMethodResponses :: Maybe [ApiGatewayMethodResponse]
+  , _apiGatewayMethodHttpMethod :: Val HttpMethod
+  , _apiGatewayMethodIntegration :: Maybe ApiGatewayMethodIntegration
+  , _apiGatewayMethodMethodResponses :: Maybe [ApiGatewayMethodMethodResponse]
   , _apiGatewayMethodRequestModels :: Maybe Object
   , _apiGatewayMethodRequestParameters :: Maybe Object
-  , _apiGatewayMethodResourceId :: Val Text
-  , _apiGatewayMethodRestApiId :: Val Text
+  , _apiGatewayMethodResourceId :: Maybe (Val Text)
+  , _apiGatewayMethodRestApiId :: Maybe (Val Text)
   } deriving (Show, Generic)
 
 instance ToJSON ApiGatewayMethod where
@@ -41,73 +39,60 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
 
 -- | Constructor for 'ApiGatewayMethod' containing required fields as
--- arguments.
+-- | arguments.
 apiGatewayMethod
-  :: AuthorizationType -- ^ 'agmeAuthorizationType'
-  -> HttpMethod -- ^ 'agmeHttpMethod'
-  -> Val Text -- ^ 'agmeResourceId'
-  -> Val Text -- ^ 'agmeRestApiId'
+  :: Val HttpMethod -- ^ 'agmeHttpMethod'
   -> ApiGatewayMethod
-apiGatewayMethod authorizationTypearg httpMethodarg resourceIdarg restApiIdarg =
+apiGatewayMethod httpMethodarg =
   ApiGatewayMethod
   { _apiGatewayMethodApiKeyRequired = Nothing
-  , _apiGatewayMethodAuthorizationType = authorizationTypearg
+  , _apiGatewayMethodAuthorizationType = Nothing
   , _apiGatewayMethodAuthorizerId = Nothing
   , _apiGatewayMethodHttpMethod = httpMethodarg
   , _apiGatewayMethodIntegration = Nothing
   , _apiGatewayMethodMethodResponses = Nothing
   , _apiGatewayMethodRequestModels = Nothing
   , _apiGatewayMethodRequestParameters = Nothing
-  , _apiGatewayMethodResourceId = resourceIdarg
-  , _apiGatewayMethodRestApiId = restApiIdarg
+  , _apiGatewayMethodResourceId = Nothing
+  , _apiGatewayMethodRestApiId = Nothing
   }
 
--- | Indicates whether the method requires clients to submit a valid API key.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-apikeyrequired
 agmeApiKeyRequired :: Lens' ApiGatewayMethod (Maybe (Val Bool'))
 agmeApiKeyRequired = lens _apiGatewayMethodApiKeyRequired (\s a -> s { _apiGatewayMethodApiKeyRequired = a })
 
--- | The method's authorization type.
-agmeAuthorizationType :: Lens' ApiGatewayMethod AuthorizationType
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-authorizationtype
+agmeAuthorizationType :: Lens' ApiGatewayMethod (Maybe (Val AuthorizationType))
 agmeAuthorizationType = lens _apiGatewayMethodAuthorizationType (\s a -> s { _apiGatewayMethodAuthorizationType = a })
 
--- | The identifier of the authorizer to use on this method. If you specify
--- this property, specify CUSTOM for the AuthorizationType property.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-authorizerid
 agmeAuthorizerId :: Lens' ApiGatewayMethod (Maybe (Val Text))
 agmeAuthorizerId = lens _apiGatewayMethodAuthorizerId (\s a -> s { _apiGatewayMethodAuthorizerId = a })
 
--- | The HTTP method that clients will use to call this method.
-agmeHttpMethod :: Lens' ApiGatewayMethod HttpMethod
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-httpmethod
+agmeHttpMethod :: Lens' ApiGatewayMethod (Val HttpMethod)
 agmeHttpMethod = lens _apiGatewayMethodHttpMethod (\s a -> s { _apiGatewayMethodHttpMethod = a })
 
--- | The back-end system that the method calls when it receives a request.
-agmeIntegration :: Lens' ApiGatewayMethod (Maybe ApiGatewayIntegration)
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-integration
+agmeIntegration :: Lens' ApiGatewayMethod (Maybe ApiGatewayMethodIntegration)
 agmeIntegration = lens _apiGatewayMethodIntegration (\s a -> s { _apiGatewayMethodIntegration = a })
 
--- | The responses that can be sent to the client who calls the method.
-agmeMethodResponses :: Lens' ApiGatewayMethod (Maybe [ApiGatewayMethodResponse])
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-methodresponses
+agmeMethodResponses :: Lens' ApiGatewayMethod (Maybe [ApiGatewayMethodMethodResponse])
 agmeMethodResponses = lens _apiGatewayMethodMethodResponses (\s a -> s { _apiGatewayMethodMethodResponses = a })
 
--- | The resources used for the response's content type. Specify response
--- models as key-value pairs (string-to-string map), with a content type as
--- the key and a Model resource name as the value.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-requestmodels
 agmeRequestModels :: Lens' ApiGatewayMethod (Maybe Object)
 agmeRequestModels = lens _apiGatewayMethodRequestModels (\s a -> s { _apiGatewayMethodRequestModels = a })
 
--- | Request parameters that API Gateway accepts. Specify request parameters
--- as key-value pairs (string-to-Boolean map), with a source as the key and a
--- Boolean as the value. The Boolean specifies whether a parameter is
--- required. A source must match the following format
--- method.request.location.name, where the location is querystring, path, or
--- header, and name is a valid, unique parameter name.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-requestparameters
 agmeRequestParameters :: Lens' ApiGatewayMethod (Maybe Object)
 agmeRequestParameters = lens _apiGatewayMethodRequestParameters (\s a -> s { _apiGatewayMethodRequestParameters = a })
 
--- | The ID of an API Gateway resource. For root resource methods, specify the
--- RestApi root resource ID, such as { "Fn::GetAtt": ["MyRestApi",
--- "RootResourceId"] }.
-agmeResourceId :: Lens' ApiGatewayMethod (Val Text)
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-resourceid
+agmeResourceId :: Lens' ApiGatewayMethod (Maybe (Val Text))
 agmeResourceId = lens _apiGatewayMethodResourceId (\s a -> s { _apiGatewayMethodResourceId = a })
 
--- | The ID of the RestApi resource in which API Gateway creates the method.
-agmeRestApiId :: Lens' ApiGatewayMethod (Val Text)
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-restapiid
+agmeRestApiId :: Lens' ApiGatewayMethod (Maybe (Val Text))
 agmeRestApiId = lens _apiGatewayMethodRestApiId (\s a -> s { _apiGatewayMethodRestApiId = a })
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayModel.hs b/library-gen/Stratosphere/Resources/ApiGatewayModel.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayModel.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayModel.hs
@@ -1,8 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::ApiGateway::Model resource defines the structure of a request or
--- response payload for an Amazon API Gateway (API Gateway) method.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-model.html
 
 module Stratosphere.Resources.ApiGatewayModel where
 
@@ -16,7 +15,7 @@
 
 
 -- | Full data type definition for ApiGatewayModel. See 'apiGatewayModel' for
--- a more convenient constructor.
+-- | a more convenient constructor.
 data ApiGatewayModel =
   ApiGatewayModel
   { _apiGatewayModelContentType :: Maybe (Val Text)
@@ -33,9 +32,9 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
 
 -- | Constructor for 'ApiGatewayModel' containing required fields as
--- arguments.
+-- | arguments.
 apiGatewayModel
-  :: Val Text -- ^ 'agmRestApiId'
+  :: Val Text -- ^ 'agmoRestApiId'
   -> ApiGatewayModel
 apiGatewayModel restApiIdarg =
   ApiGatewayModel
@@ -46,27 +45,22 @@
   , _apiGatewayModelSchema = Nothing
   }
 
--- | The content type for the model.
-agmContentType :: Lens' ApiGatewayModel (Maybe (Val Text))
-agmContentType = lens _apiGatewayModelContentType (\s a -> s { _apiGatewayModelContentType = a })
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-model.html#cfn-apigateway-model-contenttype
+agmoContentType :: Lens' ApiGatewayModel (Maybe (Val Text))
+agmoContentType = lens _apiGatewayModelContentType (\s a -> s { _apiGatewayModelContentType = a })
 
--- | A description that identifies this model.
-agmDescription :: Lens' ApiGatewayModel (Maybe (Val Text))
-agmDescription = lens _apiGatewayModelDescription (\s a -> s { _apiGatewayModelDescription = a })
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-model.html#cfn-apigateway-model-description
+agmoDescription :: Lens' ApiGatewayModel (Maybe (Val Text))
+agmoDescription = lens _apiGatewayModelDescription (\s a -> s { _apiGatewayModelDescription = a })
 
--- | A name for the mode. If you don't specify a name, AWS CloudFormation
--- generates a unique physical ID and uses that ID for the model name. For
--- more information, see Name Type. Important If you specify a name, you
--- cannot do updates that require this resource to be replaced. You can still
--- do updates that require no or some interruption. If you must replace the
--- resource, specify a new name.
-agmName :: Lens' ApiGatewayModel (Maybe (Val Text))
-agmName = lens _apiGatewayModelName (\s a -> s { _apiGatewayModelName = a })
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-model.html#cfn-apigateway-model-name
+agmoName :: Lens' ApiGatewayModel (Maybe (Val Text))
+agmoName = lens _apiGatewayModelName (\s a -> s { _apiGatewayModelName = a })
 
--- | The ID of a REST API with which to associate this model.
-agmRestApiId :: Lens' ApiGatewayModel (Val Text)
-agmRestApiId = lens _apiGatewayModelRestApiId (\s a -> s { _apiGatewayModelRestApiId = a })
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-model.html#cfn-apigateway-model-restapiid
+agmoRestApiId :: Lens' ApiGatewayModel (Val Text)
+agmoRestApiId = lens _apiGatewayModelRestApiId (\s a -> s { _apiGatewayModelRestApiId = a })
 
--- | The schema to use to transform data to one or more output formats.
-agmSchema :: Lens' ApiGatewayModel (Maybe Object)
-agmSchema = lens _apiGatewayModelSchema (\s a -> s { _apiGatewayModelSchema = a })
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-model.html#cfn-apigateway-model-schema
+agmoSchema :: Lens' ApiGatewayModel (Maybe Object)
+agmoSchema = lens _apiGatewayModelSchema (\s a -> s { _apiGatewayModelSchema = a })
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayResource.hs b/library-gen/Stratosphere/Resources/ApiGatewayResource.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayResource.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayResource.hs
@@ -1,8 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::ApiGateway::Resource resource creates a resource in an Amazon
--- API Gateway (API Gateway) API.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-resource.html
 
 module Stratosphere.Resources.ApiGatewayResource where
 
@@ -16,7 +15,7 @@
 
 
 -- | Full data type definition for ApiGatewayResource. See
--- 'apiGatewayResource' for a more convenient constructor.
+-- | 'apiGatewayResource' for a more convenient constructor.
 data ApiGatewayResource =
   ApiGatewayResource
   { _apiGatewayResourceParentId :: Val Text
@@ -31,7 +30,7 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
 
 -- | Constructor for 'ApiGatewayResource' containing required fields as
--- arguments.
+-- | arguments.
 apiGatewayResource
   :: Val Text -- ^ 'agrParentId'
   -> Val Text -- ^ 'agrPathPart'
@@ -44,16 +43,14 @@
   , _apiGatewayResourceRestApiId = restApiIdarg
   }
 
--- | If you want to create a child resource, the ID of the parent resource.
--- For resources without a parent, specify the RestApi root resource ID, such
--- as { "Fn::GetAtt": ["MyRestApi", "RootResourceId"] }.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-resource.html#cfn-apigateway-resource-parentid
 agrParentId :: Lens' ApiGatewayResource (Val Text)
 agrParentId = lens _apiGatewayResourceParentId (\s a -> s { _apiGatewayResourceParentId = a })
 
--- | A path name for the resource.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-resource.html#cfn-apigateway-resource-pathpart
 agrPathPart :: Lens' ApiGatewayResource (Val Text)
 agrPathPart = lens _apiGatewayResourcePathPart (\s a -> s { _apiGatewayResourcePathPart = a })
 
--- | The ID of the RestApi resource in which you want to create this resource.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-resource.html#cfn-apigateway-resource-restapiid
 agrRestApiId :: Lens' ApiGatewayResource (Val Text)
 agrRestApiId = lens _apiGatewayResourceRestApiId (\s a -> s { _apiGatewayResourceRestApiId = a })
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayRestApi.hs b/library-gen/Stratosphere/Resources/ApiGatewayRestApi.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayRestApi.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayRestApi.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::ApiGateway::RestApi resource contains a collection of Amazon API
--- Gateway (API Gateway) resources and methods that can be invoked through
--- HTTPS endpoints.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html
 
 module Stratosphere.Resources.ApiGatewayRestApi where
 
@@ -17,7 +15,7 @@
 import Stratosphere.ResourceProperties.ApiGatewayRestApiS3Location
 
 -- | Full data type definition for ApiGatewayRestApi. See 'apiGatewayRestApi'
--- for a more convenient constructor.
+-- | for a more convenient constructor.
 data ApiGatewayRestApi =
   ApiGatewayRestApi
   { _apiGatewayRestApiBody :: Maybe Object
@@ -25,8 +23,9 @@
   , _apiGatewayRestApiCloneFrom :: Maybe (Val Text)
   , _apiGatewayRestApiDescription :: Maybe (Val Text)
   , _apiGatewayRestApiFailOnWarnings :: Maybe (Val Bool')
-  , _apiGatewayRestApiName :: Val Text
-  , _apiGatewayRestApiParameters :: Maybe [Val Text]
+  , _apiGatewayRestApiMode :: Maybe (Val Text)
+  , _apiGatewayRestApiName :: Maybe (Val Text)
+  , _apiGatewayRestApiParameters :: Maybe Object
   } deriving (Show, Generic)
 
 instance ToJSON ApiGatewayRestApi where
@@ -36,48 +35,49 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
 
 -- | Constructor for 'ApiGatewayRestApi' containing required fields as
--- arguments.
+-- | arguments.
 apiGatewayRestApi
-  :: Val Text -- ^ 'agraName'
-  -> ApiGatewayRestApi
-apiGatewayRestApi namearg =
+  :: ApiGatewayRestApi
+apiGatewayRestApi  =
   ApiGatewayRestApi
   { _apiGatewayRestApiBody = Nothing
   , _apiGatewayRestApiBodyS3Location = Nothing
   , _apiGatewayRestApiCloneFrom = Nothing
   , _apiGatewayRestApiDescription = Nothing
   , _apiGatewayRestApiFailOnWarnings = Nothing
-  , _apiGatewayRestApiName = namearg
+  , _apiGatewayRestApiMode = Nothing
+  , _apiGatewayRestApiName = Nothing
   , _apiGatewayRestApiParameters = Nothing
   }
 
--- | A Swagger specification that defines a set of RESTful APIs in the JSON
--- format.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-body
 agraBody :: Lens' ApiGatewayRestApi (Maybe Object)
 agraBody = lens _apiGatewayRestApiBody (\s a -> s { _apiGatewayRestApiBody = a })
 
--- | The Amazon Simple Storage Service (Amazon S3) location that points to a
--- Swagger file, which defines a set of RESTful APIs in JSON or YAML format.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-bodys3location
 agraBodyS3Location :: Lens' ApiGatewayRestApi (Maybe ApiGatewayRestApiS3Location)
 agraBodyS3Location = lens _apiGatewayRestApiBodyS3Location (\s a -> s { _apiGatewayRestApiBodyS3Location = a })
 
--- | The ID of the API Gateway RestApi resource that you want to clone.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-clonefrom
 agraCloneFrom :: Lens' ApiGatewayRestApi (Maybe (Val Text))
 agraCloneFrom = lens _apiGatewayRestApiCloneFrom (\s a -> s { _apiGatewayRestApiCloneFrom = a })
 
--- | A description of the purpose of this API Gateway RestApi resource.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-description
 agraDescription :: Lens' ApiGatewayRestApi (Maybe (Val Text))
 agraDescription = lens _apiGatewayRestApiDescription (\s a -> s { _apiGatewayRestApiDescription = a })
 
--- | If a warning occurs while API Gateway is creating the RestApi resource,
--- indicates whether to roll back the resource.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-failonwarnings
 agraFailOnWarnings :: Lens' ApiGatewayRestApi (Maybe (Val Bool'))
 agraFailOnWarnings = lens _apiGatewayRestApiFailOnWarnings (\s a -> s { _apiGatewayRestApiFailOnWarnings = a })
 
--- | A name for the API Gateway RestApi resource.
-agraName :: Lens' ApiGatewayRestApi (Val Text)
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-mode
+agraMode :: Lens' ApiGatewayRestApi (Maybe (Val Text))
+agraMode = lens _apiGatewayRestApiMode (\s a -> s { _apiGatewayRestApiMode = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-name
+agraName :: Lens' ApiGatewayRestApi (Maybe (Val Text))
 agraName = lens _apiGatewayRestApiName (\s a -> s { _apiGatewayRestApiName = a })
 
--- | Custom header parameters for the request.
-agraParameters :: Lens' ApiGatewayRestApi (Maybe [Val Text])
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-parameters
+agraParameters :: Lens' ApiGatewayRestApi (Maybe Object)
 agraParameters = lens _apiGatewayRestApiParameters (\s a -> s { _apiGatewayRestApiParameters = a })
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayStage.hs b/library-gen/Stratosphere/Resources/ApiGatewayStage.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayStage.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayStage.hs
@@ -1,8 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::ApiGateway::Stage resource creates a stage for an Amazon API
--- Gateway (API Gateway) deployment.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html
 
 module Stratosphere.Resources.ApiGatewayStage where
 
@@ -16,17 +15,17 @@
 import Stratosphere.ResourceProperties.ApiGatewayStageMethodSetting
 
 -- | Full data type definition for ApiGatewayStage. See 'apiGatewayStage' for
--- a more convenient constructor.
+-- | a more convenient constructor.
 data ApiGatewayStage =
   ApiGatewayStage
   { _apiGatewayStageCacheClusterEnabled :: Maybe (Val Bool')
   , _apiGatewayStageCacheClusterSize :: Maybe (Val Text)
   , _apiGatewayStageClientCertificateId :: Maybe (Val Text)
-  , _apiGatewayStageDeploymentId :: Val Text
+  , _apiGatewayStageDeploymentId :: Maybe (Val Text)
   , _apiGatewayStageDescription :: Maybe (Val Text)
   , _apiGatewayStageMethodSettings :: Maybe [ApiGatewayStageMethodSetting]
-  , _apiGatewayStageRestApiId :: Val Text
-  , _apiGatewayStageStageName :: Val Text
+  , _apiGatewayStageRestApiId :: Maybe (Val Text)
+  , _apiGatewayStageStageName :: Maybe (Val Text)
   , _apiGatewayStageVariables :: Maybe Object
   } deriving (Show, Generic)
 
@@ -37,62 +36,54 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
 
 -- | Constructor for 'ApiGatewayStage' containing required fields as
--- arguments.
+-- | arguments.
 apiGatewayStage
-  :: Val Text -- ^ 'agsDeploymentId'
-  -> Val Text -- ^ 'agsRestApiId'
-  -> Val Text -- ^ 'agsStageName'
-  -> ApiGatewayStage
-apiGatewayStage deploymentIdarg restApiIdarg stageNamearg =
+  :: ApiGatewayStage
+apiGatewayStage  =
   ApiGatewayStage
   { _apiGatewayStageCacheClusterEnabled = Nothing
   , _apiGatewayStageCacheClusterSize = Nothing
   , _apiGatewayStageClientCertificateId = Nothing
-  , _apiGatewayStageDeploymentId = deploymentIdarg
+  , _apiGatewayStageDeploymentId = Nothing
   , _apiGatewayStageDescription = Nothing
   , _apiGatewayStageMethodSettings = Nothing
-  , _apiGatewayStageRestApiId = restApiIdarg
-  , _apiGatewayStageStageName = stageNamearg
+  , _apiGatewayStageRestApiId = Nothing
+  , _apiGatewayStageStageName = Nothing
   , _apiGatewayStageVariables = Nothing
   }
 
--- | Indicates whether cache clustering is enabled for the stage.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-cacheclusterenabled
 agsCacheClusterEnabled :: Lens' ApiGatewayStage (Maybe (Val Bool'))
 agsCacheClusterEnabled = lens _apiGatewayStageCacheClusterEnabled (\s a -> s { _apiGatewayStageCacheClusterEnabled = a })
 
--- | The stage's cache cluster size.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-cacheclustersize
 agsCacheClusterSize :: Lens' ApiGatewayStage (Maybe (Val Text))
 agsCacheClusterSize = lens _apiGatewayStageCacheClusterSize (\s a -> s { _apiGatewayStageCacheClusterSize = a })
 
--- | The identifier of the client certificate that API Gateway uses to call
--- your integration endpoints in the stage.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-clientcertificateid
 agsClientCertificateId :: Lens' ApiGatewayStage (Maybe (Val Text))
 agsClientCertificateId = lens _apiGatewayStageClientCertificateId (\s a -> s { _apiGatewayStageClientCertificateId = a })
 
--- | The ID of the deployment that the stage points to.
-agsDeploymentId :: Lens' ApiGatewayStage (Val Text)
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-deploymentid
+agsDeploymentId :: Lens' ApiGatewayStage (Maybe (Val Text))
 agsDeploymentId = lens _apiGatewayStageDeploymentId (\s a -> s { _apiGatewayStageDeploymentId = a })
 
--- | A description of the stage's purpose.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-description
 agsDescription :: Lens' ApiGatewayStage (Maybe (Val Text))
 agsDescription = lens _apiGatewayStageDescription (\s a -> s { _apiGatewayStageDescription = a })
 
--- | Settings for all methods in the stage.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-methodsettings
 agsMethodSettings :: Lens' ApiGatewayStage (Maybe [ApiGatewayStageMethodSetting])
 agsMethodSettings = lens _apiGatewayStageMethodSettings (\s a -> s { _apiGatewayStageMethodSettings = a })
 
--- | The ID of the RestApi resource that you're deploying with this stage.
-agsRestApiId :: Lens' ApiGatewayStage (Val Text)
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-restapiid
+agsRestApiId :: Lens' ApiGatewayStage (Maybe (Val Text))
 agsRestApiId = lens _apiGatewayStageRestApiId (\s a -> s { _apiGatewayStageRestApiId = a })
 
--- | The name of the stage, which API Gateway uses as the first path segment
--- in the invoke Uniform Resource Identifier (URI).
-agsStageName :: Lens' ApiGatewayStage (Val Text)
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-stagename
+agsStageName :: Lens' ApiGatewayStage (Maybe (Val Text))
 agsStageName = lens _apiGatewayStageStageName (\s a -> s { _apiGatewayStageStageName = a })
 
--- | A map (string to string map) that defines the stage variables, where the
--- variable name is the key and the variable value is the value. Variable
--- names are limited to alphanumeric characters. Values must match the
--- following regular expression: [A-Za-z0-9-._~:/?#&amp;=,]+.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-variables
 agsVariables :: Lens' ApiGatewayStage (Maybe Object)
 agsVariables = lens _apiGatewayStageVariables (\s a -> s { _apiGatewayStageVariables = a })
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayUsagePlan.hs b/library-gen/Stratosphere/Resources/ApiGatewayUsagePlan.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayUsagePlan.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayUsagePlan.hs
@@ -1,11 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::ApiGateway::UsagePlan resource specifies a usage plan for
--- deployed Amazon API Gateway (API Gateway) APIs. A usage plan enforces
--- throttling and quota limits on individual client API keys. For more
--- information, see Creating and Using API Usage Plans in Amazon API Gateway
--- in the API Gateway Developer Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html
 
 module Stratosphere.Resources.ApiGatewayUsagePlan where
 
@@ -21,7 +17,7 @@
 import Stratosphere.ResourceProperties.ApiGatewayUsagePlanThrottleSettings
 
 -- | Full data type definition for ApiGatewayUsagePlan. See
--- 'apiGatewayUsagePlan' for a more convenient constructor.
+-- | 'apiGatewayUsagePlan' for a more convenient constructor.
 data ApiGatewayUsagePlan =
   ApiGatewayUsagePlan
   { _apiGatewayUsagePlanApiStages :: Maybe [ApiGatewayUsagePlanApiStage]
@@ -38,7 +34,7 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
 
 -- | Constructor for 'ApiGatewayUsagePlan' containing required fields as
--- arguments.
+-- | arguments.
 apiGatewayUsagePlan
   :: ApiGatewayUsagePlan
 apiGatewayUsagePlan  =
@@ -50,24 +46,22 @@
   , _apiGatewayUsagePlanUsagePlanName = Nothing
   }
 
--- | The APIs and API stages to associate with this usage plan.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html#cfn-apigateway-usageplan-apistages
 agupApiStages :: Lens' ApiGatewayUsagePlan (Maybe [ApiGatewayUsagePlanApiStage])
 agupApiStages = lens _apiGatewayUsagePlanApiStages (\s a -> s { _apiGatewayUsagePlanApiStages = a })
 
--- | The purpose of this usage plan.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html#cfn-apigateway-usageplan-description
 agupDescription :: Lens' ApiGatewayUsagePlan (Maybe (Val Text))
 agupDescription = lens _apiGatewayUsagePlanDescription (\s a -> s { _apiGatewayUsagePlanDescription = a })
 
--- | Configures the number of requests that users can make within a given
--- interval.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html#cfn-apigateway-usageplan-quota
 agupQuota :: Lens' ApiGatewayUsagePlan (Maybe ApiGatewayUsagePlanQuotaSettings)
 agupQuota = lens _apiGatewayUsagePlanQuota (\s a -> s { _apiGatewayUsagePlanQuota = a })
 
--- | Configures the overall request rate (average requests per second) and
--- burst capacity.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html#cfn-apigateway-usageplan-throttle
 agupThrottle :: Lens' ApiGatewayUsagePlan (Maybe ApiGatewayUsagePlanThrottleSettings)
 agupThrottle = lens _apiGatewayUsagePlanThrottle (\s a -> s { _apiGatewayUsagePlanThrottle = a })
 
--- | A name for this usage plan.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html#cfn-apigateway-usageplan-usageplanname
 agupUsagePlanName :: Lens' ApiGatewayUsagePlan (Maybe (Val Text))
 agupUsagePlanName = lens _apiGatewayUsagePlanUsagePlanName (\s a -> s { _apiGatewayUsagePlanUsagePlanName = a })
diff --git a/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalableTarget.hs b/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalableTarget.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalableTarget.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html
+
+module Stratosphere.Resources.ApplicationAutoScalingScalableTarget where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ApplicationAutoScalingScalableTarget. See
+-- | 'applicationAutoScalingScalableTarget' for a more convenient constructor.
+data ApplicationAutoScalingScalableTarget =
+  ApplicationAutoScalingScalableTarget
+  { _applicationAutoScalingScalableTargetMaxCapacity :: Val Integer'
+  , _applicationAutoScalingScalableTargetMinCapacity :: Val Integer'
+  , _applicationAutoScalingScalableTargetResourceId :: Val Text
+  , _applicationAutoScalingScalableTargetRoleARN :: Val Text
+  , _applicationAutoScalingScalableTargetScalableDimension :: Val Text
+  , _applicationAutoScalingScalableTargetServiceNamespace :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ApplicationAutoScalingScalableTarget where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+instance FromJSON ApplicationAutoScalingScalableTarget where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 37, omitNothingFields = True }
+
+-- | Constructor for 'ApplicationAutoScalingScalableTarget' containing
+-- | required fields as arguments.
+applicationAutoScalingScalableTarget
+  :: Val Integer' -- ^ 'aasstMaxCapacity'
+  -> Val Integer' -- ^ 'aasstMinCapacity'
+  -> Val Text -- ^ 'aasstResourceId'
+  -> Val Text -- ^ 'aasstRoleARN'
+  -> Val Text -- ^ 'aasstScalableDimension'
+  -> Val Text -- ^ 'aasstServiceNamespace'
+  -> ApplicationAutoScalingScalableTarget
+applicationAutoScalingScalableTarget maxCapacityarg minCapacityarg resourceIdarg roleARNarg scalableDimensionarg serviceNamespacearg =
+  ApplicationAutoScalingScalableTarget
+  { _applicationAutoScalingScalableTargetMaxCapacity = maxCapacityarg
+  , _applicationAutoScalingScalableTargetMinCapacity = minCapacityarg
+  , _applicationAutoScalingScalableTargetResourceId = resourceIdarg
+  , _applicationAutoScalingScalableTargetRoleARN = roleARNarg
+  , _applicationAutoScalingScalableTargetScalableDimension = scalableDimensionarg
+  , _applicationAutoScalingScalableTargetServiceNamespace = serviceNamespacearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html#cfn-applicationautoscaling-scalabletarget-maxcapacity
+aasstMaxCapacity :: Lens' ApplicationAutoScalingScalableTarget (Val Integer')
+aasstMaxCapacity = lens _applicationAutoScalingScalableTargetMaxCapacity (\s a -> s { _applicationAutoScalingScalableTargetMaxCapacity = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html#cfn-applicationautoscaling-scalabletarget-mincapacity
+aasstMinCapacity :: Lens' ApplicationAutoScalingScalableTarget (Val Integer')
+aasstMinCapacity = lens _applicationAutoScalingScalableTargetMinCapacity (\s a -> s { _applicationAutoScalingScalableTargetMinCapacity = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html#cfn-applicationautoscaling-scalabletarget-resourceid
+aasstResourceId :: Lens' ApplicationAutoScalingScalableTarget (Val Text)
+aasstResourceId = lens _applicationAutoScalingScalableTargetResourceId (\s a -> s { _applicationAutoScalingScalableTargetResourceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html#cfn-applicationautoscaling-scalabletarget-rolearn
+aasstRoleARN :: Lens' ApplicationAutoScalingScalableTarget (Val Text)
+aasstRoleARN = lens _applicationAutoScalingScalableTargetRoleARN (\s a -> s { _applicationAutoScalingScalableTargetRoleARN = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html#cfn-applicationautoscaling-scalabletarget-scalabledimension
+aasstScalableDimension :: Lens' ApplicationAutoScalingScalableTarget (Val Text)
+aasstScalableDimension = lens _applicationAutoScalingScalableTargetScalableDimension (\s a -> s { _applicationAutoScalingScalableTargetScalableDimension = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html#cfn-applicationautoscaling-scalabletarget-servicenamespace
+aasstServiceNamespace :: Lens' ApplicationAutoScalingScalableTarget (Val Text)
+aasstServiceNamespace = lens _applicationAutoScalingScalableTargetServiceNamespace (\s a -> s { _applicationAutoScalingScalableTargetServiceNamespace = a })
diff --git a/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalingPolicy.hs b/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalingPolicy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalingPolicy.hs
@@ -0,0 +1,79 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html
+
+module Stratosphere.Resources.ApplicationAutoScalingScalingPolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration
+
+-- | Full data type definition for ApplicationAutoScalingScalingPolicy. See
+-- | 'applicationAutoScalingScalingPolicy' for a more convenient constructor.
+data ApplicationAutoScalingScalingPolicy =
+  ApplicationAutoScalingScalingPolicy
+  { _applicationAutoScalingScalingPolicyPolicyName :: Val Text
+  , _applicationAutoScalingScalingPolicyPolicyType :: Val Text
+  , _applicationAutoScalingScalingPolicyResourceId :: Maybe (Val Text)
+  , _applicationAutoScalingScalingPolicyScalableDimension :: Maybe (Val Text)
+  , _applicationAutoScalingScalingPolicyScalingTargetId :: Maybe (Val Text)
+  , _applicationAutoScalingScalingPolicyServiceNamespace :: Maybe (Val Text)
+  , _applicationAutoScalingScalingPolicyStepScalingPolicyConfiguration :: Maybe ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration
+  } deriving (Show, Generic)
+
+instance ToJSON ApplicationAutoScalingScalingPolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+instance FromJSON ApplicationAutoScalingScalingPolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+-- | Constructor for 'ApplicationAutoScalingScalingPolicy' containing required
+-- | fields as arguments.
+applicationAutoScalingScalingPolicy
+  :: Val Text -- ^ 'aasspPolicyName'
+  -> Val Text -- ^ 'aasspPolicyType'
+  -> ApplicationAutoScalingScalingPolicy
+applicationAutoScalingScalingPolicy policyNamearg policyTypearg =
+  ApplicationAutoScalingScalingPolicy
+  { _applicationAutoScalingScalingPolicyPolicyName = policyNamearg
+  , _applicationAutoScalingScalingPolicyPolicyType = policyTypearg
+  , _applicationAutoScalingScalingPolicyResourceId = Nothing
+  , _applicationAutoScalingScalingPolicyScalableDimension = Nothing
+  , _applicationAutoScalingScalingPolicyScalingTargetId = Nothing
+  , _applicationAutoScalingScalingPolicyServiceNamespace = Nothing
+  , _applicationAutoScalingScalingPolicyStepScalingPolicyConfiguration = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-policyname
+aasspPolicyName :: Lens' ApplicationAutoScalingScalingPolicy (Val Text)
+aasspPolicyName = lens _applicationAutoScalingScalingPolicyPolicyName (\s a -> s { _applicationAutoScalingScalingPolicyPolicyName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-policytype
+aasspPolicyType :: Lens' ApplicationAutoScalingScalingPolicy (Val Text)
+aasspPolicyType = lens _applicationAutoScalingScalingPolicyPolicyType (\s a -> s { _applicationAutoScalingScalingPolicyPolicyType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-resourceid
+aasspResourceId :: Lens' ApplicationAutoScalingScalingPolicy (Maybe (Val Text))
+aasspResourceId = lens _applicationAutoScalingScalingPolicyResourceId (\s a -> s { _applicationAutoScalingScalingPolicyResourceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-scalabledimension
+aasspScalableDimension :: Lens' ApplicationAutoScalingScalingPolicy (Maybe (Val Text))
+aasspScalableDimension = lens _applicationAutoScalingScalingPolicyScalableDimension (\s a -> s { _applicationAutoScalingScalingPolicyScalableDimension = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-scalingtargetid
+aasspScalingTargetId :: Lens' ApplicationAutoScalingScalingPolicy (Maybe (Val Text))
+aasspScalingTargetId = lens _applicationAutoScalingScalingPolicyScalingTargetId (\s a -> s { _applicationAutoScalingScalingPolicyScalingTargetId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-servicenamespace
+aasspServiceNamespace :: Lens' ApplicationAutoScalingScalingPolicy (Maybe (Val Text))
+aasspServiceNamespace = lens _applicationAutoScalingScalingPolicyServiceNamespace (\s a -> s { _applicationAutoScalingScalingPolicyServiceNamespace = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration
+aasspStepScalingPolicyConfiguration :: Lens' ApplicationAutoScalingScalingPolicy (Maybe ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration)
+aasspStepScalingPolicyConfiguration = lens _applicationAutoScalingScalingPolicyStepScalingPolicyConfiguration (\s a -> s { _applicationAutoScalingScalingPolicyStepScalingPolicyConfiguration = a })
diff --git a/library-gen/Stratosphere/Resources/AutoScalingAutoScalingGroup.hs b/library-gen/Stratosphere/Resources/AutoScalingAutoScalingGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/AutoScalingAutoScalingGroup.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html
+
+module Stratosphere.Resources.AutoScalingAutoScalingGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupTagProperty
+import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupMetricsCollection
+import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupNotificationConfigurations
+
+-- | Full data type definition for AutoScalingAutoScalingGroup. See
+-- | 'autoScalingAutoScalingGroup' for a more convenient constructor.
+data AutoScalingAutoScalingGroup =
+  AutoScalingAutoScalingGroup
+  { _autoScalingAutoScalingGroupAsTags :: Maybe [AutoScalingAutoScalingGroupTagProperty]
+  , _autoScalingAutoScalingGroupAvailabilityZones :: Maybe [Val Text]
+  , _autoScalingAutoScalingGroupCooldown :: Maybe (Val Text)
+  , _autoScalingAutoScalingGroupDesiredCapacity :: Maybe (Val Text)
+  , _autoScalingAutoScalingGroupHealthCheckGracePeriod :: Maybe (Val Integer')
+  , _autoScalingAutoScalingGroupHealthCheckType :: Maybe (Val Text)
+  , _autoScalingAutoScalingGroupInstanceId :: Maybe (Val Text)
+  , _autoScalingAutoScalingGroupLaunchConfigurationName :: Maybe (Val Text)
+  , _autoScalingAutoScalingGroupLoadBalancerNames :: Maybe [Val Text]
+  , _autoScalingAutoScalingGroupMaxSize :: Val Text
+  , _autoScalingAutoScalingGroupMetricsCollection :: Maybe AutoScalingAutoScalingGroupMetricsCollection
+  , _autoScalingAutoScalingGroupMinSize :: Val Text
+  , _autoScalingAutoScalingGroupNotificationConfigurations :: Maybe AutoScalingAutoScalingGroupNotificationConfigurations
+  , _autoScalingAutoScalingGroupPlacementGroup :: Maybe (Val Text)
+  , _autoScalingAutoScalingGroupTargetGroupARNs :: Maybe [Val Text]
+  , _autoScalingAutoScalingGroupTerminationPolicies :: Maybe [Val Text]
+  , _autoScalingAutoScalingGroupVPCZoneIdentifier :: Maybe [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON AutoScalingAutoScalingGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON AutoScalingAutoScalingGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'AutoScalingAutoScalingGroup' containing required fields
+-- | as arguments.
+autoScalingAutoScalingGroup
+  :: Val Text -- ^ 'asasgMaxSize'
+  -> Val Text -- ^ 'asasgMinSize'
+  -> AutoScalingAutoScalingGroup
+autoScalingAutoScalingGroup maxSizearg minSizearg =
+  AutoScalingAutoScalingGroup
+  { _autoScalingAutoScalingGroupAsTags = Nothing
+  , _autoScalingAutoScalingGroupAvailabilityZones = Nothing
+  , _autoScalingAutoScalingGroupCooldown = Nothing
+  , _autoScalingAutoScalingGroupDesiredCapacity = Nothing
+  , _autoScalingAutoScalingGroupHealthCheckGracePeriod = Nothing
+  , _autoScalingAutoScalingGroupHealthCheckType = Nothing
+  , _autoScalingAutoScalingGroupInstanceId = Nothing
+  , _autoScalingAutoScalingGroupLaunchConfigurationName = Nothing
+  , _autoScalingAutoScalingGroupLoadBalancerNames = Nothing
+  , _autoScalingAutoScalingGroupMaxSize = maxSizearg
+  , _autoScalingAutoScalingGroupMetricsCollection = Nothing
+  , _autoScalingAutoScalingGroupMinSize = minSizearg
+  , _autoScalingAutoScalingGroupNotificationConfigurations = Nothing
+  , _autoScalingAutoScalingGroupPlacementGroup = Nothing
+  , _autoScalingAutoScalingGroupTargetGroupARNs = Nothing
+  , _autoScalingAutoScalingGroupTerminationPolicies = Nothing
+  , _autoScalingAutoScalingGroupVPCZoneIdentifier = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-tags
+asasgAsTags :: Lens' AutoScalingAutoScalingGroup (Maybe [AutoScalingAutoScalingGroupTagProperty])
+asasgAsTags = lens _autoScalingAutoScalingGroupAsTags (\s a -> s { _autoScalingAutoScalingGroupAsTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-availabilityzones
+asasgAvailabilityZones :: Lens' AutoScalingAutoScalingGroup (Maybe [Val Text])
+asasgAvailabilityZones = lens _autoScalingAutoScalingGroupAvailabilityZones (\s a -> s { _autoScalingAutoScalingGroupAvailabilityZones = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-cooldown
+asasgCooldown :: Lens' AutoScalingAutoScalingGroup (Maybe (Val Text))
+asasgCooldown = lens _autoScalingAutoScalingGroupCooldown (\s a -> s { _autoScalingAutoScalingGroupCooldown = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-desiredcapacity
+asasgDesiredCapacity :: Lens' AutoScalingAutoScalingGroup (Maybe (Val Text))
+asasgDesiredCapacity = lens _autoScalingAutoScalingGroupDesiredCapacity (\s a -> s { _autoScalingAutoScalingGroupDesiredCapacity = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-healthcheckgraceperiod
+asasgHealthCheckGracePeriod :: Lens' AutoScalingAutoScalingGroup (Maybe (Val Integer'))
+asasgHealthCheckGracePeriod = lens _autoScalingAutoScalingGroupHealthCheckGracePeriod (\s a -> s { _autoScalingAutoScalingGroupHealthCheckGracePeriod = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-healthchecktype
+asasgHealthCheckType :: Lens' AutoScalingAutoScalingGroup (Maybe (Val Text))
+asasgHealthCheckType = lens _autoScalingAutoScalingGroupHealthCheckType (\s a -> s { _autoScalingAutoScalingGroupHealthCheckType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-instanceid
+asasgInstanceId :: Lens' AutoScalingAutoScalingGroup (Maybe (Val Text))
+asasgInstanceId = lens _autoScalingAutoScalingGroupInstanceId (\s a -> s { _autoScalingAutoScalingGroupInstanceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-launchconfigurationname
+asasgLaunchConfigurationName :: Lens' AutoScalingAutoScalingGroup (Maybe (Val Text))
+asasgLaunchConfigurationName = lens _autoScalingAutoScalingGroupLaunchConfigurationName (\s a -> s { _autoScalingAutoScalingGroupLaunchConfigurationName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-loadbalancernames
+asasgLoadBalancerNames :: Lens' AutoScalingAutoScalingGroup (Maybe [Val Text])
+asasgLoadBalancerNames = lens _autoScalingAutoScalingGroupLoadBalancerNames (\s a -> s { _autoScalingAutoScalingGroupLoadBalancerNames = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-maxsize
+asasgMaxSize :: Lens' AutoScalingAutoScalingGroup (Val Text)
+asasgMaxSize = lens _autoScalingAutoScalingGroupMaxSize (\s a -> s { _autoScalingAutoScalingGroupMaxSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-metricscollection
+asasgMetricsCollection :: Lens' AutoScalingAutoScalingGroup (Maybe AutoScalingAutoScalingGroupMetricsCollection)
+asasgMetricsCollection = lens _autoScalingAutoScalingGroupMetricsCollection (\s a -> s { _autoScalingAutoScalingGroupMetricsCollection = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-minsize
+asasgMinSize :: Lens' AutoScalingAutoScalingGroup (Val Text)
+asasgMinSize = lens _autoScalingAutoScalingGroupMinSize (\s a -> s { _autoScalingAutoScalingGroupMinSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-notificationconfigurations
+asasgNotificationConfigurations :: Lens' AutoScalingAutoScalingGroup (Maybe AutoScalingAutoScalingGroupNotificationConfigurations)
+asasgNotificationConfigurations = lens _autoScalingAutoScalingGroupNotificationConfigurations (\s a -> s { _autoScalingAutoScalingGroupNotificationConfigurations = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-placementgroup
+asasgPlacementGroup :: Lens' AutoScalingAutoScalingGroup (Maybe (Val Text))
+asasgPlacementGroup = lens _autoScalingAutoScalingGroupPlacementGroup (\s a -> s { _autoScalingAutoScalingGroupPlacementGroup = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-targetgrouparns
+asasgTargetGroupARNs :: Lens' AutoScalingAutoScalingGroup (Maybe [Val Text])
+asasgTargetGroupARNs = lens _autoScalingAutoScalingGroupTargetGroupARNs (\s a -> s { _autoScalingAutoScalingGroupTargetGroupARNs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-termpolicy
+asasgTerminationPolicies :: Lens' AutoScalingAutoScalingGroup (Maybe [Val Text])
+asasgTerminationPolicies = lens _autoScalingAutoScalingGroupTerminationPolicies (\s a -> s { _autoScalingAutoScalingGroupTerminationPolicies = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-vpczoneidentifier
+asasgVPCZoneIdentifier :: Lens' AutoScalingAutoScalingGroup (Maybe [Val Text])
+asasgVPCZoneIdentifier = lens _autoScalingAutoScalingGroupVPCZoneIdentifier (\s a -> s { _autoScalingAutoScalingGroupVPCZoneIdentifier = a })
diff --git a/library-gen/Stratosphere/Resources/AutoScalingGroup.hs b/library-gen/Stratosphere/Resources/AutoScalingGroup.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/AutoScalingGroup.hs
+++ /dev/null
@@ -1,175 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::AutoScaling::AutoScalingGroup type creates an Auto Scaling
--- group. You can add an UpdatePolicy attribute to your Auto Scaling group to
--- control how rolling updates are performed when a change has been made to
--- the Auto Scaling group's launch configuration or subnet group membership.
-
-module Stratosphere.Resources.AutoScalingGroup where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.AutoScalingMetricsCollection
-import Stratosphere.ResourceProperties.AutoScalingNotificationConfigurations
-import Stratosphere.ResourceProperties.AutoScalingTags
-
--- | Full data type definition for AutoScalingGroup. See 'autoScalingGroup'
--- for a more convenient constructor.
-data AutoScalingGroup =
-  AutoScalingGroup
-  { _autoScalingGroupAvailabilityZones :: Maybe [Val Text]
-  , _autoScalingGroupCooldown :: Maybe (Val Text)
-  , _autoScalingGroupDesiredCapacity :: Maybe (Val Text)
-  , _autoScalingGroupHealthCheckGracePeriod :: Maybe (Val Integer')
-  , _autoScalingGroupHealthCheckType :: Maybe (Val Text)
-  , _autoScalingGroupInstanceId :: Maybe (Val Text)
-  , _autoScalingGroupLaunchConfigurationName :: Maybe (Val Text)
-  , _autoScalingGroupLoadBalancerNames :: Maybe [Val Text]
-  , _autoScalingGroupMaxSize :: Val Text
-  , _autoScalingGroupMetricsCollection :: Maybe [AutoScalingMetricsCollection]
-  , _autoScalingGroupMinSize :: Val Text
-  , _autoScalingGroupNotificationConfigurations :: Maybe [AutoScalingNotificationConfigurations]
-  , _autoScalingGroupPlacementGroup :: Maybe (Val Text)
-  , _autoScalingGroupTags :: Maybe [AutoScalingTags]
-  , _autoScalingGroupTerminationPolicies :: Maybe [Val Text]
-  , _autoScalingGroupVPCZoneIdentifier :: Maybe [Val Text]
-  } deriving (Show, Generic)
-
-instance ToJSON AutoScalingGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
-
-instance FromJSON AutoScalingGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
-
--- | Constructor for 'AutoScalingGroup' containing required fields as
--- arguments.
-autoScalingGroup
-  :: Val Text -- ^ 'asgMaxSize'
-  -> Val Text -- ^ 'asgMinSize'
-  -> AutoScalingGroup
-autoScalingGroup maxSizearg minSizearg =
-  AutoScalingGroup
-  { _autoScalingGroupAvailabilityZones = Nothing
-  , _autoScalingGroupCooldown = Nothing
-  , _autoScalingGroupDesiredCapacity = Nothing
-  , _autoScalingGroupHealthCheckGracePeriod = Nothing
-  , _autoScalingGroupHealthCheckType = Nothing
-  , _autoScalingGroupInstanceId = Nothing
-  , _autoScalingGroupLaunchConfigurationName = Nothing
-  , _autoScalingGroupLoadBalancerNames = Nothing
-  , _autoScalingGroupMaxSize = maxSizearg
-  , _autoScalingGroupMetricsCollection = Nothing
-  , _autoScalingGroupMinSize = minSizearg
-  , _autoScalingGroupNotificationConfigurations = Nothing
-  , _autoScalingGroupPlacementGroup = Nothing
-  , _autoScalingGroupTags = Nothing
-  , _autoScalingGroupTerminationPolicies = Nothing
-  , _autoScalingGroupVPCZoneIdentifier = Nothing
-  }
-
--- | Contains a list of availability zones for the group.
-asgAvailabilityZones :: Lens' AutoScalingGroup (Maybe [Val Text])
-asgAvailabilityZones = lens _autoScalingGroupAvailabilityZones (\s a -> s { _autoScalingGroupAvailabilityZones = a })
-
--- | The number of seconds after a scaling activity is completed before any
--- further scaling activities can start.
-asgCooldown :: Lens' AutoScalingGroup (Maybe (Val Text))
-asgCooldown = lens _autoScalingGroupCooldown (\s a -> s { _autoScalingGroupCooldown = a })
-
--- | Specifies the desired capacity for the Auto Scaling group. If SpotPrice
--- is not set in the AWS::AutoScaling::LaunchConfiguration for this Auto
--- Scaling group, then Auto Scaling will begin to bring instances online based
--- on DesiredCapacity. CloudFormation will not mark the Auto Scaling group as
--- successful (by setting its status to CREATE_COMPLETE) until the desired
--- capacity is reached. If SpotPrice is set, then DesiredCapacity will not be
--- used as a criteria for success, since instances will only be started when
--- the spot price has been matched. After the spot price has been matched,
--- however, Auto Scaling uses DesiredCapacity as the target capacity for the
--- group.
-asgDesiredCapacity :: Lens' AutoScalingGroup (Maybe (Val Text))
-asgDesiredCapacity = lens _autoScalingGroupDesiredCapacity (\s a -> s { _autoScalingGroupDesiredCapacity = a })
-
--- | The length of time in seconds after a new EC2 instance comes into service
--- that Auto Scaling starts checking its health.
-asgHealthCheckGracePeriod :: Lens' AutoScalingGroup (Maybe (Val Integer'))
-asgHealthCheckGracePeriod = lens _autoScalingGroupHealthCheckGracePeriod (\s a -> s { _autoScalingGroupHealthCheckGracePeriod = a })
-
--- | The service you want the health status from, Amazon EC2 or Elastic Load
--- Balancer. Valid values are EC2 or ELB.
-asgHealthCheckType :: Lens' AutoScalingGroup (Maybe (Val Text))
-asgHealthCheckType = lens _autoScalingGroupHealthCheckType (\s a -> s { _autoScalingGroupHealthCheckType = a })
-
--- | The ID of the Amazon EC2 instance you want to use to create the Auto
--- Scaling group. Use this property if you want to create an Auto Scaling
--- group that uses an existing Amazon EC2 instance instead of a launch
--- configuration. When you use an Amazon EC2 instance to create an Auto
--- Scaling group, a new launch configuration is first created and then
--- associated with the Auto Scaling group. The new launch configuration
--- derives all its properties from the instance, with the exception of
--- BlockDeviceMapping and AssociatePublicIpAddress.
-asgInstanceId :: Lens' AutoScalingGroup (Maybe (Val Text))
-asgInstanceId = lens _autoScalingGroupInstanceId (\s a -> s { _autoScalingGroupInstanceId = a })
-
--- | Specifies the name of the associated
--- AWS::AutoScaling::LaunchConfiguration. Note If this resource has a public
--- IP address and is also in a VPC that is defined in the same template, you
--- must use the DependsOn attribute to declare a dependency on the VPC-gateway
--- attachment. For more information, see DependsOn Attribute.
-asgLaunchConfigurationName :: Lens' AutoScalingGroup (Maybe (Val Text))
-asgLaunchConfigurationName = lens _autoScalingGroupLaunchConfigurationName (\s a -> s { _autoScalingGroupLaunchConfigurationName = a })
-
--- | A list of load balancers associated with this Auto Scaling group.
-asgLoadBalancerNames :: Lens' AutoScalingGroup (Maybe [Val Text])
-asgLoadBalancerNames = lens _autoScalingGroupLoadBalancerNames (\s a -> s { _autoScalingGroupLoadBalancerNames = a })
-
--- | The maximum size of the Auto Scaling group.
-asgMaxSize :: Lens' AutoScalingGroup (Val Text)
-asgMaxSize = lens _autoScalingGroupMaxSize (\s a -> s { _autoScalingGroupMaxSize = a })
-
--- | Enables the monitoring of group metrics of an Auto Scaling group.
-asgMetricsCollection :: Lens' AutoScalingGroup (Maybe [AutoScalingMetricsCollection])
-asgMetricsCollection = lens _autoScalingGroupMetricsCollection (\s a -> s { _autoScalingGroupMetricsCollection = a })
-
--- | The minimum size of the Auto Scaling group.
-asgMinSize :: Lens' AutoScalingGroup (Val Text)
-asgMinSize = lens _autoScalingGroupMinSize (\s a -> s { _autoScalingGroupMinSize = a })
-
--- | An embedded property that configures an Auto Scaling group to send
--- notifications when specified events take place.
-asgNotificationConfigurations :: Lens' AutoScalingGroup (Maybe [AutoScalingNotificationConfigurations])
-asgNotificationConfigurations = lens _autoScalingGroupNotificationConfigurations (\s a -> s { _autoScalingGroupNotificationConfigurations = a })
-
--- | The name of an existing cluster placement group into which you want to
--- launch your instances. A placement group is a logical grouping of instances
--- within a single Availability Zone. You cannot specify multiple Availability
--- Zones and a placement group.
-asgPlacementGroup :: Lens' AutoScalingGroup (Maybe (Val Text))
-asgPlacementGroup = lens _autoScalingGroupPlacementGroup (\s a -> s { _autoScalingGroupPlacementGroup = a })
-
--- | The tags you want to attach to this resource. For more information about
--- tags, go to Tagging Auto Scaling Groups and Amazon EC2 Instances in the
--- Auto Scaling User Guide.
-asgTags :: Lens' AutoScalingGroup (Maybe [AutoScalingTags])
-asgTags = lens _autoScalingGroupTags (\s a -> s { _autoScalingGroupTags = a })
-
--- | A policy or a list of policies that are used to select the instances to
--- terminate. The policies are executed in the order that you list them. For
--- more information on configuring a termination policy for your Auto Scaling
--- group, see Instance Termination Policy for Your Auto Scaling Group in the
--- Auto Scaling User Guide.
-asgTerminationPolicies :: Lens' AutoScalingGroup (Maybe [Val Text])
-asgTerminationPolicies = lens _autoScalingGroupTerminationPolicies (\s a -> s { _autoScalingGroupTerminationPolicies = a })
-
--- | A list of subnet identifiers of Amazon Virtual Private Cloud (Amazon
--- VPCs). If you specify the AvailabilityZones property, the subnets that you
--- specify for this property must reside in those Availability Zones. For more
--- information, go to Using EC2 Dedicated Instances Within Your VPC in the
--- Auto Scaling User Guide.
-asgVPCZoneIdentifier :: Lens' AutoScalingGroup (Maybe [Val Text])
-asgVPCZoneIdentifier = lens _autoScalingGroupVPCZoneIdentifier (\s a -> s { _autoScalingGroupVPCZoneIdentifier = a })
diff --git a/library-gen/Stratosphere/Resources/AutoScalingLaunchConfiguration.hs b/library-gen/Stratosphere/Resources/AutoScalingLaunchConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/AutoScalingLaunchConfiguration.hs
@@ -0,0 +1,139 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html
+
+module Stratosphere.Resources.AutoScalingLaunchConfiguration where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.AutoScalingLaunchConfigurationBlockDeviceMapping
+
+-- | Full data type definition for AutoScalingLaunchConfiguration. See
+-- | 'autoScalingLaunchConfiguration' for a more convenient constructor.
+data AutoScalingLaunchConfiguration =
+  AutoScalingLaunchConfiguration
+  { _autoScalingLaunchConfigurationAssociatePublicIpAddress :: Maybe (Val Bool')
+  , _autoScalingLaunchConfigurationBlockDeviceMappings :: Maybe [AutoScalingLaunchConfigurationBlockDeviceMapping]
+  , _autoScalingLaunchConfigurationClassicLinkVPCId :: Maybe (Val Text)
+  , _autoScalingLaunchConfigurationClassicLinkVPCSecurityGroups :: Maybe [Val Text]
+  , _autoScalingLaunchConfigurationEbsOptimized :: Maybe (Val Bool')
+  , _autoScalingLaunchConfigurationIamInstanceProfile :: Maybe (Val Text)
+  , _autoScalingLaunchConfigurationImageId :: Val Text
+  , _autoScalingLaunchConfigurationInstanceId :: Maybe (Val Text)
+  , _autoScalingLaunchConfigurationInstanceMonitoring :: Maybe (Val Bool')
+  , _autoScalingLaunchConfigurationInstanceType :: Val Text
+  , _autoScalingLaunchConfigurationKernelId :: Maybe (Val Text)
+  , _autoScalingLaunchConfigurationKeyName :: Maybe (Val Text)
+  , _autoScalingLaunchConfigurationPlacementTenancy :: Maybe (Val Text)
+  , _autoScalingLaunchConfigurationRamDiskId :: Maybe (Val Text)
+  , _autoScalingLaunchConfigurationSecurityGroups :: Maybe [Val Text]
+  , _autoScalingLaunchConfigurationSpotPrice :: Maybe (Val Text)
+  , _autoScalingLaunchConfigurationUserData :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON AutoScalingLaunchConfiguration where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+instance FromJSON AutoScalingLaunchConfiguration where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+-- | Constructor for 'AutoScalingLaunchConfiguration' containing required
+-- | fields as arguments.
+autoScalingLaunchConfiguration
+  :: Val Text -- ^ 'aslcImageId'
+  -> Val Text -- ^ 'aslcInstanceType'
+  -> AutoScalingLaunchConfiguration
+autoScalingLaunchConfiguration imageIdarg instanceTypearg =
+  AutoScalingLaunchConfiguration
+  { _autoScalingLaunchConfigurationAssociatePublicIpAddress = Nothing
+  , _autoScalingLaunchConfigurationBlockDeviceMappings = Nothing
+  , _autoScalingLaunchConfigurationClassicLinkVPCId = Nothing
+  , _autoScalingLaunchConfigurationClassicLinkVPCSecurityGroups = Nothing
+  , _autoScalingLaunchConfigurationEbsOptimized = Nothing
+  , _autoScalingLaunchConfigurationIamInstanceProfile = Nothing
+  , _autoScalingLaunchConfigurationImageId = imageIdarg
+  , _autoScalingLaunchConfigurationInstanceId = Nothing
+  , _autoScalingLaunchConfigurationInstanceMonitoring = Nothing
+  , _autoScalingLaunchConfigurationInstanceType = instanceTypearg
+  , _autoScalingLaunchConfigurationKernelId = Nothing
+  , _autoScalingLaunchConfigurationKeyName = Nothing
+  , _autoScalingLaunchConfigurationPlacementTenancy = Nothing
+  , _autoScalingLaunchConfigurationRamDiskId = Nothing
+  , _autoScalingLaunchConfigurationSecurityGroups = Nothing
+  , _autoScalingLaunchConfigurationSpotPrice = Nothing
+  , _autoScalingLaunchConfigurationUserData = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cf-as-launchconfig-associatepubip
+aslcAssociatePublicIpAddress :: Lens' AutoScalingLaunchConfiguration (Maybe (Val Bool'))
+aslcAssociatePublicIpAddress = lens _autoScalingLaunchConfigurationAssociatePublicIpAddress (\s a -> s { _autoScalingLaunchConfigurationAssociatePublicIpAddress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-blockdevicemappings
+aslcBlockDeviceMappings :: Lens' AutoScalingLaunchConfiguration (Maybe [AutoScalingLaunchConfigurationBlockDeviceMapping])
+aslcBlockDeviceMappings = lens _autoScalingLaunchConfigurationBlockDeviceMappings (\s a -> s { _autoScalingLaunchConfigurationBlockDeviceMappings = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-classiclinkvpcid
+aslcClassicLinkVPCId :: Lens' AutoScalingLaunchConfiguration (Maybe (Val Text))
+aslcClassicLinkVPCId = lens _autoScalingLaunchConfigurationClassicLinkVPCId (\s a -> s { _autoScalingLaunchConfigurationClassicLinkVPCId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-classiclinkvpcsecuritygroups
+aslcClassicLinkVPCSecurityGroups :: Lens' AutoScalingLaunchConfiguration (Maybe [Val Text])
+aslcClassicLinkVPCSecurityGroups = lens _autoScalingLaunchConfigurationClassicLinkVPCSecurityGroups (\s a -> s { _autoScalingLaunchConfigurationClassicLinkVPCSecurityGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-ebsoptimized
+aslcEbsOptimized :: Lens' AutoScalingLaunchConfiguration (Maybe (Val Bool'))
+aslcEbsOptimized = lens _autoScalingLaunchConfigurationEbsOptimized (\s a -> s { _autoScalingLaunchConfigurationEbsOptimized = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-iaminstanceprofile
+aslcIamInstanceProfile :: Lens' AutoScalingLaunchConfiguration (Maybe (Val Text))
+aslcIamInstanceProfile = lens _autoScalingLaunchConfigurationIamInstanceProfile (\s a -> s { _autoScalingLaunchConfigurationIamInstanceProfile = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-imageid
+aslcImageId :: Lens' AutoScalingLaunchConfiguration (Val Text)
+aslcImageId = lens _autoScalingLaunchConfigurationImageId (\s a -> s { _autoScalingLaunchConfigurationImageId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-instanceid
+aslcInstanceId :: Lens' AutoScalingLaunchConfiguration (Maybe (Val Text))
+aslcInstanceId = lens _autoScalingLaunchConfigurationInstanceId (\s a -> s { _autoScalingLaunchConfigurationInstanceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-instancemonitoring
+aslcInstanceMonitoring :: Lens' AutoScalingLaunchConfiguration (Maybe (Val Bool'))
+aslcInstanceMonitoring = lens _autoScalingLaunchConfigurationInstanceMonitoring (\s a -> s { _autoScalingLaunchConfigurationInstanceMonitoring = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-instancetype
+aslcInstanceType :: Lens' AutoScalingLaunchConfiguration (Val Text)
+aslcInstanceType = lens _autoScalingLaunchConfigurationInstanceType (\s a -> s { _autoScalingLaunchConfigurationInstanceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-kernelid
+aslcKernelId :: Lens' AutoScalingLaunchConfiguration (Maybe (Val Text))
+aslcKernelId = lens _autoScalingLaunchConfigurationKernelId (\s a -> s { _autoScalingLaunchConfigurationKernelId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-keyname
+aslcKeyName :: Lens' AutoScalingLaunchConfiguration (Maybe (Val Text))
+aslcKeyName = lens _autoScalingLaunchConfigurationKeyName (\s a -> s { _autoScalingLaunchConfigurationKeyName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-placementtenancy
+aslcPlacementTenancy :: Lens' AutoScalingLaunchConfiguration (Maybe (Val Text))
+aslcPlacementTenancy = lens _autoScalingLaunchConfigurationPlacementTenancy (\s a -> s { _autoScalingLaunchConfigurationPlacementTenancy = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-ramdiskid
+aslcRamDiskId :: Lens' AutoScalingLaunchConfiguration (Maybe (Val Text))
+aslcRamDiskId = lens _autoScalingLaunchConfigurationRamDiskId (\s a -> s { _autoScalingLaunchConfigurationRamDiskId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-securitygroups
+aslcSecurityGroups :: Lens' AutoScalingLaunchConfiguration (Maybe [Val Text])
+aslcSecurityGroups = lens _autoScalingLaunchConfigurationSecurityGroups (\s a -> s { _autoScalingLaunchConfigurationSecurityGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-spotprice
+aslcSpotPrice :: Lens' AutoScalingLaunchConfiguration (Maybe (Val Text))
+aslcSpotPrice = lens _autoScalingLaunchConfigurationSpotPrice (\s a -> s { _autoScalingLaunchConfigurationSpotPrice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-userdata
+aslcUserData :: Lens' AutoScalingLaunchConfiguration (Maybe (Val Text))
+aslcUserData = lens _autoScalingLaunchConfigurationUserData (\s a -> s { _autoScalingLaunchConfigurationUserData = a })
diff --git a/library-gen/Stratosphere/Resources/AutoScalingLifecycleHook.hs b/library-gen/Stratosphere/Resources/AutoScalingLifecycleHook.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/AutoScalingLifecycleHook.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html
+
+module Stratosphere.Resources.AutoScalingLifecycleHook where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for AutoScalingLifecycleHook. See
+-- | 'autoScalingLifecycleHook' for a more convenient constructor.
+data AutoScalingLifecycleHook =
+  AutoScalingLifecycleHook
+  { _autoScalingLifecycleHookAutoScalingGroupName :: Val Text
+  , _autoScalingLifecycleHookDefaultResult :: Maybe (Val Text)
+  , _autoScalingLifecycleHookHeartbeatTimeout :: Maybe (Val Integer')
+  , _autoScalingLifecycleHookLifecycleTransition :: Val Text
+  , _autoScalingLifecycleHookNotificationMetadata :: Maybe (Val Text)
+  , _autoScalingLifecycleHookNotificationTargetARN :: Val Text
+  , _autoScalingLifecycleHookRoleARN :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON AutoScalingLifecycleHook where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+instance FromJSON AutoScalingLifecycleHook where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+-- | Constructor for 'AutoScalingLifecycleHook' containing required fields as
+-- | arguments.
+autoScalingLifecycleHook
+  :: Val Text -- ^ 'aslhAutoScalingGroupName'
+  -> Val Text -- ^ 'aslhLifecycleTransition'
+  -> Val Text -- ^ 'aslhNotificationTargetARN'
+  -> Val Text -- ^ 'aslhRoleARN'
+  -> AutoScalingLifecycleHook
+autoScalingLifecycleHook autoScalingGroupNamearg lifecycleTransitionarg notificationTargetARNarg roleARNarg =
+  AutoScalingLifecycleHook
+  { _autoScalingLifecycleHookAutoScalingGroupName = autoScalingGroupNamearg
+  , _autoScalingLifecycleHookDefaultResult = Nothing
+  , _autoScalingLifecycleHookHeartbeatTimeout = Nothing
+  , _autoScalingLifecycleHookLifecycleTransition = lifecycleTransitionarg
+  , _autoScalingLifecycleHookNotificationMetadata = Nothing
+  , _autoScalingLifecycleHookNotificationTargetARN = notificationTargetARNarg
+  , _autoScalingLifecycleHookRoleARN = roleARNarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html#cfn-as-lifecyclehook-autoscalinggroupname
+aslhAutoScalingGroupName :: Lens' AutoScalingLifecycleHook (Val Text)
+aslhAutoScalingGroupName = lens _autoScalingLifecycleHookAutoScalingGroupName (\s a -> s { _autoScalingLifecycleHookAutoScalingGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html#cfn-as-lifecyclehook-defaultresult
+aslhDefaultResult :: Lens' AutoScalingLifecycleHook (Maybe (Val Text))
+aslhDefaultResult = lens _autoScalingLifecycleHookDefaultResult (\s a -> s { _autoScalingLifecycleHookDefaultResult = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html#cfn-as-lifecyclehook-heartbeattimeout
+aslhHeartbeatTimeout :: Lens' AutoScalingLifecycleHook (Maybe (Val Integer'))
+aslhHeartbeatTimeout = lens _autoScalingLifecycleHookHeartbeatTimeout (\s a -> s { _autoScalingLifecycleHookHeartbeatTimeout = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html#cfn-as-lifecyclehook-lifecycletransition
+aslhLifecycleTransition :: Lens' AutoScalingLifecycleHook (Val Text)
+aslhLifecycleTransition = lens _autoScalingLifecycleHookLifecycleTransition (\s a -> s { _autoScalingLifecycleHookLifecycleTransition = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html#cfn-as-lifecyclehook-notificationmetadata
+aslhNotificationMetadata :: Lens' AutoScalingLifecycleHook (Maybe (Val Text))
+aslhNotificationMetadata = lens _autoScalingLifecycleHookNotificationMetadata (\s a -> s { _autoScalingLifecycleHookNotificationMetadata = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html#cfn-as-lifecyclehook-notificationtargetarn
+aslhNotificationTargetARN :: Lens' AutoScalingLifecycleHook (Val Text)
+aslhNotificationTargetARN = lens _autoScalingLifecycleHookNotificationTargetARN (\s a -> s { _autoScalingLifecycleHookNotificationTargetARN = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html#cfn-as-lifecyclehook-rolearn
+aslhRoleARN :: Lens' AutoScalingLifecycleHook (Val Text)
+aslhRoleARN = lens _autoScalingLifecycleHookRoleARN (\s a -> s { _autoScalingLifecycleHookRoleARN = a })
diff --git a/library-gen/Stratosphere/Resources/AutoScalingScalingPolicy.hs b/library-gen/Stratosphere/Resources/AutoScalingScalingPolicy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/AutoScalingScalingPolicy.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html
+
+module Stratosphere.Resources.AutoScalingScalingPolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.AutoScalingScalingPolicyStepAdjustment
+
+-- | Full data type definition for AutoScalingScalingPolicy. See
+-- | 'autoScalingScalingPolicy' for a more convenient constructor.
+data AutoScalingScalingPolicy =
+  AutoScalingScalingPolicy
+  { _autoScalingScalingPolicyAdjustmentType :: Val Text
+  , _autoScalingScalingPolicyAutoScalingGroupName :: Val Text
+  , _autoScalingScalingPolicyCooldown :: Maybe (Val Text)
+  , _autoScalingScalingPolicyEstimatedInstanceWarmup :: Maybe (Val Integer')
+  , _autoScalingScalingPolicyMetricAggregationType :: Maybe (Val Text)
+  , _autoScalingScalingPolicyMinAdjustmentMagnitude :: Maybe (Val Integer')
+  , _autoScalingScalingPolicyPolicyType :: Maybe (Val Text)
+  , _autoScalingScalingPolicyScalingAdjustment :: Maybe (Val Integer')
+  , _autoScalingScalingPolicyStepAdjustments :: Maybe [AutoScalingScalingPolicyStepAdjustment]
+  } deriving (Show, Generic)
+
+instance ToJSON AutoScalingScalingPolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+instance FromJSON AutoScalingScalingPolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+-- | Constructor for 'AutoScalingScalingPolicy' containing required fields as
+-- | arguments.
+autoScalingScalingPolicy
+  :: Val Text -- ^ 'asspAdjustmentType'
+  -> Val Text -- ^ 'asspAutoScalingGroupName'
+  -> AutoScalingScalingPolicy
+autoScalingScalingPolicy adjustmentTypearg autoScalingGroupNamearg =
+  AutoScalingScalingPolicy
+  { _autoScalingScalingPolicyAdjustmentType = adjustmentTypearg
+  , _autoScalingScalingPolicyAutoScalingGroupName = autoScalingGroupNamearg
+  , _autoScalingScalingPolicyCooldown = Nothing
+  , _autoScalingScalingPolicyEstimatedInstanceWarmup = Nothing
+  , _autoScalingScalingPolicyMetricAggregationType = Nothing
+  , _autoScalingScalingPolicyMinAdjustmentMagnitude = Nothing
+  , _autoScalingScalingPolicyPolicyType = Nothing
+  , _autoScalingScalingPolicyScalingAdjustment = Nothing
+  , _autoScalingScalingPolicyStepAdjustments = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-adjustmenttype
+asspAdjustmentType :: Lens' AutoScalingScalingPolicy (Val Text)
+asspAdjustmentType = lens _autoScalingScalingPolicyAdjustmentType (\s a -> s { _autoScalingScalingPolicyAdjustmentType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-autoscalinggroupname
+asspAutoScalingGroupName :: Lens' AutoScalingScalingPolicy (Val Text)
+asspAutoScalingGroupName = lens _autoScalingScalingPolicyAutoScalingGroupName (\s a -> s { _autoScalingScalingPolicyAutoScalingGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-cooldown
+asspCooldown :: Lens' AutoScalingScalingPolicy (Maybe (Val Text))
+asspCooldown = lens _autoScalingScalingPolicyCooldown (\s a -> s { _autoScalingScalingPolicyCooldown = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-estimatedinstancewarmup
+asspEstimatedInstanceWarmup :: Lens' AutoScalingScalingPolicy (Maybe (Val Integer'))
+asspEstimatedInstanceWarmup = lens _autoScalingScalingPolicyEstimatedInstanceWarmup (\s a -> s { _autoScalingScalingPolicyEstimatedInstanceWarmup = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-metricaggregationtype
+asspMetricAggregationType :: Lens' AutoScalingScalingPolicy (Maybe (Val Text))
+asspMetricAggregationType = lens _autoScalingScalingPolicyMetricAggregationType (\s a -> s { _autoScalingScalingPolicyMetricAggregationType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-minadjustmentmagnitude
+asspMinAdjustmentMagnitude :: Lens' AutoScalingScalingPolicy (Maybe (Val Integer'))
+asspMinAdjustmentMagnitude = lens _autoScalingScalingPolicyMinAdjustmentMagnitude (\s a -> s { _autoScalingScalingPolicyMinAdjustmentMagnitude = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-policytype
+asspPolicyType :: Lens' AutoScalingScalingPolicy (Maybe (Val Text))
+asspPolicyType = lens _autoScalingScalingPolicyPolicyType (\s a -> s { _autoScalingScalingPolicyPolicyType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-scalingadjustment
+asspScalingAdjustment :: Lens' AutoScalingScalingPolicy (Maybe (Val Integer'))
+asspScalingAdjustment = lens _autoScalingScalingPolicyScalingAdjustment (\s a -> s { _autoScalingScalingPolicyScalingAdjustment = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-stepadjustments
+asspStepAdjustments :: Lens' AutoScalingScalingPolicy (Maybe [AutoScalingScalingPolicyStepAdjustment])
+asspStepAdjustments = lens _autoScalingScalingPolicyStepAdjustments (\s a -> s { _autoScalingScalingPolicyStepAdjustments = a })
diff --git a/library-gen/Stratosphere/Resources/AutoScalingScheduledAction.hs b/library-gen/Stratosphere/Resources/AutoScalingScheduledAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/AutoScalingScheduledAction.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html
+
+module Stratosphere.Resources.AutoScalingScheduledAction where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for AutoScalingScheduledAction. See
+-- | 'autoScalingScheduledAction' for a more convenient constructor.
+data AutoScalingScheduledAction =
+  AutoScalingScheduledAction
+  { _autoScalingScheduledActionAutoScalingGroupName :: Val Text
+  , _autoScalingScheduledActionDesiredCapacity :: Maybe (Val Integer')
+  , _autoScalingScheduledActionEndTime :: Maybe (Val Text)
+  , _autoScalingScheduledActionMaxSize :: Maybe (Val Integer')
+  , _autoScalingScheduledActionMinSize :: Maybe (Val Integer')
+  , _autoScalingScheduledActionRecurrence :: Maybe (Val Text)
+  , _autoScalingScheduledActionStartTime :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON AutoScalingScheduledAction where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON AutoScalingScheduledAction where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'AutoScalingScheduledAction' containing required fields
+-- | as arguments.
+autoScalingScheduledAction
+  :: Val Text -- ^ 'assaAutoScalingGroupName'
+  -> AutoScalingScheduledAction
+autoScalingScheduledAction autoScalingGroupNamearg =
+  AutoScalingScheduledAction
+  { _autoScalingScheduledActionAutoScalingGroupName = autoScalingGroupNamearg
+  , _autoScalingScheduledActionDesiredCapacity = Nothing
+  , _autoScalingScheduledActionEndTime = Nothing
+  , _autoScalingScheduledActionMaxSize = Nothing
+  , _autoScalingScheduledActionMinSize = Nothing
+  , _autoScalingScheduledActionRecurrence = Nothing
+  , _autoScalingScheduledActionStartTime = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html#cfn-as-scheduledaction-asgname
+assaAutoScalingGroupName :: Lens' AutoScalingScheduledAction (Val Text)
+assaAutoScalingGroupName = lens _autoScalingScheduledActionAutoScalingGroupName (\s a -> s { _autoScalingScheduledActionAutoScalingGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html#cfn-as-scheduledaction-desiredcapacity
+assaDesiredCapacity :: Lens' AutoScalingScheduledAction (Maybe (Val Integer'))
+assaDesiredCapacity = lens _autoScalingScheduledActionDesiredCapacity (\s a -> s { _autoScalingScheduledActionDesiredCapacity = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html#cfn-as-scheduledaction-endtime
+assaEndTime :: Lens' AutoScalingScheduledAction (Maybe (Val Text))
+assaEndTime = lens _autoScalingScheduledActionEndTime (\s a -> s { _autoScalingScheduledActionEndTime = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html#cfn-as-scheduledaction-maxsize
+assaMaxSize :: Lens' AutoScalingScheduledAction (Maybe (Val Integer'))
+assaMaxSize = lens _autoScalingScheduledActionMaxSize (\s a -> s { _autoScalingScheduledActionMaxSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html#cfn-as-scheduledaction-minsize
+assaMinSize :: Lens' AutoScalingScheduledAction (Maybe (Val Integer'))
+assaMinSize = lens _autoScalingScheduledActionMinSize (\s a -> s { _autoScalingScheduledActionMinSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html#cfn-as-scheduledaction-recurrence
+assaRecurrence :: Lens' AutoScalingScheduledAction (Maybe (Val Text))
+assaRecurrence = lens _autoScalingScheduledActionRecurrence (\s a -> s { _autoScalingScheduledActionRecurrence = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-scheduledaction.html#cfn-as-scheduledaction-starttime
+assaStartTime :: Lens' AutoScalingScheduledAction (Maybe (Val Text))
+assaStartTime = lens _autoScalingScheduledActionStartTime (\s a -> s { _autoScalingScheduledActionStartTime = a })
diff --git a/library-gen/Stratosphere/Resources/Bucket.hs b/library-gen/Stratosphere/Resources/Bucket.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/Bucket.hs
+++ /dev/null
@@ -1,125 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::S3::Bucket type creates an Amazon S3 bucket. You can set a
--- deletion policy for your bucket to control how AWS CloudFormation handles
--- the bucket when the stack is deleted. For Amazon S3 buckets, you can choose
--- to retain the bucket or to delete the bucket. For more information, see
--- DeletionPolicy Attribute.
-
-module Stratosphere.Resources.Bucket where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.ResourceTag
-import Stratosphere.ResourceProperties.S3CorsConfiguration
-import Stratosphere.ResourceProperties.S3LifecycleConfiguration
-import Stratosphere.ResourceProperties.S3LoggingConfiguration
-import Stratosphere.ResourceProperties.S3NotificationConfiguration
-import Stratosphere.ResourceProperties.S3ReplicationConfiguration
-import Stratosphere.ResourceProperties.S3VersioningConfiguration
-import Stratosphere.ResourceProperties.S3WebsiteConfiguration
-import Stratosphere.Types
-
--- | Full data type definition for Bucket. See 'bucket' for a more convenient
--- constructor.
-data Bucket =
-  Bucket
-  { _bucketAccessControl :: Maybe CannedACL
-  , _bucketBucketName :: Maybe (Val Text)
-  , _bucketCorsConfiguration :: Maybe S3CorsConfiguration
-  , _bucketLifecycleConfiguration :: Maybe S3LifecycleConfiguration
-  , _bucketLoggingConfiguration :: Maybe S3LoggingConfiguration
-  , _bucketNotificationConfiguration :: Maybe S3NotificationConfiguration
-  , _bucketReplicationConfiguration :: Maybe S3ReplicationConfiguration
-  , _bucketTags :: Maybe [ResourceTag]
-  , _bucketVersioningConfiguration :: Maybe S3VersioningConfiguration
-  , _bucketWebsiteConfiguration :: Maybe S3WebsiteConfiguration
-  } deriving (Show, Generic)
-
-instance ToJSON Bucket where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
-
-instance FromJSON Bucket where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
-
--- | Constructor for 'Bucket' containing required fields as arguments.
-bucket
-  :: Bucket
-bucket  =
-  Bucket
-  { _bucketAccessControl = Nothing
-  , _bucketBucketName = Nothing
-  , _bucketCorsConfiguration = Nothing
-  , _bucketLifecycleConfiguration = Nothing
-  , _bucketLoggingConfiguration = Nothing
-  , _bucketNotificationConfiguration = Nothing
-  , _bucketReplicationConfiguration = Nothing
-  , _bucketTags = Nothing
-  , _bucketVersioningConfiguration = Nothing
-  , _bucketWebsiteConfiguration = Nothing
-  }
-
--- | A canned access control list (ACL) that grants predefined permissions to
--- the bucket. For more information about canned ACLs, see Canned ACLs in the
--- Amazon S3 documentation.
-bAccessControl :: Lens' Bucket (Maybe CannedACL)
-bAccessControl = lens _bucketAccessControl (\s a -> s { _bucketAccessControl = a })
-
--- | A name for the bucket. If you don't specify a name, AWS CloudFormation
--- generates a unique physical ID and uses that ID for the bucket name. For
--- more information, see Name Type. The bucket name must contain only
--- lowercase letters, numbers, periods (.), and dashes (-). Important If you
--- specify a name, you cannot do updates that require this resource to be
--- replaced. You can still do updates that require no or some interruption. If
--- you must replace the resource, specify a new name.
-bBucketName :: Lens' Bucket (Maybe (Val Text))
-bBucketName = lens _bucketBucketName (\s a -> s { _bucketBucketName = a })
-
--- | Rules that define cross-origin resource sharing of objects in this
--- bucket. For more information, see Enabling Cross-Origin Resource Sharing in
--- the Amazon Simple Storage Service Developer Guide.
-bCorsConfiguration :: Lens' Bucket (Maybe S3CorsConfiguration)
-bCorsConfiguration = lens _bucketCorsConfiguration (\s a -> s { _bucketCorsConfiguration = a })
-
--- | Rules that define how Amazon S3 manages objects during their lifetime.
--- For more information, see Object Lifecycle Management in the Amazon Simple
--- Storage Service Developer Guide.
-bLifecycleConfiguration :: Lens' Bucket (Maybe S3LifecycleConfiguration)
-bLifecycleConfiguration = lens _bucketLifecycleConfiguration (\s a -> s { _bucketLifecycleConfiguration = a })
-
--- | Settings that defines where logs are stored.
-bLoggingConfiguration :: Lens' Bucket (Maybe S3LoggingConfiguration)
-bLoggingConfiguration = lens _bucketLoggingConfiguration (\s a -> s { _bucketLoggingConfiguration = a })
-
--- | Configuration that defines how Amazon S3 handles bucket notifications.
-bNotificationConfiguration :: Lens' Bucket (Maybe S3NotificationConfiguration)
-bNotificationConfiguration = lens _bucketNotificationConfiguration (\s a -> s { _bucketNotificationConfiguration = a })
-
--- | Configuration for replicating objects in an S3 bucket. To enable
--- replication, you must also enable versioning by using the
--- VersioningConfiguration property. Amazon S3 can store replicated objects in
--- only one destination (S3 bucket). You cannot send replicated objects to
--- multiple S3 buckets.
-bReplicationConfiguration :: Lens' Bucket (Maybe S3ReplicationConfiguration)
-bReplicationConfiguration = lens _bucketReplicationConfiguration (\s a -> s { _bucketReplicationConfiguration = a })
-
--- | An arbitrary set of tags (key-value pairs) for this Amazon S3 bucket.
-bTags :: Lens' Bucket (Maybe [ResourceTag])
-bTags = lens _bucketTags (\s a -> s { _bucketTags = a })
-
--- | Enables multiple variants of all objects in this bucket. You might enable
--- versioning to prevent objects from being deleted or overwritten by mistake
--- or to archive objects so that you can retrieve previous versions of them.
-bVersioningConfiguration :: Lens' Bucket (Maybe S3VersioningConfiguration)
-bVersioningConfiguration = lens _bucketVersioningConfiguration (\s a -> s { _bucketVersioningConfiguration = a })
-
--- | Information used to configure the bucket as a static website. For more
--- information, see Hosting Websites on Amazon S3.
-bWebsiteConfiguration :: Lens' Bucket (Maybe S3WebsiteConfiguration)
-bWebsiteConfiguration = lens _bucketWebsiteConfiguration (\s a -> s { _bucketWebsiteConfiguration = a })
diff --git a/library-gen/Stratosphere/Resources/CacheCluster.hs b/library-gen/Stratosphere/Resources/CacheCluster.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/CacheCluster.hs
+++ /dev/null
@@ -1,206 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::ElastiCache::CacheCluster type creates an Amazon ElastiCache
--- cache cluster.
-
-module Stratosphere.Resources.CacheCluster where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.ResourceTag
-
--- | Full data type definition for CacheCluster. See 'cacheCluster' for a more
--- convenient constructor.
-data CacheCluster =
-  CacheCluster
-  { _cacheClusterAutoMinorVersionUpgrade :: Maybe (Val Bool')
-  , _cacheClusterAZMode :: Maybe (Val Text)
-  , _cacheClusterCacheNodeType :: Val Text
-  , _cacheClusterCacheParameterGroupName :: Maybe (Val Text)
-  , _cacheClusterCacheSecurityGroupNames :: Maybe [Val Text]
-  , _cacheClusterCacheSubnetGroupName :: Maybe (Val Text)
-  , _cacheClusterClusterName :: Maybe (Val Text)
-  , _cacheClusterEngine :: Val Text
-  , _cacheClusterEngineVersion :: Maybe (Val Text)
-  , _cacheClusterNotificationTopicArn :: Maybe (Val Text)
-  , _cacheClusterNumCacheNodes :: Val Integer'
-  , _cacheClusterPort :: Maybe (Val Integer')
-  , _cacheClusterPreferredAvailabilityZone :: Maybe (Val Text)
-  , _cacheClusterPreferredAvailabilityZones :: Maybe [Val Text]
-  , _cacheClusterPreferredMaintenanceWindow :: Maybe (Val Text)
-  , _cacheClusterSnapshotArns :: Maybe [Val Text]
-  , _cacheClusterSnapshotName :: Maybe (Val Text)
-  , _cacheClusterSnapshotRetentionLimit :: Maybe (Val Integer')
-  , _cacheClusterSnapshotWindow :: Maybe (Val Text)
-  , _cacheClusterTags :: Maybe [ResourceTag]
-  , _cacheClusterVpcSecurityGroupIds :: Maybe [Val Text]
-  } deriving (Show, Generic)
-
-instance ToJSON CacheCluster where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
-
-instance FromJSON CacheCluster where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
-
--- | Constructor for 'CacheCluster' containing required fields as arguments.
-cacheCluster
-  :: Val Text -- ^ 'ccCacheNodeType'
-  -> Val Text -- ^ 'ccEngine'
-  -> Val Integer' -- ^ 'ccNumCacheNodes'
-  -> CacheCluster
-cacheCluster cacheNodeTypearg enginearg numCacheNodesarg =
-  CacheCluster
-  { _cacheClusterAutoMinorVersionUpgrade = Nothing
-  , _cacheClusterAZMode = Nothing
-  , _cacheClusterCacheNodeType = cacheNodeTypearg
-  , _cacheClusterCacheParameterGroupName = Nothing
-  , _cacheClusterCacheSecurityGroupNames = Nothing
-  , _cacheClusterCacheSubnetGroupName = Nothing
-  , _cacheClusterClusterName = Nothing
-  , _cacheClusterEngine = enginearg
-  , _cacheClusterEngineVersion = Nothing
-  , _cacheClusterNotificationTopicArn = Nothing
-  , _cacheClusterNumCacheNodes = numCacheNodesarg
-  , _cacheClusterPort = Nothing
-  , _cacheClusterPreferredAvailabilityZone = Nothing
-  , _cacheClusterPreferredAvailabilityZones = Nothing
-  , _cacheClusterPreferredMaintenanceWindow = Nothing
-  , _cacheClusterSnapshotArns = Nothing
-  , _cacheClusterSnapshotName = Nothing
-  , _cacheClusterSnapshotRetentionLimit = Nothing
-  , _cacheClusterSnapshotWindow = Nothing
-  , _cacheClusterTags = Nothing
-  , _cacheClusterVpcSecurityGroupIds = Nothing
-  }
-
--- | Indicates that minor engine upgrades will be applied automatically to the
--- cache cluster during the maintenance window.
-ccAutoMinorVersionUpgrade :: Lens' CacheCluster (Maybe (Val Bool'))
-ccAutoMinorVersionUpgrade = lens _cacheClusterAutoMinorVersionUpgrade (\s a -> s { _cacheClusterAutoMinorVersionUpgrade = a })
-
--- | For Memcached cache clusters, indicates whether the nodes are created in
--- a single Availability Zone or across multiple Availability Zones in the
--- cluster's region. For valid values, see CreateCacheCluster in the Amazon
--- ElastiCache API Reference.
-ccAZMode :: Lens' CacheCluster (Maybe (Val Text))
-ccAZMode = lens _cacheClusterAZMode (\s a -> s { _cacheClusterAZMode = a })
-
--- | The compute and memory capacity of nodes in a cache cluster.
-ccCacheNodeType :: Lens' CacheCluster (Val Text)
-ccCacheNodeType = lens _cacheClusterCacheNodeType (\s a -> s { _cacheClusterCacheNodeType = a })
-
--- | The name of the cache parameter group that is associated with this cache
--- cluster.
-ccCacheParameterGroupName :: Lens' CacheCluster (Maybe (Val Text))
-ccCacheParameterGroupName = lens _cacheClusterCacheParameterGroupName (\s a -> s { _cacheClusterCacheParameterGroupName = a })
-
--- | A list of cache security group names that are associated with this cache
--- cluster. If your cache cluster is in a VPC, specify the VpcSecurityGroupIds
--- property instead.
-ccCacheSecurityGroupNames :: Lens' CacheCluster (Maybe [Val Text])
-ccCacheSecurityGroupNames = lens _cacheClusterCacheSecurityGroupNames (\s a -> s { _cacheClusterCacheSecurityGroupNames = a })
-
--- | The cache subnet group that you associate with a cache cluster.
-ccCacheSubnetGroupName :: Lens' CacheCluster (Maybe (Val Text))
-ccCacheSubnetGroupName = lens _cacheClusterCacheSubnetGroupName (\s a -> s { _cacheClusterCacheSubnetGroupName = a })
-
--- | A name for the cache cluster. If you don't specify a name, AWS
--- CloudFormation generates a unique physical ID and uses that ID for the
--- cache cluster. For more information, see Name Type. Important If you
--- specify a name, you cannot do updates that require this resource to be
--- replaced. You can still do updates that require no or some interruption. If
--- you must replace the resource, specify a new name. The name must contain 1
--- to 20 alphanumeric characters or hyphens. The name must start with a letter
--- and cannot end with a hyphen or contain two consecutive hyphens.
-ccClusterName :: Lens' CacheCluster (Maybe (Val Text))
-ccClusterName = lens _cacheClusterClusterName (\s a -> s { _cacheClusterClusterName = a })
-
--- | The name of the cache engine to be used for this cache cluster, such as
--- memcached or redis.
-ccEngine :: Lens' CacheCluster (Val Text)
-ccEngine = lens _cacheClusterEngine (\s a -> s { _cacheClusterEngine = a })
-
--- | The version of the cache engine to be used for this cluster.
-ccEngineVersion :: Lens' CacheCluster (Maybe (Val Text))
-ccEngineVersion = lens _cacheClusterEngineVersion (\s a -> s { _cacheClusterEngineVersion = a })
-
--- | The Amazon Resource Name (ARN) of the Amazon Simple Notification Service
--- (SNS) topic to which notifications will be sent.
-ccNotificationTopicArn :: Lens' CacheCluster (Maybe (Val Text))
-ccNotificationTopicArn = lens _cacheClusterNotificationTopicArn (\s a -> s { _cacheClusterNotificationTopicArn = a })
-
--- | The number of cache nodes that the cache cluster should have.
-ccNumCacheNodes :: Lens' CacheCluster (Val Integer')
-ccNumCacheNodes = lens _cacheClusterNumCacheNodes (\s a -> s { _cacheClusterNumCacheNodes = a })
-
--- | The port number on which each of the cache nodes will accept connections.
-ccPort :: Lens' CacheCluster (Maybe (Val Integer'))
-ccPort = lens _cacheClusterPort (\s a -> s { _cacheClusterPort = a })
-
--- | The Amazon EC2 Availability Zone in which the cache cluster is created.
-ccPreferredAvailabilityZone :: Lens' CacheCluster (Maybe (Val Text))
-ccPreferredAvailabilityZone = lens _cacheClusterPreferredAvailabilityZone (\s a -> s { _cacheClusterPreferredAvailabilityZone = a })
-
--- | For Memcached cache clusters, the list of Availability Zones in which
--- cache nodes are created. The number of Availability Zones listed must equal
--- the number of cache nodes. For example, if you want to create three nodes
--- in two different Availability Zones, you can specify ["us-east-1a",
--- "us-east-1a", "us-east-1b"], which would create two nodes in us-east-1a and
--- one node in us-east-1b. If you specify a subnet group and you're creating
--- your cache cluster in a VPC, you must specify Availability Zones that are
--- associated with the subnets in the subnet group that you've chosen. If you
--- want all the nodes in the same Availability Zone, use the
--- PreferredAvailabilityZone property or repeat the Availability Zone multiple
--- times in the list.
-ccPreferredAvailabilityZones :: Lens' CacheCluster (Maybe [Val Text])
-ccPreferredAvailabilityZones = lens _cacheClusterPreferredAvailabilityZones (\s a -> s { _cacheClusterPreferredAvailabilityZones = a })
-
--- | The weekly time range (in UTC) during which system maintenance can occur.
-ccPreferredMaintenanceWindow :: Lens' CacheCluster (Maybe (Val Text))
-ccPreferredMaintenanceWindow = lens _cacheClusterPreferredMaintenanceWindow (\s a -> s { _cacheClusterPreferredMaintenanceWindow = a })
-
--- | The ARN of the snapshot file that you want to use to seed a new Redis
--- cache cluster. If you manage a Redis instance outside of Amazon
--- ElastiCache, you can create a new cache cluster in ElastiCache by using a
--- snapshot file that is stored in an Amazon S3 bucket.
-ccSnapshotArns :: Lens' CacheCluster (Maybe [Val Text])
-ccSnapshotArns = lens _cacheClusterSnapshotArns (\s a -> s { _cacheClusterSnapshotArns = a })
-
--- | The name of a snapshot from which to restore data into a new Redis cache
--- cluster.
-ccSnapshotName :: Lens' CacheCluster (Maybe (Val Text))
-ccSnapshotName = lens _cacheClusterSnapshotName (\s a -> s { _cacheClusterSnapshotName = a })
-
--- | For Redis cache clusters, the number of days for which ElastiCache
--- retains automatic snapshots before deleting them. For example, if you set
--- the value to 5, a snapshot that was taken today will be retained for 5 days
--- before being deleted.
-ccSnapshotRetentionLimit :: Lens' CacheCluster (Maybe (Val Integer'))
-ccSnapshotRetentionLimit = lens _cacheClusterSnapshotRetentionLimit (\s a -> s { _cacheClusterSnapshotRetentionLimit = a })
-
--- | For Redis cache clusters, the daily time range (in UTC) during which
--- ElastiCache will begin taking a daily snapshot of your node group. For
--- example, you can specify 05:00-09:00.
-ccSnapshotWindow :: Lens' CacheCluster (Maybe (Val Text))
-ccSnapshotWindow = lens _cacheClusterSnapshotWindow (\s a -> s { _cacheClusterSnapshotWindow = a })
-
--- | An arbitrary set of tags (key–value pairs) for this cache cluster.
-ccTags :: Lens' CacheCluster (Maybe [ResourceTag])
-ccTags = lens _cacheClusterTags (\s a -> s { _cacheClusterTags = a })
-
--- | A list of VPC security group IDs. If your cache cluster isn't in a VPC,
--- specify the CacheSecurityGroupNames property instead. Note You must use the
--- AWS::EC2::SecurityGroup resource instead of the
--- AWS::ElastiCache::SecurityGroup resource in order to specify an ElastiCache
--- security group that is in a VPC. In addition, if you use the default VPC
--- for your AWS account, you must use the Fn::GetAtt function and the GroupId
--- attribute to retrieve security group IDs (instead of the Ref function). To
--- see a sample template, see the Template Snippet section.
-ccVpcSecurityGroupIds :: Lens' CacheCluster (Maybe [Val Text])
-ccVpcSecurityGroupIds = lens _cacheClusterVpcSecurityGroupIds (\s a -> s { _cacheClusterVpcSecurityGroupIds = a })
diff --git a/library-gen/Stratosphere/Resources/CacheSubnetGroup.hs b/library-gen/Stratosphere/Resources/CacheSubnetGroup.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/CacheSubnetGroup.hs
+++ /dev/null
@@ -1,54 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Creates a cache subnet group. For more information about cache subnet
--- groups, go to Cache Subnet Groups in the Amazon ElastiCache User Guide or
--- go to CreateCacheSubnetGroup in the Amazon ElastiCache API Reference Guide.
--- When you specify an AWS::ElastiCache::SubnetGroup type as an argument to
--- the Ref function, AWS CloudFormation returns the name of the cache subnet
--- group.
-
-module Stratosphere.Resources.CacheSubnetGroup where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for CacheSubnetGroup. See 'cacheSubnetGroup'
--- for a more convenient constructor.
-data CacheSubnetGroup =
-  CacheSubnetGroup
-  { _cacheSubnetGroupDescription :: Val Text
-  , _cacheSubnetGroupSubnetIds :: [Val Text]
-  } deriving (Show, Generic)
-
-instance ToJSON CacheSubnetGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
-
-instance FromJSON CacheSubnetGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
-
--- | Constructor for 'CacheSubnetGroup' containing required fields as
--- arguments.
-cacheSubnetGroup
-  :: Val Text -- ^ 'csgDescription'
-  -> [Val Text] -- ^ 'csgSubnetIds'
-  -> CacheSubnetGroup
-cacheSubnetGroup descriptionarg subnetIdsarg =
-  CacheSubnetGroup
-  { _cacheSubnetGroupDescription = descriptionarg
-  , _cacheSubnetGroupSubnetIds = subnetIdsarg
-  }
-
--- | The description for the cache subnet group.
-csgDescription :: Lens' CacheSubnetGroup (Val Text)
-csgDescription = lens _cacheSubnetGroupDescription (\s a -> s { _cacheSubnetGroupDescription = a })
-
--- | The Amazon EC2 subnet IDs for the cache subnet group.
-csgSubnetIds :: Lens' CacheSubnetGroup [Val Text]
-csgSubnetIds = lens _cacheSubnetGroupSubnetIds (\s a -> s { _cacheSubnetGroupSubnetIds = a })
diff --git a/library-gen/Stratosphere/Resources/CertificateManagerCertificate.hs b/library-gen/Stratosphere/Resources/CertificateManagerCertificate.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CertificateManagerCertificate.hs
@@ -0,0 +1,61 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-certificatemanager-certificate.html
+
+module Stratosphere.Resources.CertificateManagerCertificate where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CertificateManagerCertificateDomainValidationOption
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for CertificateManagerCertificate. See
+-- | 'certificateManagerCertificate' for a more convenient constructor.
+data CertificateManagerCertificate =
+  CertificateManagerCertificate
+  { _certificateManagerCertificateDomainName :: Val Text
+  , _certificateManagerCertificateDomainValidationOptions :: Maybe [CertificateManagerCertificateDomainValidationOption]
+  , _certificateManagerCertificateSubjectAlternativeNames :: Maybe [Val Text]
+  , _certificateManagerCertificateTags :: Maybe [Tag]
+  } deriving (Show, Generic)
+
+instance ToJSON CertificateManagerCertificate where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+instance FromJSON CertificateManagerCertificate where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+-- | Constructor for 'CertificateManagerCertificate' containing required
+-- | fields as arguments.
+certificateManagerCertificate
+  :: Val Text -- ^ 'cmcDomainName'
+  -> CertificateManagerCertificate
+certificateManagerCertificate domainNamearg =
+  CertificateManagerCertificate
+  { _certificateManagerCertificateDomainName = domainNamearg
+  , _certificateManagerCertificateDomainValidationOptions = Nothing
+  , _certificateManagerCertificateSubjectAlternativeNames = Nothing
+  , _certificateManagerCertificateTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-certificatemanager-certificate.html#cfn-certificatemanager-certificate-domainname
+cmcDomainName :: Lens' CertificateManagerCertificate (Val Text)
+cmcDomainName = lens _certificateManagerCertificateDomainName (\s a -> s { _certificateManagerCertificateDomainName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-certificatemanager-certificate.html#cfn-certificatemanager-certificate-domainvalidationoptions
+cmcDomainValidationOptions :: Lens' CertificateManagerCertificate (Maybe [CertificateManagerCertificateDomainValidationOption])
+cmcDomainValidationOptions = lens _certificateManagerCertificateDomainValidationOptions (\s a -> s { _certificateManagerCertificateDomainValidationOptions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-certificatemanager-certificate.html#cfn-certificatemanager-certificate-subjectalternativenames
+cmcSubjectAlternativeNames :: Lens' CertificateManagerCertificate (Maybe [Val Text])
+cmcSubjectAlternativeNames = lens _certificateManagerCertificateSubjectAlternativeNames (\s a -> s { _certificateManagerCertificateSubjectAlternativeNames = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-certificatemanager-certificate.html#cfn-certificatemanager-certificate-tags
+cmcTags :: Lens' CertificateManagerCertificate (Maybe [Tag])
+cmcTags = lens _certificateManagerCertificateTags (\s a -> s { _certificateManagerCertificateTags = a })
diff --git a/library-gen/Stratosphere/Resources/CloudFormationCustomResource.hs b/library-gen/Stratosphere/Resources/CloudFormationCustomResource.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CloudFormationCustomResource.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cfn-customresource.html
+
+module Stratosphere.Resources.CloudFormationCustomResource where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CloudFormationCustomResource. See
+-- | 'cloudFormationCustomResource' for a more convenient constructor.
+data CloudFormationCustomResource =
+  CloudFormationCustomResource
+  { _cloudFormationCustomResourceServiceToken :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFormationCustomResource where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+instance FromJSON CloudFormationCustomResource where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+-- | Constructor for 'CloudFormationCustomResource' containing required fields
+-- | as arguments.
+cloudFormationCustomResource
+  :: Val Text -- ^ 'cfcrServiceToken'
+  -> CloudFormationCustomResource
+cloudFormationCustomResource serviceTokenarg =
+  CloudFormationCustomResource
+  { _cloudFormationCustomResourceServiceToken = serviceTokenarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cfn-customresource.html#cfn-customresource-servicetoken
+cfcrServiceToken :: Lens' CloudFormationCustomResource (Val Text)
+cfcrServiceToken = lens _cloudFormationCustomResourceServiceToken (\s a -> s { _cloudFormationCustomResourceServiceToken = a })
diff --git a/library-gen/Stratosphere/Resources/CloudFormationStack.hs b/library-gen/Stratosphere/Resources/CloudFormationStack.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CloudFormationStack.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html
+
+module Stratosphere.Resources.CloudFormationStack where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for CloudFormationStack. See
+-- | 'cloudFormationStack' for a more convenient constructor.
+data CloudFormationStack =
+  CloudFormationStack
+  { _cloudFormationStackNotificationARNs :: Maybe [Val Text]
+  , _cloudFormationStackParameters :: Maybe Object
+  , _cloudFormationStackTags :: Maybe [Tag]
+  , _cloudFormationStackTemplateURL :: Val Text
+  , _cloudFormationStackTimeoutInMinutes :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFormationStack where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+instance FromJSON CloudFormationStack where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+-- | Constructor for 'CloudFormationStack' containing required fields as
+-- | arguments.
+cloudFormationStack
+  :: Val Text -- ^ 'cfsTemplateURL'
+  -> CloudFormationStack
+cloudFormationStack templateURLarg =
+  CloudFormationStack
+  { _cloudFormationStackNotificationARNs = Nothing
+  , _cloudFormationStackParameters = Nothing
+  , _cloudFormationStackTags = Nothing
+  , _cloudFormationStackTemplateURL = templateURLarg
+  , _cloudFormationStackTimeoutInMinutes = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html#cfn-cloudformation-stack-notificationarns
+cfsNotificationARNs :: Lens' CloudFormationStack (Maybe [Val Text])
+cfsNotificationARNs = lens _cloudFormationStackNotificationARNs (\s a -> s { _cloudFormationStackNotificationARNs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html#cfn-cloudformation-stack-parameters
+cfsParameters :: Lens' CloudFormationStack (Maybe Object)
+cfsParameters = lens _cloudFormationStackParameters (\s a -> s { _cloudFormationStackParameters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html#cfn-cloudformation-stack-tags
+cfsTags :: Lens' CloudFormationStack (Maybe [Tag])
+cfsTags = lens _cloudFormationStackTags (\s a -> s { _cloudFormationStackTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html#cfn-cloudformation-stack-templateurl
+cfsTemplateURL :: Lens' CloudFormationStack (Val Text)
+cfsTemplateURL = lens _cloudFormationStackTemplateURL (\s a -> s { _cloudFormationStackTemplateURL = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html#cfn-cloudformation-stack-timeoutinminutes
+cfsTimeoutInMinutes :: Lens' CloudFormationStack (Maybe (Val Integer'))
+cfsTimeoutInMinutes = lens _cloudFormationStackTimeoutInMinutes (\s a -> s { _cloudFormationStackTimeoutInMinutes = a })
diff --git a/library-gen/Stratosphere/Resources/CloudFormationWaitCondition.hs b/library-gen/Stratosphere/Resources/CloudFormationWaitCondition.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CloudFormationWaitCondition.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waitcondition.html
+
+module Stratosphere.Resources.CloudFormationWaitCondition where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CloudFormationWaitCondition. See
+-- | 'cloudFormationWaitCondition' for a more convenient constructor.
+data CloudFormationWaitCondition =
+  CloudFormationWaitCondition
+  { _cloudFormationWaitConditionCount :: Maybe (Val Integer')
+  , _cloudFormationWaitConditionHandle :: Val Text
+  , _cloudFormationWaitConditionTimeout :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFormationWaitCondition where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON CloudFormationWaitCondition where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'CloudFormationWaitCondition' containing required fields
+-- | as arguments.
+cloudFormationWaitCondition
+  :: Val Text -- ^ 'cfwcHandle'
+  -> Val Text -- ^ 'cfwcTimeout'
+  -> CloudFormationWaitCondition
+cloudFormationWaitCondition handlearg timeoutarg =
+  CloudFormationWaitCondition
+  { _cloudFormationWaitConditionCount = Nothing
+  , _cloudFormationWaitConditionHandle = handlearg
+  , _cloudFormationWaitConditionTimeout = timeoutarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waitcondition.html#cfn-waitcondition-count
+cfwcCount :: Lens' CloudFormationWaitCondition (Maybe (Val Integer'))
+cfwcCount = lens _cloudFormationWaitConditionCount (\s a -> s { _cloudFormationWaitConditionCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waitcondition.html#cfn-waitcondition-handle
+cfwcHandle :: Lens' CloudFormationWaitCondition (Val Text)
+cfwcHandle = lens _cloudFormationWaitConditionHandle (\s a -> s { _cloudFormationWaitConditionHandle = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waitcondition.html#cfn-waitcondition-timeout
+cfwcTimeout :: Lens' CloudFormationWaitCondition (Val Text)
+cfwcTimeout = lens _cloudFormationWaitConditionTimeout (\s a -> s { _cloudFormationWaitConditionTimeout = a })
diff --git a/library-gen/Stratosphere/Resources/CloudFormationWaitConditionHandle.hs b/library-gen/Stratosphere/Resources/CloudFormationWaitConditionHandle.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CloudFormationWaitConditionHandle.hs
@@ -0,0 +1,39 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waitconditionhandle.html
+
+module Stratosphere.Resources.CloudFormationWaitConditionHandle where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CloudFormationWaitConditionHandle. See
+-- | 'cloudFormationWaitConditionHandle' for a more convenient constructor.
+data CloudFormationWaitConditionHandle =
+  CloudFormationWaitConditionHandle
+  { 
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFormationWaitConditionHandle where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON CloudFormationWaitConditionHandle where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'CloudFormationWaitConditionHandle' containing required
+-- | fields as arguments.
+cloudFormationWaitConditionHandle
+  :: CloudFormationWaitConditionHandle
+cloudFormationWaitConditionHandle  =
+  CloudFormationWaitConditionHandle
+  { 
+  }
+
+
diff --git a/library-gen/Stratosphere/Resources/CloudFrontDistribution.hs b/library-gen/Stratosphere/Resources/CloudFrontDistribution.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CloudFrontDistribution.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution.html
+
+module Stratosphere.Resources.CloudFrontDistribution where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CloudFrontDistributionDistributionConfig
+
+-- | Full data type definition for CloudFrontDistribution. See
+-- | 'cloudFrontDistribution' for a more convenient constructor.
+data CloudFrontDistribution =
+  CloudFrontDistribution
+  { _cloudFrontDistributionDistributionConfig :: CloudFrontDistributionDistributionConfig
+  } deriving (Show, Generic)
+
+instance ToJSON CloudFrontDistribution where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+instance FromJSON CloudFrontDistribution where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+-- | Constructor for 'CloudFrontDistribution' containing required fields as
+-- | arguments.
+cloudFrontDistribution
+  :: CloudFrontDistributionDistributionConfig -- ^ 'cfdDistributionConfig'
+  -> CloudFrontDistribution
+cloudFrontDistribution distributionConfigarg =
+  CloudFrontDistribution
+  { _cloudFrontDistributionDistributionConfig = distributionConfigarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution.html#cfn-cloudfront-distribution-distributionconfig
+cfdDistributionConfig :: Lens' CloudFrontDistribution CloudFrontDistributionDistributionConfig
+cfdDistributionConfig = lens _cloudFrontDistributionDistributionConfig (\s a -> s { _cloudFrontDistributionDistributionConfig = a })
diff --git a/library-gen/Stratosphere/Resources/CloudTrailTrail.hs b/library-gen/Stratosphere/Resources/CloudTrailTrail.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CloudTrailTrail.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html
+
+module Stratosphere.Resources.CloudTrailTrail where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CloudTrailTrail. See 'cloudTrailTrail' for
+-- | a more convenient constructor.
+data CloudTrailTrail =
+  CloudTrailTrail
+  { _cloudTrailTrailCloudWatchLogsLogGroupArn :: Maybe (Val Text)
+  , _cloudTrailTrailCloudWatchLogsRoleArn :: Maybe (Val Text)
+  , _cloudTrailTrailEnableLogFileValidation :: Maybe (Val Bool')
+  , _cloudTrailTrailIncludeGlobalServiceEvents :: Maybe (Val Bool')
+  , _cloudTrailTrailIsLogging :: Val Bool'
+  , _cloudTrailTrailIsMultiRegionTrail :: Maybe (Val Bool')
+  , _cloudTrailTrailKMSKeyId :: Maybe (Val Text)
+  , _cloudTrailTrailS3BucketName :: Val Text
+  , _cloudTrailTrailS3KeyPrefix :: Maybe (Val Text)
+  , _cloudTrailTrailSnsTopicName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CloudTrailTrail where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+
+instance FromJSON CloudTrailTrail where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+
+-- | Constructor for 'CloudTrailTrail' containing required fields as
+-- | arguments.
+cloudTrailTrail
+  :: Val Bool' -- ^ 'cttIsLogging'
+  -> Val Text -- ^ 'cttS3BucketName'
+  -> CloudTrailTrail
+cloudTrailTrail isLoggingarg s3BucketNamearg =
+  CloudTrailTrail
+  { _cloudTrailTrailCloudWatchLogsLogGroupArn = Nothing
+  , _cloudTrailTrailCloudWatchLogsRoleArn = Nothing
+  , _cloudTrailTrailEnableLogFileValidation = Nothing
+  , _cloudTrailTrailIncludeGlobalServiceEvents = Nothing
+  , _cloudTrailTrailIsLogging = isLoggingarg
+  , _cloudTrailTrailIsMultiRegionTrail = Nothing
+  , _cloudTrailTrailKMSKeyId = Nothing
+  , _cloudTrailTrailS3BucketName = s3BucketNamearg
+  , _cloudTrailTrailS3KeyPrefix = Nothing
+  , _cloudTrailTrailSnsTopicName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-cloudwatchlogsloggrouparn
+cttCloudWatchLogsLogGroupArn :: Lens' CloudTrailTrail (Maybe (Val Text))
+cttCloudWatchLogsLogGroupArn = lens _cloudTrailTrailCloudWatchLogsLogGroupArn (\s a -> s { _cloudTrailTrailCloudWatchLogsLogGroupArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-cloudwatchlogsrolearn
+cttCloudWatchLogsRoleArn :: Lens' CloudTrailTrail (Maybe (Val Text))
+cttCloudWatchLogsRoleArn = lens _cloudTrailTrailCloudWatchLogsRoleArn (\s a -> s { _cloudTrailTrailCloudWatchLogsRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-enablelogfilevalidation
+cttEnableLogFileValidation :: Lens' CloudTrailTrail (Maybe (Val Bool'))
+cttEnableLogFileValidation = lens _cloudTrailTrailEnableLogFileValidation (\s a -> s { _cloudTrailTrailEnableLogFileValidation = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-includeglobalserviceevents
+cttIncludeGlobalServiceEvents :: Lens' CloudTrailTrail (Maybe (Val Bool'))
+cttIncludeGlobalServiceEvents = lens _cloudTrailTrailIncludeGlobalServiceEvents (\s a -> s { _cloudTrailTrailIncludeGlobalServiceEvents = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-islogging
+cttIsLogging :: Lens' CloudTrailTrail (Val Bool')
+cttIsLogging = lens _cloudTrailTrailIsLogging (\s a -> s { _cloudTrailTrailIsLogging = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-ismultiregiontrail
+cttIsMultiRegionTrail :: Lens' CloudTrailTrail (Maybe (Val Bool'))
+cttIsMultiRegionTrail = lens _cloudTrailTrailIsMultiRegionTrail (\s a -> s { _cloudTrailTrailIsMultiRegionTrail = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-kmskeyid
+cttKMSKeyId :: Lens' CloudTrailTrail (Maybe (Val Text))
+cttKMSKeyId = lens _cloudTrailTrailKMSKeyId (\s a -> s { _cloudTrailTrailKMSKeyId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-s3bucketname
+cttS3BucketName :: Lens' CloudTrailTrail (Val Text)
+cttS3BucketName = lens _cloudTrailTrailS3BucketName (\s a -> s { _cloudTrailTrailS3BucketName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-s3keyprefix
+cttS3KeyPrefix :: Lens' CloudTrailTrail (Maybe (Val Text))
+cttS3KeyPrefix = lens _cloudTrailTrailS3KeyPrefix (\s a -> s { _cloudTrailTrailS3KeyPrefix = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-snstopicname
+cttSnsTopicName :: Lens' CloudTrailTrail (Maybe (Val Text))
+cttSnsTopicName = lens _cloudTrailTrailSnsTopicName (\s a -> s { _cloudTrailTrailSnsTopicName = a })
diff --git a/library-gen/Stratosphere/Resources/CloudWatchAlarm.hs b/library-gen/Stratosphere/Resources/CloudWatchAlarm.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CloudWatchAlarm.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html
+
+module Stratosphere.Resources.CloudWatchAlarm where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CloudWatchAlarmDimension
+
+-- | Full data type definition for CloudWatchAlarm. See 'cloudWatchAlarm' for
+-- | a more convenient constructor.
+data CloudWatchAlarm =
+  CloudWatchAlarm
+  { _cloudWatchAlarmActionsEnabled :: Maybe (Val Bool')
+  , _cloudWatchAlarmAlarmActions :: Maybe [Val Text]
+  , _cloudWatchAlarmAlarmDescription :: Maybe (Val Text)
+  , _cloudWatchAlarmAlarmName :: Maybe (Val Text)
+  , _cloudWatchAlarmComparisonOperator :: Val Text
+  , _cloudWatchAlarmDimensions :: Maybe [CloudWatchAlarmDimension]
+  , _cloudWatchAlarmEvaluationPeriods :: Val Double'
+  , _cloudWatchAlarmInsufficientDataActions :: Maybe [Val Text]
+  , _cloudWatchAlarmMetricName :: Val Text
+  , _cloudWatchAlarmNamespace :: Val Text
+  , _cloudWatchAlarmOKActions :: Maybe [Val Text]
+  , _cloudWatchAlarmPeriod :: Val Integer'
+  , _cloudWatchAlarmStatistic :: Val Text
+  , _cloudWatchAlarmThreshold :: Val Double'
+  , _cloudWatchAlarmUnit :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CloudWatchAlarm where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+
+instance FromJSON CloudWatchAlarm where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+
+-- | Constructor for 'CloudWatchAlarm' containing required fields as
+-- | arguments.
+cloudWatchAlarm
+  :: Val Text -- ^ 'cwaComparisonOperator'
+  -> Val Double' -- ^ 'cwaEvaluationPeriods'
+  -> Val Text -- ^ 'cwaMetricName'
+  -> Val Text -- ^ 'cwaNamespace'
+  -> Val Integer' -- ^ 'cwaPeriod'
+  -> Val Text -- ^ 'cwaStatistic'
+  -> Val Double' -- ^ 'cwaThreshold'
+  -> CloudWatchAlarm
+cloudWatchAlarm comparisonOperatorarg evaluationPeriodsarg metricNamearg namespacearg periodarg statisticarg thresholdarg =
+  CloudWatchAlarm
+  { _cloudWatchAlarmActionsEnabled = Nothing
+  , _cloudWatchAlarmAlarmActions = Nothing
+  , _cloudWatchAlarmAlarmDescription = Nothing
+  , _cloudWatchAlarmAlarmName = Nothing
+  , _cloudWatchAlarmComparisonOperator = comparisonOperatorarg
+  , _cloudWatchAlarmDimensions = Nothing
+  , _cloudWatchAlarmEvaluationPeriods = evaluationPeriodsarg
+  , _cloudWatchAlarmInsufficientDataActions = Nothing
+  , _cloudWatchAlarmMetricName = metricNamearg
+  , _cloudWatchAlarmNamespace = namespacearg
+  , _cloudWatchAlarmOKActions = Nothing
+  , _cloudWatchAlarmPeriod = periodarg
+  , _cloudWatchAlarmStatistic = statisticarg
+  , _cloudWatchAlarmThreshold = thresholdarg
+  , _cloudWatchAlarmUnit = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-actionsenabled
+cwaActionsEnabled :: Lens' CloudWatchAlarm (Maybe (Val Bool'))
+cwaActionsEnabled = lens _cloudWatchAlarmActionsEnabled (\s a -> s { _cloudWatchAlarmActionsEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-alarmactions
+cwaAlarmActions :: Lens' CloudWatchAlarm (Maybe [Val Text])
+cwaAlarmActions = lens _cloudWatchAlarmAlarmActions (\s a -> s { _cloudWatchAlarmAlarmActions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-alarmdescription
+cwaAlarmDescription :: Lens' CloudWatchAlarm (Maybe (Val Text))
+cwaAlarmDescription = lens _cloudWatchAlarmAlarmDescription (\s a -> s { _cloudWatchAlarmAlarmDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-alarmname
+cwaAlarmName :: Lens' CloudWatchAlarm (Maybe (Val Text))
+cwaAlarmName = lens _cloudWatchAlarmAlarmName (\s a -> s { _cloudWatchAlarmAlarmName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-comparisonoperator
+cwaComparisonOperator :: Lens' CloudWatchAlarm (Val Text)
+cwaComparisonOperator = lens _cloudWatchAlarmComparisonOperator (\s a -> s { _cloudWatchAlarmComparisonOperator = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-dimension
+cwaDimensions :: Lens' CloudWatchAlarm (Maybe [CloudWatchAlarmDimension])
+cwaDimensions = lens _cloudWatchAlarmDimensions (\s a -> s { _cloudWatchAlarmDimensions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-evaluationperiods
+cwaEvaluationPeriods :: Lens' CloudWatchAlarm (Val Double')
+cwaEvaluationPeriods = lens _cloudWatchAlarmEvaluationPeriods (\s a -> s { _cloudWatchAlarmEvaluationPeriods = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-insufficientdataactions
+cwaInsufficientDataActions :: Lens' CloudWatchAlarm (Maybe [Val Text])
+cwaInsufficientDataActions = lens _cloudWatchAlarmInsufficientDataActions (\s a -> s { _cloudWatchAlarmInsufficientDataActions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-metricname
+cwaMetricName :: Lens' CloudWatchAlarm (Val Text)
+cwaMetricName = lens _cloudWatchAlarmMetricName (\s a -> s { _cloudWatchAlarmMetricName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-namespace
+cwaNamespace :: Lens' CloudWatchAlarm (Val Text)
+cwaNamespace = lens _cloudWatchAlarmNamespace (\s a -> s { _cloudWatchAlarmNamespace = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-okactions
+cwaOKActions :: Lens' CloudWatchAlarm (Maybe [Val Text])
+cwaOKActions = lens _cloudWatchAlarmOKActions (\s a -> s { _cloudWatchAlarmOKActions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-period
+cwaPeriod :: Lens' CloudWatchAlarm (Val Integer')
+cwaPeriod = lens _cloudWatchAlarmPeriod (\s a -> s { _cloudWatchAlarmPeriod = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-statistic
+cwaStatistic :: Lens' CloudWatchAlarm (Val Text)
+cwaStatistic = lens _cloudWatchAlarmStatistic (\s a -> s { _cloudWatchAlarmStatistic = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-threshold
+cwaThreshold :: Lens' CloudWatchAlarm (Val Double')
+cwaThreshold = lens _cloudWatchAlarmThreshold (\s a -> s { _cloudWatchAlarmThreshold = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-unit
+cwaUnit :: Lens' CloudWatchAlarm (Maybe (Val Text))
+cwaUnit = lens _cloudWatchAlarmUnit (\s a -> s { _cloudWatchAlarmUnit = a })
diff --git a/library-gen/Stratosphere/Resources/CodeBuildProject.hs b/library-gen/Stratosphere/Resources/CodeBuildProject.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CodeBuildProject.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html
+
+module Stratosphere.Resources.CodeBuildProject where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CodeBuildProjectArtifacts
+import Stratosphere.ResourceProperties.CodeBuildProjectEnvironment
+import Stratosphere.ResourceProperties.CodeBuildProjectSource
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for CodeBuildProject. See 'codeBuildProject'
+-- | for a more convenient constructor.
+data CodeBuildProject =
+  CodeBuildProject
+  { _codeBuildProjectArtifacts :: Maybe CodeBuildProjectArtifacts
+  , _codeBuildProjectDescription :: Maybe (Val Text)
+  , _codeBuildProjectEncryptionKey :: Maybe (Val Text)
+  , _codeBuildProjectEnvironment :: Maybe CodeBuildProjectEnvironment
+  , _codeBuildProjectName :: Maybe (Val Text)
+  , _codeBuildProjectServiceRole :: Maybe (Val Text)
+  , _codeBuildProjectSource :: Maybe CodeBuildProjectSource
+  , _codeBuildProjectTags :: Maybe [Tag]
+  , _codeBuildProjectTimeoutInMinutes :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON CodeBuildProject where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+instance FromJSON CodeBuildProject where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+-- | Constructor for 'CodeBuildProject' containing required fields as
+-- | arguments.
+codeBuildProject
+  :: CodeBuildProject
+codeBuildProject  =
+  CodeBuildProject
+  { _codeBuildProjectArtifacts = Nothing
+  , _codeBuildProjectDescription = Nothing
+  , _codeBuildProjectEncryptionKey = Nothing
+  , _codeBuildProjectEnvironment = Nothing
+  , _codeBuildProjectName = Nothing
+  , _codeBuildProjectServiceRole = Nothing
+  , _codeBuildProjectSource = Nothing
+  , _codeBuildProjectTags = Nothing
+  , _codeBuildProjectTimeoutInMinutes = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-artifacts
+cbpArtifacts :: Lens' CodeBuildProject (Maybe CodeBuildProjectArtifacts)
+cbpArtifacts = lens _codeBuildProjectArtifacts (\s a -> s { _codeBuildProjectArtifacts = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-description
+cbpDescription :: Lens' CodeBuildProject (Maybe (Val Text))
+cbpDescription = lens _codeBuildProjectDescription (\s a -> s { _codeBuildProjectDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-encryptionkey
+cbpEncryptionKey :: Lens' CodeBuildProject (Maybe (Val Text))
+cbpEncryptionKey = lens _codeBuildProjectEncryptionKey (\s a -> s { _codeBuildProjectEncryptionKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-environment
+cbpEnvironment :: Lens' CodeBuildProject (Maybe CodeBuildProjectEnvironment)
+cbpEnvironment = lens _codeBuildProjectEnvironment (\s a -> s { _codeBuildProjectEnvironment = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-name
+cbpName :: Lens' CodeBuildProject (Maybe (Val Text))
+cbpName = lens _codeBuildProjectName (\s a -> s { _codeBuildProjectName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-servicerole
+cbpServiceRole :: Lens' CodeBuildProject (Maybe (Val Text))
+cbpServiceRole = lens _codeBuildProjectServiceRole (\s a -> s { _codeBuildProjectServiceRole = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-source
+cbpSource :: Lens' CodeBuildProject (Maybe CodeBuildProjectSource)
+cbpSource = lens _codeBuildProjectSource (\s a -> s { _codeBuildProjectSource = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-tags
+cbpTags :: Lens' CodeBuildProject (Maybe [Tag])
+cbpTags = lens _codeBuildProjectTags (\s a -> s { _codeBuildProjectTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-timeoutinminutes
+cbpTimeoutInMinutes :: Lens' CodeBuildProject (Maybe (Val Integer'))
+cbpTimeoutInMinutes = lens _codeBuildProjectTimeoutInMinutes (\s a -> s { _codeBuildProjectTimeoutInMinutes = a })
diff --git a/library-gen/Stratosphere/Resources/CodeCommitRepository.hs b/library-gen/Stratosphere/Resources/CodeCommitRepository.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CodeCommitRepository.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codecommit-repository.html
+
+module Stratosphere.Resources.CodeCommitRepository where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CodeCommitRepositoryRepositoryTrigger
+
+-- | Full data type definition for CodeCommitRepository. See
+-- | 'codeCommitRepository' for a more convenient constructor.
+data CodeCommitRepository =
+  CodeCommitRepository
+  { _codeCommitRepositoryRepositoryDescription :: Maybe (Val Text)
+  , _codeCommitRepositoryRepositoryName :: Val Text
+  , _codeCommitRepositoryTriggers :: Maybe [CodeCommitRepositoryRepositoryTrigger]
+  } deriving (Show, Generic)
+
+instance ToJSON CodeCommitRepository where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+instance FromJSON CodeCommitRepository where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+-- | Constructor for 'CodeCommitRepository' containing required fields as
+-- | arguments.
+codeCommitRepository
+  :: Val Text -- ^ 'ccrRepositoryName'
+  -> CodeCommitRepository
+codeCommitRepository repositoryNamearg =
+  CodeCommitRepository
+  { _codeCommitRepositoryRepositoryDescription = Nothing
+  , _codeCommitRepositoryRepositoryName = repositoryNamearg
+  , _codeCommitRepositoryTriggers = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codecommit-repository.html#cfn-codecommit-repository-repositorydescription
+ccrRepositoryDescription :: Lens' CodeCommitRepository (Maybe (Val Text))
+ccrRepositoryDescription = lens _codeCommitRepositoryRepositoryDescription (\s a -> s { _codeCommitRepositoryRepositoryDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codecommit-repository.html#cfn-codecommit-repository-repositoryname
+ccrRepositoryName :: Lens' CodeCommitRepository (Val Text)
+ccrRepositoryName = lens _codeCommitRepositoryRepositoryName (\s a -> s { _codeCommitRepositoryRepositoryName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codecommit-repository.html#cfn-codecommit-repository-triggers
+ccrTriggers :: Lens' CodeCommitRepository (Maybe [CodeCommitRepositoryRepositoryTrigger])
+ccrTriggers = lens _codeCommitRepositoryTriggers (\s a -> s { _codeCommitRepositoryTriggers = a })
diff --git a/library-gen/Stratosphere/Resources/CodeDeployApplication.hs b/library-gen/Stratosphere/Resources/CodeDeployApplication.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CodeDeployApplication.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-application.html
+
+module Stratosphere.Resources.CodeDeployApplication where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodeDeployApplication. See
+-- | 'codeDeployApplication' for a more convenient constructor.
+data CodeDeployApplication =
+  CodeDeployApplication
+  { _codeDeployApplicationApplicationName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CodeDeployApplication where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+instance FromJSON CodeDeployApplication where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+-- | Constructor for 'CodeDeployApplication' containing required fields as
+-- | arguments.
+codeDeployApplication
+  :: CodeDeployApplication
+codeDeployApplication  =
+  CodeDeployApplication
+  { _codeDeployApplicationApplicationName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-application.html#cfn-codedeploy-application-applicationname
+cdaApplicationName :: Lens' CodeDeployApplication (Maybe (Val Text))
+cdaApplicationName = lens _codeDeployApplicationApplicationName (\s a -> s { _codeDeployApplicationApplicationName = a })
diff --git a/library-gen/Stratosphere/Resources/CodeDeployDeploymentConfig.hs b/library-gen/Stratosphere/Resources/CodeDeployDeploymentConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CodeDeployDeploymentConfig.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentconfig.html
+
+module Stratosphere.Resources.CodeDeployDeploymentConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodeDeployDeploymentConfig. See
+-- | 'codeDeployDeploymentConfig' for a more convenient constructor.
+data CodeDeployDeploymentConfig =
+  CodeDeployDeploymentConfig
+  { _codeDeployDeploymentConfigDeploymentConfigName :: Maybe (Val Text)
+  , _codeDeployDeploymentConfigMinimumHealthyHosts :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CodeDeployDeploymentConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON CodeDeployDeploymentConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'CodeDeployDeploymentConfig' containing required fields
+-- | as arguments.
+codeDeployDeploymentConfig
+  :: CodeDeployDeploymentConfig
+codeDeployDeploymentConfig  =
+  CodeDeployDeploymentConfig
+  { _codeDeployDeploymentConfigDeploymentConfigName = Nothing
+  , _codeDeployDeploymentConfigMinimumHealthyHosts = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentconfig.html#cfn-codedeploy-deploymentconfig-deploymentconfigname
+cddcDeploymentConfigName :: Lens' CodeDeployDeploymentConfig (Maybe (Val Text))
+cddcDeploymentConfigName = lens _codeDeployDeploymentConfigDeploymentConfigName (\s a -> s { _codeDeployDeploymentConfigDeploymentConfigName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentconfig.html#cfn-codedeploy-deploymentconfig-minimumhealthyhosts
+cddcMinimumHealthyHosts :: Lens' CodeDeployDeploymentConfig (Maybe (Val Text))
+cddcMinimumHealthyHosts = lens _codeDeployDeploymentConfigMinimumHealthyHosts (\s a -> s { _codeDeployDeploymentConfigMinimumHealthyHosts = a })
diff --git a/library-gen/Stratosphere/Resources/CodeDeployDeploymentGroup.hs b/library-gen/Stratosphere/Resources/CodeDeployDeploymentGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CodeDeployDeploymentGroup.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentgroup.html
+
+module Stratosphere.Resources.CodeDeployDeploymentGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupDeployment
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupEc2TagFilter
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupOnPremisesInstanceTagFilter
+
+-- | Full data type definition for CodeDeployDeploymentGroup. See
+-- | 'codeDeployDeploymentGroup' for a more convenient constructor.
+data CodeDeployDeploymentGroup =
+  CodeDeployDeploymentGroup
+  { _codeDeployDeploymentGroupApplicationName :: Val Text
+  , _codeDeployDeploymentGroupAutoScalingGroups :: Maybe [Val Text]
+  , _codeDeployDeploymentGroupDeployment :: Maybe CodeDeployDeploymentGroupDeployment
+  , _codeDeployDeploymentGroupDeploymentConfigName :: Maybe (Val Text)
+  , _codeDeployDeploymentGroupDeploymentGroupName :: Maybe (Val Text)
+  , _codeDeployDeploymentGroupEc2TagFilters :: Maybe [CodeDeployDeploymentGroupEc2TagFilter]
+  , _codeDeployDeploymentGroupOnPremisesInstanceTagFilters :: Maybe [CodeDeployDeploymentGroupOnPremisesInstanceTagFilter]
+  , _codeDeployDeploymentGroupServiceRoleArn :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON CodeDeployDeploymentGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+instance FromJSON CodeDeployDeploymentGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+-- | Constructor for 'CodeDeployDeploymentGroup' containing required fields as
+-- | arguments.
+codeDeployDeploymentGroup
+  :: Val Text -- ^ 'cddgApplicationName'
+  -> Val Text -- ^ 'cddgServiceRoleArn'
+  -> CodeDeployDeploymentGroup
+codeDeployDeploymentGroup applicationNamearg serviceRoleArnarg =
+  CodeDeployDeploymentGroup
+  { _codeDeployDeploymentGroupApplicationName = applicationNamearg
+  , _codeDeployDeploymentGroupAutoScalingGroups = Nothing
+  , _codeDeployDeploymentGroupDeployment = Nothing
+  , _codeDeployDeploymentGroupDeploymentConfigName = Nothing
+  , _codeDeployDeploymentGroupDeploymentGroupName = Nothing
+  , _codeDeployDeploymentGroupEc2TagFilters = Nothing
+  , _codeDeployDeploymentGroupOnPremisesInstanceTagFilters = Nothing
+  , _codeDeployDeploymentGroupServiceRoleArn = serviceRoleArnarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentgroup.html#cfn-codedeploy-deploymentgroup-applicationname
+cddgApplicationName :: Lens' CodeDeployDeploymentGroup (Val Text)
+cddgApplicationName = lens _codeDeployDeploymentGroupApplicationName (\s a -> s { _codeDeployDeploymentGroupApplicationName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentgroup.html#cfn-codedeploy-deploymentgroup-autoscalinggroups
+cddgAutoScalingGroups :: Lens' CodeDeployDeploymentGroup (Maybe [Val Text])
+cddgAutoScalingGroups = lens _codeDeployDeploymentGroupAutoScalingGroups (\s a -> s { _codeDeployDeploymentGroupAutoScalingGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentgroup.html#cfn-codedeploy-deploymentgroup-deployment
+cddgDeployment :: Lens' CodeDeployDeploymentGroup (Maybe CodeDeployDeploymentGroupDeployment)
+cddgDeployment = lens _codeDeployDeploymentGroupDeployment (\s a -> s { _codeDeployDeploymentGroupDeployment = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentgroup.html#cfn-codedeploy-deploymentgroup-deploymentconfigname
+cddgDeploymentConfigName :: Lens' CodeDeployDeploymentGroup (Maybe (Val Text))
+cddgDeploymentConfigName = lens _codeDeployDeploymentGroupDeploymentConfigName (\s a -> s { _codeDeployDeploymentGroupDeploymentConfigName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentgroup.html#cfn-codedeploy-deploymentgroup-deploymentgroupname
+cddgDeploymentGroupName :: Lens' CodeDeployDeploymentGroup (Maybe (Val Text))
+cddgDeploymentGroupName = lens _codeDeployDeploymentGroupDeploymentGroupName (\s a -> s { _codeDeployDeploymentGroupDeploymentGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentgroup.html#cfn-codedeploy-deploymentgroup-ec2tagfilters
+cddgEc2TagFilters :: Lens' CodeDeployDeploymentGroup (Maybe [CodeDeployDeploymentGroupEc2TagFilter])
+cddgEc2TagFilters = lens _codeDeployDeploymentGroupEc2TagFilters (\s a -> s { _codeDeployDeploymentGroupEc2TagFilters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentgroup.html#cfn-codedeploy-deploymentgroup-onpremisesinstancetagfilters
+cddgOnPremisesInstanceTagFilters :: Lens' CodeDeployDeploymentGroup (Maybe [CodeDeployDeploymentGroupOnPremisesInstanceTagFilter])
+cddgOnPremisesInstanceTagFilters = lens _codeDeployDeploymentGroupOnPremisesInstanceTagFilters (\s a -> s { _codeDeployDeploymentGroupOnPremisesInstanceTagFilters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentgroup.html#cfn-codedeploy-deploymentgroup-servicerolearn
+cddgServiceRoleArn :: Lens' CodeDeployDeploymentGroup (Val Text)
+cddgServiceRoleArn = lens _codeDeployDeploymentGroupServiceRoleArn (\s a -> s { _codeDeployDeploymentGroupServiceRoleArn = a })
diff --git a/library-gen/Stratosphere/Resources/CodePipelineCustomActionType.hs b/library-gen/Stratosphere/Resources/CodePipelineCustomActionType.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CodePipelineCustomActionType.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-customactiontype.html
+
+module Stratosphere.Resources.CodePipelineCustomActionType where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CodePipelineCustomActionTypeConfigurationProperties
+import Stratosphere.ResourceProperties.CodePipelineCustomActionTypeArtifactDetails
+import Stratosphere.ResourceProperties.CodePipelineCustomActionTypeSettings
+
+-- | Full data type definition for CodePipelineCustomActionType. See
+-- | 'codePipelineCustomActionType' for a more convenient constructor.
+data CodePipelineCustomActionType =
+  CodePipelineCustomActionType
+  { _codePipelineCustomActionTypeCategory :: Val Text
+  , _codePipelineCustomActionTypeConfigurationProperties :: Maybe [CodePipelineCustomActionTypeConfigurationProperties]
+  , _codePipelineCustomActionTypeInputArtifactDetails :: CodePipelineCustomActionTypeArtifactDetails
+  , _codePipelineCustomActionTypeOutputArtifactDetails :: CodePipelineCustomActionTypeArtifactDetails
+  , _codePipelineCustomActionTypeProvider :: Val Text
+  , _codePipelineCustomActionTypeSettings :: Maybe CodePipelineCustomActionTypeSettings
+  , _codePipelineCustomActionTypeVersion :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON CodePipelineCustomActionType where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+instance FromJSON CodePipelineCustomActionType where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+-- | Constructor for 'CodePipelineCustomActionType' containing required fields
+-- | as arguments.
+codePipelineCustomActionType
+  :: Val Text -- ^ 'cpcatCategory'
+  -> CodePipelineCustomActionTypeArtifactDetails -- ^ 'cpcatInputArtifactDetails'
+  -> CodePipelineCustomActionTypeArtifactDetails -- ^ 'cpcatOutputArtifactDetails'
+  -> Val Text -- ^ 'cpcatProvider'
+  -> CodePipelineCustomActionType
+codePipelineCustomActionType categoryarg inputArtifactDetailsarg outputArtifactDetailsarg providerarg =
+  CodePipelineCustomActionType
+  { _codePipelineCustomActionTypeCategory = categoryarg
+  , _codePipelineCustomActionTypeConfigurationProperties = Nothing
+  , _codePipelineCustomActionTypeInputArtifactDetails = inputArtifactDetailsarg
+  , _codePipelineCustomActionTypeOutputArtifactDetails = outputArtifactDetailsarg
+  , _codePipelineCustomActionTypeProvider = providerarg
+  , _codePipelineCustomActionTypeSettings = Nothing
+  , _codePipelineCustomActionTypeVersion = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-customactiontype.html#cfn-codepipeline-customactiontype-category
+cpcatCategory :: Lens' CodePipelineCustomActionType (Val Text)
+cpcatCategory = lens _codePipelineCustomActionTypeCategory (\s a -> s { _codePipelineCustomActionTypeCategory = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-customactiontype.html#cfn-codepipeline-customactiontype-configurationproperties
+cpcatConfigurationProperties :: Lens' CodePipelineCustomActionType (Maybe [CodePipelineCustomActionTypeConfigurationProperties])
+cpcatConfigurationProperties = lens _codePipelineCustomActionTypeConfigurationProperties (\s a -> s { _codePipelineCustomActionTypeConfigurationProperties = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-customactiontype.html#cfn-codepipeline-customactiontype-inputartifactdetails
+cpcatInputArtifactDetails :: Lens' CodePipelineCustomActionType CodePipelineCustomActionTypeArtifactDetails
+cpcatInputArtifactDetails = lens _codePipelineCustomActionTypeInputArtifactDetails (\s a -> s { _codePipelineCustomActionTypeInputArtifactDetails = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-customactiontype.html#cfn-codepipeline-customactiontype-outputartifactdetails
+cpcatOutputArtifactDetails :: Lens' CodePipelineCustomActionType CodePipelineCustomActionTypeArtifactDetails
+cpcatOutputArtifactDetails = lens _codePipelineCustomActionTypeOutputArtifactDetails (\s a -> s { _codePipelineCustomActionTypeOutputArtifactDetails = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-customactiontype.html#cfn-codepipeline-customactiontype-provider
+cpcatProvider :: Lens' CodePipelineCustomActionType (Val Text)
+cpcatProvider = lens _codePipelineCustomActionTypeProvider (\s a -> s { _codePipelineCustomActionTypeProvider = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-customactiontype.html#cfn-codepipeline-customactiontype-settings
+cpcatSettings :: Lens' CodePipelineCustomActionType (Maybe CodePipelineCustomActionTypeSettings)
+cpcatSettings = lens _codePipelineCustomActionTypeSettings (\s a -> s { _codePipelineCustomActionTypeSettings = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-customactiontype.html#cfn-codepipeline-customactiontype-version
+cpcatVersion :: Lens' CodePipelineCustomActionType (Maybe (Val Text))
+cpcatVersion = lens _codePipelineCustomActionTypeVersion (\s a -> s { _codePipelineCustomActionTypeVersion = a })
diff --git a/library-gen/Stratosphere/Resources/CodePipelinePipeline.hs b/library-gen/Stratosphere/Resources/CodePipelinePipeline.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CodePipelinePipeline.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html
+
+module Stratosphere.Resources.CodePipelinePipeline where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CodePipelinePipelineArtifactStore
+import Stratosphere.ResourceProperties.CodePipelinePipelineStageTransition
+import Stratosphere.ResourceProperties.CodePipelinePipelineStageDeclaration
+
+-- | Full data type definition for CodePipelinePipeline. See
+-- | 'codePipelinePipeline' for a more convenient constructor.
+data CodePipelinePipeline =
+  CodePipelinePipeline
+  { _codePipelinePipelineArtifactStore :: CodePipelinePipelineArtifactStore
+  , _codePipelinePipelineDisableInboundStageTransitions :: Maybe [CodePipelinePipelineStageTransition]
+  , _codePipelinePipelineName :: Maybe (Val Text)
+  , _codePipelinePipelineRestartExecutionOnUpdate :: Maybe (Val Bool')
+  , _codePipelinePipelineRoleArn :: Val Text
+  , _codePipelinePipelineStages :: [CodePipelinePipelineStageDeclaration]
+  } deriving (Show, Generic)
+
+instance ToJSON CodePipelinePipeline where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+instance FromJSON CodePipelinePipeline where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+-- | Constructor for 'CodePipelinePipeline' containing required fields as
+-- | arguments.
+codePipelinePipeline
+  :: CodePipelinePipelineArtifactStore -- ^ 'cppArtifactStore'
+  -> Val Text -- ^ 'cppRoleArn'
+  -> [CodePipelinePipelineStageDeclaration] -- ^ 'cppStages'
+  -> CodePipelinePipeline
+codePipelinePipeline artifactStorearg roleArnarg stagesarg =
+  CodePipelinePipeline
+  { _codePipelinePipelineArtifactStore = artifactStorearg
+  , _codePipelinePipelineDisableInboundStageTransitions = Nothing
+  , _codePipelinePipelineName = Nothing
+  , _codePipelinePipelineRestartExecutionOnUpdate = Nothing
+  , _codePipelinePipelineRoleArn = roleArnarg
+  , _codePipelinePipelineStages = stagesarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html#cfn-codepipeline-pipeline-artifactstore
+cppArtifactStore :: Lens' CodePipelinePipeline CodePipelinePipelineArtifactStore
+cppArtifactStore = lens _codePipelinePipelineArtifactStore (\s a -> s { _codePipelinePipelineArtifactStore = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html#cfn-codepipeline-pipeline-disableinboundstagetransitions
+cppDisableInboundStageTransitions :: Lens' CodePipelinePipeline (Maybe [CodePipelinePipelineStageTransition])
+cppDisableInboundStageTransitions = lens _codePipelinePipelineDisableInboundStageTransitions (\s a -> s { _codePipelinePipelineDisableInboundStageTransitions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html#cfn-codepipeline-pipeline-name
+cppName :: Lens' CodePipelinePipeline (Maybe (Val Text))
+cppName = lens _codePipelinePipelineName (\s a -> s { _codePipelinePipelineName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html#cfn-codepipeline-pipeline-restartexecutiononupdate
+cppRestartExecutionOnUpdate :: Lens' CodePipelinePipeline (Maybe (Val Bool'))
+cppRestartExecutionOnUpdate = lens _codePipelinePipelineRestartExecutionOnUpdate (\s a -> s { _codePipelinePipelineRestartExecutionOnUpdate = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html#cfn-codepipeline-pipeline-rolearn
+cppRoleArn :: Lens' CodePipelinePipeline (Val Text)
+cppRoleArn = lens _codePipelinePipelineRoleArn (\s a -> s { _codePipelinePipelineRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html#cfn-codepipeline-pipeline-stages
+cppStages :: Lens' CodePipelinePipeline [CodePipelinePipelineStageDeclaration]
+cppStages = lens _codePipelinePipelineStages (\s a -> s { _codePipelinePipelineStages = a })
diff --git a/library-gen/Stratosphere/Resources/ConfigConfigRule.hs b/library-gen/Stratosphere/Resources/ConfigConfigRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ConfigConfigRule.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html
+
+module Stratosphere.Resources.ConfigConfigRule where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ConfigConfigRuleScope
+import Stratosphere.ResourceProperties.ConfigConfigRuleSource
+
+-- | Full data type definition for ConfigConfigRule. See 'configConfigRule'
+-- | for a more convenient constructor.
+data ConfigConfigRule =
+  ConfigConfigRule
+  { _configConfigRuleConfigRuleName :: Maybe (Val Text)
+  , _configConfigRuleDescription :: Maybe (Val Text)
+  , _configConfigRuleInputParameters :: Maybe Object
+  , _configConfigRuleMaximumExecutionFrequency :: Maybe (Val Text)
+  , _configConfigRuleScope :: Maybe ConfigConfigRuleScope
+  , _configConfigRuleSource :: ConfigConfigRuleSource
+  } deriving (Show, Generic)
+
+instance ToJSON ConfigConfigRule where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+instance FromJSON ConfigConfigRule where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+-- | Constructor for 'ConfigConfigRule' containing required fields as
+-- | arguments.
+configConfigRule
+  :: ConfigConfigRuleSource -- ^ 'ccrSource'
+  -> ConfigConfigRule
+configConfigRule sourcearg =
+  ConfigConfigRule
+  { _configConfigRuleConfigRuleName = Nothing
+  , _configConfigRuleDescription = Nothing
+  , _configConfigRuleInputParameters = Nothing
+  , _configConfigRuleMaximumExecutionFrequency = Nothing
+  , _configConfigRuleScope = Nothing
+  , _configConfigRuleSource = sourcearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html#cfn-config-configrule-configrulename
+ccrConfigRuleName :: Lens' ConfigConfigRule (Maybe (Val Text))
+ccrConfigRuleName = lens _configConfigRuleConfigRuleName (\s a -> s { _configConfigRuleConfigRuleName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html#cfn-config-configrule-description
+ccrDescription :: Lens' ConfigConfigRule (Maybe (Val Text))
+ccrDescription = lens _configConfigRuleDescription (\s a -> s { _configConfigRuleDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html#cfn-config-configrule-inputparameters
+ccrInputParameters :: Lens' ConfigConfigRule (Maybe Object)
+ccrInputParameters = lens _configConfigRuleInputParameters (\s a -> s { _configConfigRuleInputParameters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html#cfn-config-configrule-maximumexecutionfrequency
+ccrMaximumExecutionFrequency :: Lens' ConfigConfigRule (Maybe (Val Text))
+ccrMaximumExecutionFrequency = lens _configConfigRuleMaximumExecutionFrequency (\s a -> s { _configConfigRuleMaximumExecutionFrequency = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html#cfn-config-configrule-scope
+ccrScope :: Lens' ConfigConfigRule (Maybe ConfigConfigRuleScope)
+ccrScope = lens _configConfigRuleScope (\s a -> s { _configConfigRuleScope = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html#cfn-config-configrule-source
+ccrSource :: Lens' ConfigConfigRule ConfigConfigRuleSource
+ccrSource = lens _configConfigRuleSource (\s a -> s { _configConfigRuleSource = a })
diff --git a/library-gen/Stratosphere/Resources/ConfigConfigurationRecorder.hs b/library-gen/Stratosphere/Resources/ConfigConfigurationRecorder.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ConfigConfigurationRecorder.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configurationrecorder.html
+
+module Stratosphere.Resources.ConfigConfigurationRecorder where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ConfigConfigurationRecorderRecordingGroup
+
+-- | Full data type definition for ConfigConfigurationRecorder. See
+-- | 'configConfigurationRecorder' for a more convenient constructor.
+data ConfigConfigurationRecorder =
+  ConfigConfigurationRecorder
+  { _configConfigurationRecorderName :: Maybe (Val Text)
+  , _configConfigurationRecorderRecordingGroup :: Maybe ConfigConfigurationRecorderRecordingGroup
+  , _configConfigurationRecorderRoleArn :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ConfigConfigurationRecorder where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON ConfigConfigurationRecorder where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'ConfigConfigurationRecorder' containing required fields
+-- | as arguments.
+configConfigurationRecorder
+  :: Val Text -- ^ 'ccrRoleArn'
+  -> ConfigConfigurationRecorder
+configConfigurationRecorder roleArnarg =
+  ConfigConfigurationRecorder
+  { _configConfigurationRecorderName = Nothing
+  , _configConfigurationRecorderRecordingGroup = Nothing
+  , _configConfigurationRecorderRoleArn = roleArnarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configurationrecorder.html#cfn-config-configurationrecorder-name
+ccrName :: Lens' ConfigConfigurationRecorder (Maybe (Val Text))
+ccrName = lens _configConfigurationRecorderName (\s a -> s { _configConfigurationRecorderName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configurationrecorder.html#cfn-config-configurationrecorder-recordinggroup
+ccrRecordingGroup :: Lens' ConfigConfigurationRecorder (Maybe ConfigConfigurationRecorderRecordingGroup)
+ccrRecordingGroup = lens _configConfigurationRecorderRecordingGroup (\s a -> s { _configConfigurationRecorderRecordingGroup = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configurationrecorder.html#cfn-config-configurationrecorder-rolearn
+ccrRoleArn :: Lens' ConfigConfigurationRecorder (Val Text)
+ccrRoleArn = lens _configConfigurationRecorderRoleArn (\s a -> s { _configConfigurationRecorderRoleArn = a })
diff --git a/library-gen/Stratosphere/Resources/ConfigDeliveryChannel.hs b/library-gen/Stratosphere/Resources/ConfigDeliveryChannel.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ConfigDeliveryChannel.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-deliverychannel.html
+
+module Stratosphere.Resources.ConfigDeliveryChannel where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ConfigDeliveryChannelConfigSnapshotDeliveryProperties
+
+-- | Full data type definition for ConfigDeliveryChannel. See
+-- | 'configDeliveryChannel' for a more convenient constructor.
+data ConfigDeliveryChannel =
+  ConfigDeliveryChannel
+  { _configDeliveryChannelConfigSnapshotDeliveryProperties :: Maybe ConfigDeliveryChannelConfigSnapshotDeliveryProperties
+  , _configDeliveryChannelName :: Maybe (Val Text)
+  , _configDeliveryChannelS3BucketName :: Val Text
+  , _configDeliveryChannelS3KeyPrefix :: Maybe (Val Text)
+  , _configDeliveryChannelSnsTopicARN :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ConfigDeliveryChannel where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+instance FromJSON ConfigDeliveryChannel where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+-- | Constructor for 'ConfigDeliveryChannel' containing required fields as
+-- | arguments.
+configDeliveryChannel
+  :: Val Text -- ^ 'cdcS3BucketName'
+  -> ConfigDeliveryChannel
+configDeliveryChannel s3BucketNamearg =
+  ConfigDeliveryChannel
+  { _configDeliveryChannelConfigSnapshotDeliveryProperties = Nothing
+  , _configDeliveryChannelName = Nothing
+  , _configDeliveryChannelS3BucketName = s3BucketNamearg
+  , _configDeliveryChannelS3KeyPrefix = Nothing
+  , _configDeliveryChannelSnsTopicARN = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-deliverychannel.html#cfn-config-deliverychannel-configsnapshotdeliveryproperties
+cdcConfigSnapshotDeliveryProperties :: Lens' ConfigDeliveryChannel (Maybe ConfigDeliveryChannelConfigSnapshotDeliveryProperties)
+cdcConfigSnapshotDeliveryProperties = lens _configDeliveryChannelConfigSnapshotDeliveryProperties (\s a -> s { _configDeliveryChannelConfigSnapshotDeliveryProperties = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-deliverychannel.html#cfn-config-deliverychannel-name
+cdcName :: Lens' ConfigDeliveryChannel (Maybe (Val Text))
+cdcName = lens _configDeliveryChannelName (\s a -> s { _configDeliveryChannelName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-deliverychannel.html#cfn-config-deliverychannel-s3bucketname
+cdcS3BucketName :: Lens' ConfigDeliveryChannel (Val Text)
+cdcS3BucketName = lens _configDeliveryChannelS3BucketName (\s a -> s { _configDeliveryChannelS3BucketName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-deliverychannel.html#cfn-config-deliverychannel-s3keyprefix
+cdcS3KeyPrefix :: Lens' ConfigDeliveryChannel (Maybe (Val Text))
+cdcS3KeyPrefix = lens _configDeliveryChannelS3KeyPrefix (\s a -> s { _configDeliveryChannelS3KeyPrefix = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-deliverychannel.html#cfn-config-deliverychannel-snstopicarn
+cdcSnsTopicARN :: Lens' ConfigDeliveryChannel (Maybe (Val Text))
+cdcSnsTopicARN = lens _configDeliveryChannelSnsTopicARN (\s a -> s { _configDeliveryChannelSnsTopicARN = a })
diff --git a/library-gen/Stratosphere/Resources/DBInstance.hs b/library-gen/Stratosphere/Resources/DBInstance.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/DBInstance.hs
+++ /dev/null
@@ -1,383 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::RDS::DBInstance type creates an Amazon RDS database instance.
--- For detailed information about configuring RDS DB instances, see
--- CreateDBInstance.
-
-module Stratosphere.Resources.DBInstance where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.ResourceTag
-
--- | Full data type definition for DBInstance. See 'dbInstance' for a more
--- convenient constructor.
-data DBInstance =
-  DBInstance
-  { _dBInstanceAllocatedStorage :: Maybe (Val Text)
-  , _dBInstanceAllowMajorVersionUpgrade :: Maybe (Val Bool')
-  , _dBInstanceAutoMinorVersionUpgrade :: Maybe (Val Bool')
-  , _dBInstanceAvailabilityZone :: Maybe (Val Text)
-  , _dBInstanceBackupRetentionPeriod :: Maybe (Val Text)
-  , _dBInstanceCharacterSetName :: Maybe (Val Text)
-  , _dBInstanceDBClusterIdentifier :: Maybe (Val Text)
-  , _dBInstanceDBInstanceClass :: Val Text
-  , _dBInstanceDBInstanceIdentifier :: Maybe (Val Text)
-  , _dBInstanceDBName :: Maybe (Val Text)
-  , _dBInstanceDBParameterGroupName :: Maybe (Val Text)
-  , _dBInstanceDBSecurityGroups :: Maybe [Val Text]
-  , _dBInstanceDBSnapshotIdentifier :: Maybe (Val Text)
-  , _dBInstanceDBSubnetGroupName :: Maybe (Val Text)
-  , _dBInstanceEngine :: Maybe (Val Text)
-  , _dBInstanceEngineVersion :: Maybe (Val Text)
-  , _dBInstanceIops :: Maybe (Val Integer')
-  , _dBInstanceKmsKeyId :: Maybe (Val Text)
-  , _dBInstanceLicenseModel :: Maybe (Val Text)
-  , _dBInstanceMasterUsername :: Maybe (Val Text)
-  , _dBInstanceMasterUserPassword :: Maybe (Val Text)
-  , _dBInstanceMultiAZ :: Maybe (Val Bool')
-  , _dBInstanceOptionGroupName :: Maybe (Val Text)
-  , _dBInstancePort :: Maybe (Val Text)
-  , _dBInstancePreferredBackupWindow :: Maybe (Val Text)
-  , _dBInstancePreferredMaintenanceWindow :: Maybe (Val Text)
-  , _dBInstancePubliclyAccessible :: Maybe (Val Bool')
-  , _dBInstanceSourceDBInstanceIdentifier :: Maybe (Val Text)
-  , _dBInstanceStorageEncrypted :: Maybe (Val Bool')
-  , _dBInstanceStorageType :: Maybe (Val Text)
-  , _dBInstanceTags :: Maybe [ResourceTag]
-  , _dBInstanceVPCSecurityGroups :: Maybe [Val Text]
-  } deriving (Show, Generic)
-
-instance ToJSON DBInstance where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
-
-instance FromJSON DBInstance where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
-
--- | Constructor for 'DBInstance' containing required fields as arguments.
-dbInstance
-  :: Val Text -- ^ 'dbiDBInstanceClass'
-  -> DBInstance
-dbInstance dBInstanceClassarg =
-  DBInstance
-  { _dBInstanceAllocatedStorage = Nothing
-  , _dBInstanceAllowMajorVersionUpgrade = Nothing
-  , _dBInstanceAutoMinorVersionUpgrade = Nothing
-  , _dBInstanceAvailabilityZone = Nothing
-  , _dBInstanceBackupRetentionPeriod = Nothing
-  , _dBInstanceCharacterSetName = Nothing
-  , _dBInstanceDBClusterIdentifier = Nothing
-  , _dBInstanceDBInstanceClass = dBInstanceClassarg
-  , _dBInstanceDBInstanceIdentifier = Nothing
-  , _dBInstanceDBName = Nothing
-  , _dBInstanceDBParameterGroupName = Nothing
-  , _dBInstanceDBSecurityGroups = Nothing
-  , _dBInstanceDBSnapshotIdentifier = Nothing
-  , _dBInstanceDBSubnetGroupName = Nothing
-  , _dBInstanceEngine = Nothing
-  , _dBInstanceEngineVersion = Nothing
-  , _dBInstanceIops = Nothing
-  , _dBInstanceKmsKeyId = Nothing
-  , _dBInstanceLicenseModel = Nothing
-  , _dBInstanceMasterUsername = Nothing
-  , _dBInstanceMasterUserPassword = Nothing
-  , _dBInstanceMultiAZ = Nothing
-  , _dBInstanceOptionGroupName = Nothing
-  , _dBInstancePort = Nothing
-  , _dBInstancePreferredBackupWindow = Nothing
-  , _dBInstancePreferredMaintenanceWindow = Nothing
-  , _dBInstancePubliclyAccessible = Nothing
-  , _dBInstanceSourceDBInstanceIdentifier = Nothing
-  , _dBInstanceStorageEncrypted = Nothing
-  , _dBInstanceStorageType = Nothing
-  , _dBInstanceTags = Nothing
-  , _dBInstanceVPCSecurityGroups = Nothing
-  }
-
--- | The allocated storage size specified in gigabytes (GB). If any value is
--- used in the Iops parameter, AllocatedStorage must be at least 100 GB, which
--- corresponds to the minimum Iops value of 1000. If Iops is increased (in
--- 1000 IOPS increments), then AllocatedStorage must also be increased (in 100
--- GB increments) correspondingly.
-dbiAllocatedStorage :: Lens' DBInstance (Maybe (Val Text))
-dbiAllocatedStorage = lens _dBInstanceAllocatedStorage (\s a -> s { _dBInstanceAllocatedStorage = a })
-
--- | Indicates whether major version upgrades are allowed. Changing this
--- parameter does not result in an outage, and the change is applied
--- asynchronously as soon as possible. Constraints: This parameter must be set
--- to true when you specify an EngineVersion that differs from the DB
--- instance's current major version.
-dbiAllowMajorVersionUpgrade :: Lens' DBInstance (Maybe (Val Bool'))
-dbiAllowMajorVersionUpgrade = lens _dBInstanceAllowMajorVersionUpgrade (\s a -> s { _dBInstanceAllowMajorVersionUpgrade = a })
-
--- | Indicates that minor engine upgrades will be applied automatically to the
--- DB instance during the maintenance window. The default value is true.
-dbiAutoMinorVersionUpgrade :: Lens' DBInstance (Maybe (Val Bool'))
-dbiAutoMinorVersionUpgrade = lens _dBInstanceAutoMinorVersionUpgrade (\s a -> s { _dBInstanceAutoMinorVersionUpgrade = a })
-
--- | The name of the Availability Zone where the DB instance is located. You
--- cannot set the AvailabilityZone parameter if the MultiAZ parameter is set
--- to true.
-dbiAvailabilityZone :: Lens' DBInstance (Maybe (Val Text))
-dbiAvailabilityZone = lens _dBInstanceAvailabilityZone (\s a -> s { _dBInstanceAvailabilityZone = a })
-
--- | The number of days for which automatic DB snapshots are retained.
--- Important If this DB instance is deleted or replaced during an update, all
--- automated snapshots are deleted. However, manual DB snapshot are retained.
-dbiBackupRetentionPeriod :: Lens' DBInstance (Maybe (Val Text))
-dbiBackupRetentionPeriod = lens _dBInstanceBackupRetentionPeriod (\s a -> s { _dBInstanceBackupRetentionPeriod = a })
-
--- | For supported engines, specifies the character set to associate with the
--- database instance. For more information, see Appendix: Oracle Character
--- Sets Supported in Amazon RDS in the Amazon Relational Database Service User
--- Guide. If you specify the DBSnapshotIdentifier or
--- SourceDBInstanceIdentifier property, do not specify this property. The
--- value is inherited from the snapshot or source database instance.
-dbiCharacterSetName :: Lens' DBInstance (Maybe (Val Text))
-dbiCharacterSetName = lens _dBInstanceCharacterSetName (\s a -> s { _dBInstanceCharacterSetName = a })
-
--- | The identifier of an existing DB cluster that this instance will be
--- associated with. If you specify this property, specify aurora for the
--- Engine property and do not specify any of the following properties:
--- AllocatedStorage, CharacterSetName, DBSecurityGroups,
--- SourceDBInstanceIdentifier, and StorageType. Amazon RDS assigns the first
--- DB instance in the cluster as the primary and additional DB instances as
--- replicas.
-dbiDBClusterIdentifier :: Lens' DBInstance (Maybe (Val Text))
-dbiDBClusterIdentifier = lens _dBInstanceDBClusterIdentifier (\s a -> s { _dBInstanceDBClusterIdentifier = a })
-
--- | The name of the compute and memory capacity class of the DB instance.
-dbiDBInstanceClass :: Lens' DBInstance (Val Text)
-dbiDBInstanceClass = lens _dBInstanceDBInstanceClass (\s a -> s { _dBInstanceDBInstanceClass = a })
-
--- | A name for the DB instance. If you specify a name, AWS CloudFormation
--- converts it to lower case. If you don't specify a name, AWS CloudFormation
--- generates a unique physical ID and uses that ID for the DB instance. For
--- more information, see Name Type. Important If you specify a name, you
--- cannot do updates that require this resource to be replaced. You can still
--- do updates that require no or some interruption. If you must replace the
--- resource, specify a new name.
-dbiDBInstanceIdentifier :: Lens' DBInstance (Maybe (Val Text))
-dbiDBInstanceIdentifier = lens _dBInstanceDBInstanceIdentifier (\s a -> s { _dBInstanceDBInstanceIdentifier = a })
-
--- | The name of the initial database of this instance that was provided at
--- create time, if one was specified. This same name is returned for the life
--- of the DB instance. Note If you restore from a snapshot, do specify this
--- property for the MySQL or MariaDB engines.
-dbiDBName :: Lens' DBInstance (Maybe (Val Text))
-dbiDBName = lens _dBInstanceDBName (\s a -> s { _dBInstanceDBName = a })
-
--- | The name of an existing DB parameter group or a reference to an
--- AWS::RDS::DBParameterGroup resource created in the template.
-dbiDBParameterGroupName :: Lens' DBInstance (Maybe (Val Text))
-dbiDBParameterGroupName = lens _dBInstanceDBParameterGroupName (\s a -> s { _dBInstanceDBParameterGroupName = a })
-
--- | A list of the DB security groups to assign to the Amazon RDS instance.
--- The list can include both the name of existing DB security groups or
--- references to AWS::RDS::DBSecurityGroup resources created in the template.
--- If you set DBSecurityGroups, you must not set VPCSecurityGroups, and
--- vice-versa.
-dbiDBSecurityGroups :: Lens' DBInstance (Maybe [Val Text])
-dbiDBSecurityGroups = lens _dBInstanceDBSecurityGroups (\s a -> s { _dBInstanceDBSecurityGroups = a })
-
--- | The identifier for the DB snapshot to restore from. By specifying this
--- property, you can create a DB instance from the specified DB snapshot. If
--- the DBSnapshotIdentifier property is an empty string or the
--- AWS::RDS::DBInstance declaration has no DBSnapshotIdentifier property, the
--- database is created as a new database. If the property contains a value
--- (other than empty string), AWS CloudFormation creates a database from the
--- specified snapshot. If a snapshot with the specified name does not exist,
--- the database creation fails and the stack rolls back. Some DB instance
--- properties are not valid when you restore from a snapshot, such as the
--- MasterUsername and MasterUserPassword properties. For information about the
--- properties that you can specify, see the RestoreDBInstanceFromDBSnapshot
--- action in the Amazon Relational Database Service API Reference.
-dbiDBSnapshotIdentifier :: Lens' DBInstance (Maybe (Val Text))
-dbiDBSnapshotIdentifier = lens _dBInstanceDBSnapshotIdentifier (\s a -> s { _dBInstanceDBSnapshotIdentifier = a })
-
--- | A DB subnet group to associate with the DB instance. If there is no DB
--- subnet group, then it is a non-VPC DB instance. For more information about
--- using Amazon RDS in a VPC, go to Using Amazon RDS with Amazon Virtual
--- Private Cloud (VPC) in the Amazon Relational Database Service Developer
--- Guide.
-dbiDBSubnetGroupName :: Lens' DBInstance (Maybe (Val Text))
-dbiDBSubnetGroupName = lens _dBInstanceDBSubnetGroupName (\s a -> s { _dBInstanceDBSubnetGroupName = a })
-
--- | The name of the database engine that the DB instance uses. This property
--- is optional when you specify the DBSnapshotIdentifier property to create DB
--- instances. For valid values, see the Engine parameter of the
--- CreateDBInstance action in the Amazon Relational Database Service API
--- Reference.
-dbiEngine :: Lens' DBInstance (Maybe (Val Text))
-dbiEngine = lens _dBInstanceEngine (\s a -> s { _dBInstanceEngine = a })
-
--- | The version number of the database engine to use.
-dbiEngineVersion :: Lens' DBInstance (Maybe (Val Text))
-dbiEngineVersion = lens _dBInstanceEngineVersion (\s a -> s { _dBInstanceEngineVersion = a })
-
--- | The number of I/O operations per second (IOPS) that the database
--- provisions. The value must be equal to or greater than 1000. If you specify
--- this property, you must follow the range of allowed ratios of your
--- requested IOPS rate to the amount of storage that you allocate (IOPS to
--- allocated storage). For example, you can provision an Oracle database
--- instance with 1000 IOPS and 200 GB of storage (a ratio of 5:1) or specify
--- 2000 IOPS with 200 GB of storage (a ratio of 10:1). For more information,
--- see Amazon RDS Provisioned IOPS Storage to Improve Performance in the
--- Amazon Relational Database Service User Guide.
-dbiIops :: Lens' DBInstance (Maybe (Val Integer'))
-dbiIops = lens _dBInstanceIops (\s a -> s { _dBInstanceIops = a })
-
--- | The Amazon Resource Name (ARN) of the AWS Key Management Service master
--- key that is used to encrypt the database instance, such as
--- arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef.
--- If you enable the StorageEncrypted property but don't specify this
--- property, the default master key is used. If you specify this property, you
--- must set the StorageEncrypted property to true. If you specify the
--- DBSnapshotIdentifier or SourceDBInstanceIdentifier property, do not specify
--- this property. The value is inherited from the snapshot or source database
--- instance. Note Currently, if you specify DBSecurityGroups, this property is
--- ignored. If you want to specify a security group and this property, you
--- must use a VPC security group. For more information about Amazon RDS and
--- VPC, see Using Amazon RDS with Amazon VPC in the Amazon Relational Database
--- Service User Guide.
-dbiKmsKeyId :: Lens' DBInstance (Maybe (Val Text))
-dbiKmsKeyId = lens _dBInstanceKmsKeyId (\s a -> s { _dBInstanceKmsKeyId = a })
-
--- | The license model information for the DB instance.
-dbiLicenseModel :: Lens' DBInstance (Maybe (Val Text))
-dbiLicenseModel = lens _dBInstanceLicenseModel (\s a -> s { _dBInstanceLicenseModel = a })
-
--- | The master user name for the database instance. This property is optional
--- when you specify the DBSnapshotIdentifier or the DBClusterIdentifier
--- property to create DB instances. Note If you specify the
--- SourceDBInstanceIdentifier or DBSnapshotIdentifier property, do not specify
--- this property. The value is inherited from the source database instance or
--- snapshot.
-dbiMasterUsername :: Lens' DBInstance (Maybe (Val Text))
-dbiMasterUsername = lens _dBInstanceMasterUsername (\s a -> s { _dBInstanceMasterUsername = a })
-
--- | The master password for the database instance. This property is optional
--- when you specify the DBSnapshotIdentifier or the DBClusterIdentifier
--- property to create DB instances. Note If you specify the
--- SourceDBInstanceIdentifier property, do not specify this property. The
--- value is inherited from the source database instance.
-dbiMasterUserPassword :: Lens' DBInstance (Maybe (Val Text))
-dbiMasterUserPassword = lens _dBInstanceMasterUserPassword (\s a -> s { _dBInstanceMasterUserPassword = a })
-
--- | Specifies if the database instance is a multiple Availability Zone
--- deployment. You cannot set the AvailabilityZone parameter if the MultiAZ
--- parameter is set to true. Note Do not specify this property if you want a
--- Multi-AZ deployment for a SQL Server database instance. Use the mirroring
--- option in an option group to set Multi-AZ for a SQL Server database
--- instance.
-dbiMultiAZ :: Lens' DBInstance (Maybe (Val Bool'))
-dbiMultiAZ = lens _dBInstanceMultiAZ (\s a -> s { _dBInstanceMultiAZ = a })
-
--- | An option group that this database instance is associated with.
-dbiOptionGroupName :: Lens' DBInstance (Maybe (Val Text))
-dbiOptionGroupName = lens _dBInstanceOptionGroupName (\s a -> s { _dBInstanceOptionGroupName = a })
-
--- | The port for the instance.
-dbiPort :: Lens' DBInstance (Maybe (Val Text))
-dbiPort = lens _dBInstancePort (\s a -> s { _dBInstancePort = a })
-
--- | The daily time range during which automated backups are created if
--- automated backups are enabled, as determined by the BackupRetentionPeriod.
-dbiPreferredBackupWindow :: Lens' DBInstance (Maybe (Val Text))
-dbiPreferredBackupWindow = lens _dBInstancePreferredBackupWindow (\s a -> s { _dBInstancePreferredBackupWindow = a })
-
--- | The weekly time range (in UTC) during which system maintenance can occur.
-dbiPreferredMaintenanceWindow :: Lens' DBInstance (Maybe (Val Text))
-dbiPreferredMaintenanceWindow = lens _dBInstancePreferredMaintenanceWindow (\s a -> s { _dBInstancePreferredMaintenanceWindow = a })
-
--- | Indicates whether the database instance is an Internet-facing instance.
--- If you specify true, an instance is created with a publicly resolvable DNS
--- name, which resolves to a public IP address. If you specify false, an
--- internal instance is created with a DNS name that resolves to a private IP
--- address. The default behavior value depends on your VPC setup and the
--- database subnet group. For more information, see the PubliclyAccessible
--- parameter in CreateDBInstance in the Amazon Relational Database Service API
--- Reference. If this resource has a public IP address and is also in a VPC
--- that is defined in the same template, you must use the DependsOn attribute
--- to declare a dependency on the VPC-gateway attachment. For more
--- information, see DependsOn Attribute. Note Currently, if you specify
--- DBSecurityGroups, this property is ignored. If you want to specify a
--- security group and this property, you must use a VPC security group. For
--- more information about Amazon RDS and VPC, see Using Amazon RDS with Amazon
--- VPC in the Amazon Relational Database Service User Guide.
-dbiPubliclyAccessible :: Lens' DBInstance (Maybe (Val Bool'))
-dbiPubliclyAccessible = lens _dBInstancePubliclyAccessible (\s a -> s { _dBInstancePubliclyAccessible = a })
-
--- | If you want to create a read replica DB instance, specify the ID of the
--- source database instance. Each database instance can have a certain number
--- of read replicas. For more information, see Working with Read Replicas in
--- the Amazon Relational Database Service Developer Guide. The
--- SourceDBInstanceIdentifier property determines whether a database instance
--- is a read replica. If you remove the SourceDBInstanceIdentifier property
--- from your current template and then update your stack, the read replica is
--- deleted and a new database instance (not a read replica) is created.
--- Important Read replicas do not support deletion policies. Any deletion
--- policy that's associated with a read replica is ignored. If you specify
--- SourceDBInstanceIdentifier, do not set the MultiAZ property to true and do
--- not specify the DBSnapshotIdentifier property. You cannot deploy read
--- replicas in multiple Availability Zones, and you cannot create a read
--- replica from a snapshot. Do not set the BackupRetentionPeriod, DBName,
--- MasterUsername, MasterUserPassword, and PreferredBackupWindow properties.
--- The database attributes are inherited from the source database instance,
--- and backups are disabled for read replicas. If the source DB instance is in
--- a different region than the read replica, specify a valid DB instance ARN.
--- For more information, see Constructing a Amazon RDS Amazon Resource Name
--- (ARN) in the Amazon Relational Database Service User Guide. For DB
--- instances in an Amazon Aurora clusters, do not specify this property.
--- Amazon RDS assigns automatically assigns a writer and reader DB instances.
-dbiSourceDBInstanceIdentifier :: Lens' DBInstance (Maybe (Val Text))
-dbiSourceDBInstanceIdentifier = lens _dBInstanceSourceDBInstanceIdentifier (\s a -> s { _dBInstanceSourceDBInstanceIdentifier = a })
-
--- | Indicates whether the database instance is encrypted. If you specify the
--- DBClusterIdentifier, DBSnapshotIdentifier, or SourceDBInstanceIdentifier
--- property, do not specify this property. The value is inherited from the
--- cluster, snapshot, or source database instance. Note Currently, if you
--- specify DBSecurityGroups, this property is ignored. If you want to specify
--- a security group and this property, you must use a VPC security group. For
--- more information about Amazon RDS and VPC, see Using Amazon RDS with Amazon
--- VPC in the Amazon Relational Database Service User Guide.
-dbiStorageEncrypted :: Lens' DBInstance (Maybe (Val Bool'))
-dbiStorageEncrypted = lens _dBInstanceStorageEncrypted (\s a -> s { _dBInstanceStorageEncrypted = a })
-
--- | The storage type associated with this database instance. For the default
--- and valid values, see the StorageType parameter of the CreateDBInstance
--- action in the Amazon Relational Database Service API Reference. Note
--- Currently, if you specify DBSecurityGroups, this property is ignored. If
--- you want to specify a security group and this property, you must use a VPC
--- security group. For more information about Amazon RDS and VPC, see Using
--- Amazon RDS with Amazon VPC in the Amazon Relational Database Service User
--- Guide.
-dbiStorageType :: Lens' DBInstance (Maybe (Val Text))
-dbiStorageType = lens _dBInstanceStorageType (\s a -> s { _dBInstanceStorageType = a })
-
--- | An arbitrary set of tags (key–value pairs) for this database instance.
-dbiTags :: Lens' DBInstance (Maybe [ResourceTag])
-dbiTags = lens _dBInstanceTags (\s a -> s { _dBInstanceTags = a })
-
--- | A list of the VPC security groups to assign to the Amazon RDS instance.
--- The list can include both the physical IDs of existing VPC security groups
--- or references to AWS::EC2::SecurityGroup resources created in the template.
--- If you set VPCSecurityGroups, you must not set DBSecurityGroups, and
--- vice-versa. Important You can migrate a database instance in your stack
--- from an RDS DB security group to a VPC security group, but you should keep
--- the following points in mind: You cannot revert to using an RDS security
--- group once you have established a VPC security group membership. When you
--- migrate your DB instance to VPC security groups, if your stack update rolls
--- back because of another failure in the database instance update, or because
--- of an update failure in another AWS CloudFormation resource, the rollback
--- will fail because it cannot revert to an RDS security group. To avoid this
--- situation, only migrate your DB instance to using VPC security groups when
--- that is the only change in your stack template.
-dbiVPCSecurityGroups :: Lens' DBInstance (Maybe [Val Text])
-dbiVPCSecurityGroups = lens _dBInstanceVPCSecurityGroups (\s a -> s { _dBInstanceVPCSecurityGroups = a })
diff --git a/library-gen/Stratosphere/Resources/DBParameterGroup.hs b/library-gen/Stratosphere/Resources/DBParameterGroup.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/DBParameterGroup.hs
+++ /dev/null
@@ -1,69 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Creates a custom parameter group for an RDS database family. For more
--- information about RDS parameter groups, see Working with DB Parameter
--- Groups in the Amazon Relational Database Service User Guide. This type can
--- be declared in a template and referenced in the DBParameterGroupName
--- parameter of AWS::RDS::DBInstance.
-
-module Stratosphere.Resources.DBParameterGroup where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.ResourceTag
-
--- | Full data type definition for DBParameterGroup. See 'dbParameterGroup'
--- for a more convenient constructor.
-data DBParameterGroup =
-  DBParameterGroup
-  { _dBParameterGroupDescription :: Val Text
-  , _dBParameterGroupFamily :: Val Text
-  , _dBParameterGroupParameters :: Maybe Value
-  , _dBParameterGroupTags :: Maybe [ResourceTag]
-  } deriving (Show, Generic)
-
-instance ToJSON DBParameterGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
-
-instance FromJSON DBParameterGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
-
--- | Constructor for 'DBParameterGroup' containing required fields as
--- arguments.
-dbParameterGroup
-  :: Val Text -- ^ 'dbpgDescription'
-  -> Val Text -- ^ 'dbpgFamily'
-  -> DBParameterGroup
-dbParameterGroup descriptionarg familyarg =
-  DBParameterGroup
-  { _dBParameterGroupDescription = descriptionarg
-  , _dBParameterGroupFamily = familyarg
-  , _dBParameterGroupParameters = Nothing
-  , _dBParameterGroupTags = Nothing
-  }
-
--- | A friendly description of the RDS parameter group. For example, "My
--- Parameter Group".
-dbpgDescription :: Lens' DBParameterGroup (Val Text)
-dbpgDescription = lens _dBParameterGroupDescription (\s a -> s { _dBParameterGroupDescription = a })
-
--- | The database family of this RDS parameter group. For example, "MySQL5.1".
-dbpgFamily :: Lens' DBParameterGroup (Val Text)
-dbpgFamily = lens _dBParameterGroupFamily (\s a -> s { _dBParameterGroupFamily = a })
-
--- | The parameters to set for this RDS parameter group. Changes to dynamic
--- parameters are applied immediately. Changes to static parameters require a
--- reboot without failover to the DB instance that is associated with the
--- parameter group before the change can take effect.
-dbpgParameters :: Lens' DBParameterGroup (Maybe Value)
-dbpgParameters = lens _dBParameterGroupParameters (\s a -> s { _dBParameterGroupParameters = a })
-
--- | The tags that you want to attach to the RDS parameter group.
-dbpgTags :: Lens' DBParameterGroup (Maybe [ResourceTag])
-dbpgTags = lens _dBParameterGroupTags (\s a -> s { _dBParameterGroupTags = a })
diff --git a/library-gen/Stratosphere/Resources/DBSecurityGroup.hs b/library-gen/Stratosphere/Resources/DBSecurityGroup.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/DBSecurityGroup.hs
+++ /dev/null
@@ -1,70 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::RDS::DBSecurityGroup type is used to create or update an Amazon
--- RDS DB Security Group. For more information about DB Security Groups, see
--- Working with DB Security Groups in the Amazon Relational Database Service
--- Developer Guide. For details on the settings for DB security groups, see
--- CreateDBSecurityGroup. When you specify an AWS::RDS::DBSecurityGroup as an
--- argument to the Ref function, AWS CloudFormation returns the value of the
--- DBSecurityGroupName.
-
-module Stratosphere.Resources.DBSecurityGroup where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.ResourceTag
-import Stratosphere.ResourceProperties.RDSSecurityGroupRule
-
--- | Full data type definition for DBSecurityGroup. See 'dbSecurityGroup' for
--- a more convenient constructor.
-data DBSecurityGroup =
-  DBSecurityGroup
-  { _dBSecurityGroupEC2VpcId :: Maybe (Val Text)
-  , _dBSecurityGroupDBSecurityGroupIngress :: [RDSSecurityGroupRule]
-  , _dBSecurityGroupGroupDescription :: Val Text
-  , _dBSecurityGroupResourceTags :: Maybe [ResourceTag]
-  } deriving (Show, Generic)
-
-instance ToJSON DBSecurityGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
-
-instance FromJSON DBSecurityGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
-
--- | Constructor for 'DBSecurityGroup' containing required fields as
--- arguments.
-dbSecurityGroup
-  :: [RDSSecurityGroupRule] -- ^ 'dbsgDBSecurityGroupIngress'
-  -> Val Text -- ^ 'dbsgGroupDescription'
-  -> DBSecurityGroup
-dbSecurityGroup dBSecurityGroupIngressarg groupDescriptionarg =
-  DBSecurityGroup
-  { _dBSecurityGroupEC2VpcId = Nothing
-  , _dBSecurityGroupDBSecurityGroupIngress = dBSecurityGroupIngressarg
-  , _dBSecurityGroupGroupDescription = groupDescriptionarg
-  , _dBSecurityGroupResourceTags = Nothing
-  }
-
--- | The Id of VPC. Indicates which VPC this DB Security Group should belong
--- to. Type: String
-dbsgEC2VpcId :: Lens' DBSecurityGroup (Maybe (Val Text))
-dbsgEC2VpcId = lens _dBSecurityGroupEC2VpcId (\s a -> s { _dBSecurityGroupEC2VpcId = a })
-
--- | Network ingress authorization for an Amazon EC2 security group or an IP
--- address range. Type: List of RDS Security Group Rules.
-dbsgDBSecurityGroupIngress :: Lens' DBSecurityGroup [RDSSecurityGroupRule]
-dbsgDBSecurityGroupIngress = lens _dBSecurityGroupDBSecurityGroupIngress (\s a -> s { _dBSecurityGroupDBSecurityGroupIngress = a })
-
--- | Description of the security group. Type: String
-dbsgGroupDescription :: Lens' DBSecurityGroup (Val Text)
-dbsgGroupDescription = lens _dBSecurityGroupGroupDescription (\s a -> s { _dBSecurityGroupGroupDescription = a })
-
--- | The tags that you want to attach to the Amazon RDS DB security group.
-dbsgResourceTags :: Lens' DBSecurityGroup (Maybe [ResourceTag])
-dbsgResourceTags = lens _dBSecurityGroupResourceTags (\s a -> s { _dBSecurityGroupResourceTags = a })
diff --git a/library-gen/Stratosphere/Resources/DBSecurityGroupIngress.hs b/library-gen/Stratosphere/Resources/DBSecurityGroupIngress.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/DBSecurityGroupIngress.hs
+++ /dev/null
@@ -1,87 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::RDS::DBSecurityGroupIngress type enables ingress to a
--- DBSecurityGroup using one of two forms of authorization. First, EC2 or VPC
--- security groups can be added to the DBSecurityGroup if the application
--- using the database is running on EC2 or VPC instances. Second, IP ranges
--- are available if the application accessing your database is running on the
--- Internet. For more information about DB security groups, see Working with
--- DB security groups This type supports updates. For more information about
--- updating stacks, see AWS CloudFormation Stacks Updates. For details about
--- the settings for DB security group ingress, see
--- AuthorizeDBSecurityGroupIngress.
-
-module Stratosphere.Resources.DBSecurityGroupIngress where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for DBSecurityGroupIngress. See
--- 'dbSecurityGroupIngress' for a more convenient constructor.
-data DBSecurityGroupIngress =
-  DBSecurityGroupIngress
-  { _dBSecurityGroupIngressCIDRIP :: Maybe (Val Text)
-  , _dBSecurityGroupIngressDBSecurityGroupName :: Val Text
-  , _dBSecurityGroupIngressEC2SecurityGroupId :: Maybe (Val Text)
-  , _dBSecurityGroupIngressEC2SecurityGroupName :: Maybe (Val Text)
-  , _dBSecurityGroupIngressEC2SecurityGroupOwnerId :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON DBSecurityGroupIngress where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
-
-instance FromJSON DBSecurityGroupIngress where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
-
--- | Constructor for 'DBSecurityGroupIngress' containing required fields as
--- arguments.
-dbSecurityGroupIngress
-  :: Val Text -- ^ 'dbsgiDBSecurityGroupName'
-  -> DBSecurityGroupIngress
-dbSecurityGroupIngress dBSecurityGroupNamearg =
-  DBSecurityGroupIngress
-  { _dBSecurityGroupIngressCIDRIP = Nothing
-  , _dBSecurityGroupIngressDBSecurityGroupName = dBSecurityGroupNamearg
-  , _dBSecurityGroupIngressEC2SecurityGroupId = Nothing
-  , _dBSecurityGroupIngressEC2SecurityGroupName = Nothing
-  , _dBSecurityGroupIngressEC2SecurityGroupOwnerId = Nothing
-  }
-
--- | The IP range to authorize. For an overview of CIDR ranges, go to the
--- Wikipedia Tutorial. Type: String Update requires: No interruption
-dbsgiCIDRIP :: Lens' DBSecurityGroupIngress (Maybe (Val Text))
-dbsgiCIDRIP = lens _dBSecurityGroupIngressCIDRIP (\s a -> s { _dBSecurityGroupIngressCIDRIP = a })
-
--- | The name (ARN) of the AWS::RDS::DBSecurityGroup to which this ingress
--- will be added. Type: String
-dbsgiDBSecurityGroupName :: Lens' DBSecurityGroupIngress (Val Text)
-dbsgiDBSecurityGroupName = lens _dBSecurityGroupIngressDBSecurityGroupName (\s a -> s { _dBSecurityGroupIngressDBSecurityGroupName = a })
-
--- | The ID of the VPC or EC2 security group to authorize. For VPC DB security
--- groups, use EC2SecurityGroupId. For EC2 security groups, use
--- EC2SecurityGroupOwnerId and either EC2SecurityGroupName or
--- EC2SecurityGroupId. Type: String
-dbsgiEC2SecurityGroupId :: Lens' DBSecurityGroupIngress (Maybe (Val Text))
-dbsgiEC2SecurityGroupId = lens _dBSecurityGroupIngressEC2SecurityGroupId (\s a -> s { _dBSecurityGroupIngressEC2SecurityGroupId = a })
-
--- | The name of the EC2 security group to authorize. For VPC DB security
--- groups, use EC2SecurityGroupId. For EC2 security groups, use
--- EC2SecurityGroupOwnerId and either EC2SecurityGroupName or
--- EC2SecurityGroupId. Type: String
-dbsgiEC2SecurityGroupName :: Lens' DBSecurityGroupIngress (Maybe (Val Text))
-dbsgiEC2SecurityGroupName = lens _dBSecurityGroupIngressEC2SecurityGroupName (\s a -> s { _dBSecurityGroupIngressEC2SecurityGroupName = a })
-
--- | The AWS Account Number of the owner of the EC2 security group specified
--- in the EC2SecurityGroupName parameter. The AWS Access Key ID is not an
--- acceptable value. For VPC DB security groups, use EC2SecurityGroupId. For
--- EC2 security groups, use EC2SecurityGroupOwnerId and either
--- EC2SecurityGroupName or EC2SecurityGroupId. Type: String
-dbsgiEC2SecurityGroupOwnerId :: Lens' DBSecurityGroupIngress (Maybe (Val Text))
-dbsgiEC2SecurityGroupOwnerId = lens _dBSecurityGroupIngressEC2SecurityGroupOwnerId (\s a -> s { _dBSecurityGroupIngressEC2SecurityGroupOwnerId = a })
diff --git a/library-gen/Stratosphere/Resources/DBSubnetGroup.hs b/library-gen/Stratosphere/Resources/DBSubnetGroup.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/DBSubnetGroup.hs
+++ /dev/null
@@ -1,56 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::RDS::DBSubnetGroup type creates an RDS database subnet group.
--- Subnet groups must contain at least two subnet in two different
--- Availability Zones in the same region.
-
-module Stratosphere.Resources.DBSubnetGroup where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.ResourceTag
-
--- | Full data type definition for DBSubnetGroup. See 'dbSubnetGroup' for a
--- more convenient constructor.
-data DBSubnetGroup =
-  DBSubnetGroup
-  { _dBSubnetGroupDBSubnetGroupDescription :: Val Text
-  , _dBSubnetGroupSubnetIds :: [Val Text]
-  , _dBSubnetGroupTags :: Maybe [ResourceTag]
-  } deriving (Show, Generic)
-
-instance ToJSON DBSubnetGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
-
-instance FromJSON DBSubnetGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
-
--- | Constructor for 'DBSubnetGroup' containing required fields as arguments.
-dbSubnetGroup
-  :: Val Text -- ^ 'dbsgDBSubnetGroupDescription'
-  -> [Val Text] -- ^ 'dbsgSubnetIds'
-  -> DBSubnetGroup
-dbSubnetGroup dBSubnetGroupDescriptionarg subnetIdsarg =
-  DBSubnetGroup
-  { _dBSubnetGroupDBSubnetGroupDescription = dBSubnetGroupDescriptionarg
-  , _dBSubnetGroupSubnetIds = subnetIdsarg
-  , _dBSubnetGroupTags = Nothing
-  }
-
--- | The description for the DB Subnet Group.
-dbsgDBSubnetGroupDescription :: Lens' DBSubnetGroup (Val Text)
-dbsgDBSubnetGroupDescription = lens _dBSubnetGroupDBSubnetGroupDescription (\s a -> s { _dBSubnetGroupDBSubnetGroupDescription = a })
-
--- | The EC2 Subnet IDs for the DB Subnet Group.
-dbsgSubnetIds :: Lens' DBSubnetGroup [Val Text]
-dbsgSubnetIds = lens _dBSubnetGroupSubnetIds (\s a -> s { _dBSubnetGroupSubnetIds = a })
-
--- | The tags that you want to attach to the RDS database subnet group.
-dbsgTags :: Lens' DBSubnetGroup (Maybe [ResourceTag])
-dbsgTags = lens _dBSubnetGroupTags (\s a -> s { _dBSubnetGroupTags = a })
diff --git a/library-gen/Stratosphere/Resources/DataPipelinePipeline.hs b/library-gen/Stratosphere/Resources/DataPipelinePipeline.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/DataPipelinePipeline.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datapipeline-pipeline.html
+
+module Stratosphere.Resources.DataPipelinePipeline where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.DataPipelinePipelineParameterObject
+import Stratosphere.ResourceProperties.DataPipelinePipelineParameterValue
+import Stratosphere.ResourceProperties.DataPipelinePipelinePipelineObject
+import Stratosphere.ResourceProperties.DataPipelinePipelinePipelineTag
+
+-- | Full data type definition for DataPipelinePipeline. See
+-- | 'dataPipelinePipeline' for a more convenient constructor.
+data DataPipelinePipeline =
+  DataPipelinePipeline
+  { _dataPipelinePipelineActivate :: Maybe (Val Bool')
+  , _dataPipelinePipelineDescription :: Maybe (Val Text)
+  , _dataPipelinePipelineName :: Val Text
+  , _dataPipelinePipelineParameterObjects :: [DataPipelinePipelineParameterObject]
+  , _dataPipelinePipelineParameterValues :: Maybe [DataPipelinePipelineParameterValue]
+  , _dataPipelinePipelinePipelineObjects :: Maybe [DataPipelinePipelinePipelineObject]
+  , _dataPipelinePipelinePipelineTags :: Maybe [DataPipelinePipelinePipelineTag]
+  } deriving (Show, Generic)
+
+instance ToJSON DataPipelinePipeline where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+instance FromJSON DataPipelinePipeline where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+-- | Constructor for 'DataPipelinePipeline' containing required fields as
+-- | arguments.
+dataPipelinePipeline
+  :: Val Text -- ^ 'dppName'
+  -> [DataPipelinePipelineParameterObject] -- ^ 'dppParameterObjects'
+  -> DataPipelinePipeline
+dataPipelinePipeline namearg parameterObjectsarg =
+  DataPipelinePipeline
+  { _dataPipelinePipelineActivate = Nothing
+  , _dataPipelinePipelineDescription = Nothing
+  , _dataPipelinePipelineName = namearg
+  , _dataPipelinePipelineParameterObjects = parameterObjectsarg
+  , _dataPipelinePipelineParameterValues = Nothing
+  , _dataPipelinePipelinePipelineObjects = Nothing
+  , _dataPipelinePipelinePipelineTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datapipeline-pipeline.html#cfn-datapipeline-pipeline-activate
+dppActivate :: Lens' DataPipelinePipeline (Maybe (Val Bool'))
+dppActivate = lens _dataPipelinePipelineActivate (\s a -> s { _dataPipelinePipelineActivate = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datapipeline-pipeline.html#cfn-datapipeline-pipeline-description
+dppDescription :: Lens' DataPipelinePipeline (Maybe (Val Text))
+dppDescription = lens _dataPipelinePipelineDescription (\s a -> s { _dataPipelinePipelineDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datapipeline-pipeline.html#cfn-datapipeline-pipeline-name
+dppName :: Lens' DataPipelinePipeline (Val Text)
+dppName = lens _dataPipelinePipelineName (\s a -> s { _dataPipelinePipelineName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datapipeline-pipeline.html#cfn-datapipeline-pipeline-parameterobjects
+dppParameterObjects :: Lens' DataPipelinePipeline [DataPipelinePipelineParameterObject]
+dppParameterObjects = lens _dataPipelinePipelineParameterObjects (\s a -> s { _dataPipelinePipelineParameterObjects = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datapipeline-pipeline.html#cfn-datapipeline-pipeline-parametervalues
+dppParameterValues :: Lens' DataPipelinePipeline (Maybe [DataPipelinePipelineParameterValue])
+dppParameterValues = lens _dataPipelinePipelineParameterValues (\s a -> s { _dataPipelinePipelineParameterValues = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datapipeline-pipeline.html#cfn-datapipeline-pipeline-pipelineobjects
+dppPipelineObjects :: Lens' DataPipelinePipeline (Maybe [DataPipelinePipelinePipelineObject])
+dppPipelineObjects = lens _dataPipelinePipelinePipelineObjects (\s a -> s { _dataPipelinePipelinePipelineObjects = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datapipeline-pipeline.html#cfn-datapipeline-pipeline-pipelinetags
+dppPipelineTags :: Lens' DataPipelinePipeline (Maybe [DataPipelinePipelinePipelineTag])
+dppPipelineTags = lens _dataPipelinePipelinePipelineTags (\s a -> s { _dataPipelinePipelinePipelineTags = a })
diff --git a/library-gen/Stratosphere/Resources/DeliveryStream.hs b/library-gen/Stratosphere/Resources/DeliveryStream.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/DeliveryStream.hs
+++ /dev/null
@@ -1,65 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::KinesisFirehose::DeliveryStream resource creates an Amazon
--- Kinesis Firehose (Firehose) delivery stream that delivers real-time
--- streaming data to an Amazon Simple Storage Service (Amazon S3), Amazon
--- Redshift, or Amazon Elasticsearch Service (Amazon ES) destination. For more
--- information, see Creating an Amazon Kinesis Firehose Delivery Stream in the
--- Amazon Kinesis Firehose Developer Guide.
-
-module Stratosphere.Resources.DeliveryStream where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.KinesisFirehoseElasticsearchDestinationConfiguration
-import Stratosphere.ResourceProperties.KinesisFirehoseRedshiftDestinationConfiguration
-import Stratosphere.ResourceProperties.KinesisFirehoseS3DestinationConfiguration
-
--- | Full data type definition for DeliveryStream. See 'deliveryStream' for a
--- more convenient constructor.
-data DeliveryStream =
-  DeliveryStream
-  { _deliveryStreamDeliveryStreamName :: Maybe (Val Text)
-  , _deliveryStreamElasticsearchDestinationConfiguration :: Maybe KinesisFirehoseElasticsearchDestinationConfiguration
-  , _deliveryStreamRedshiftDestinationConfiguration :: Maybe KinesisFirehoseRedshiftDestinationConfiguration
-  , _deliveryStreamS3DestinationConfiguration :: Maybe KinesisFirehoseS3DestinationConfiguration
-  } deriving (Show, Generic)
-
-instance ToJSON DeliveryStream where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
-
-instance FromJSON DeliveryStream where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
-
--- | Constructor for 'DeliveryStream' containing required fields as arguments.
-deliveryStream
-  :: DeliveryStream
-deliveryStream  =
-  DeliveryStream
-  { _deliveryStreamDeliveryStreamName = Nothing
-  , _deliveryStreamElasticsearchDestinationConfiguration = Nothing
-  , _deliveryStreamRedshiftDestinationConfiguration = Nothing
-  , _deliveryStreamS3DestinationConfiguration = Nothing
-  }
-
--- | A name for the delivery stream.
-dsDeliveryStreamName :: Lens' DeliveryStream (Maybe (Val Text))
-dsDeliveryStreamName = lens _deliveryStreamDeliveryStreamName (\s a -> s { _deliveryStreamDeliveryStreamName = a })
-
--- | An Amazon ES destination for the delivery stream.
-dsElasticsearchDestinationConfiguration :: Lens' DeliveryStream (Maybe KinesisFirehoseElasticsearchDestinationConfiguration)
-dsElasticsearchDestinationConfiguration = lens _deliveryStreamElasticsearchDestinationConfiguration (\s a -> s { _deliveryStreamElasticsearchDestinationConfiguration = a })
-
--- | An Amazon Redshift destination for the delivery stream.
-dsRedshiftDestinationConfiguration :: Lens' DeliveryStream (Maybe KinesisFirehoseRedshiftDestinationConfiguration)
-dsRedshiftDestinationConfiguration = lens _deliveryStreamRedshiftDestinationConfiguration (\s a -> s { _deliveryStreamRedshiftDestinationConfiguration = a })
-
--- | An Amazon S3 destination for the delivery stream.
-dsS3DestinationConfiguration :: Lens' DeliveryStream (Maybe KinesisFirehoseS3DestinationConfiguration)
-dsS3DestinationConfiguration = lens _deliveryStreamS3DestinationConfiguration (\s a -> s { _deliveryStreamS3DestinationConfiguration = a })
diff --git a/library-gen/Stratosphere/Resources/DirectoryServiceMicrosoftAD.hs b/library-gen/Stratosphere/Resources/DirectoryServiceMicrosoftAD.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/DirectoryServiceMicrosoftAD.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-microsoftad.html
+
+module Stratosphere.Resources.DirectoryServiceMicrosoftAD where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.DirectoryServiceMicrosoftADVpcSettings
+
+-- | Full data type definition for DirectoryServiceMicrosoftAD. See
+-- | 'directoryServiceMicrosoftAD' for a more convenient constructor.
+data DirectoryServiceMicrosoftAD =
+  DirectoryServiceMicrosoftAD
+  { _directoryServiceMicrosoftADCreateAlias :: Maybe (Val Bool')
+  , _directoryServiceMicrosoftADEnableSso :: Maybe (Val Bool')
+  , _directoryServiceMicrosoftADName :: Val Text
+  , _directoryServiceMicrosoftADPassword :: Val Text
+  , _directoryServiceMicrosoftADShortName :: Maybe (Val Text)
+  , _directoryServiceMicrosoftADVpcSettings :: DirectoryServiceMicrosoftADVpcSettings
+  } deriving (Show, Generic)
+
+instance ToJSON DirectoryServiceMicrosoftAD where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON DirectoryServiceMicrosoftAD where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'DirectoryServiceMicrosoftAD' containing required fields
+-- | as arguments.
+directoryServiceMicrosoftAD
+  :: Val Text -- ^ 'dsmadName'
+  -> Val Text -- ^ 'dsmadPassword'
+  -> DirectoryServiceMicrosoftADVpcSettings -- ^ 'dsmadVpcSettings'
+  -> DirectoryServiceMicrosoftAD
+directoryServiceMicrosoftAD namearg passwordarg vpcSettingsarg =
+  DirectoryServiceMicrosoftAD
+  { _directoryServiceMicrosoftADCreateAlias = Nothing
+  , _directoryServiceMicrosoftADEnableSso = Nothing
+  , _directoryServiceMicrosoftADName = namearg
+  , _directoryServiceMicrosoftADPassword = passwordarg
+  , _directoryServiceMicrosoftADShortName = Nothing
+  , _directoryServiceMicrosoftADVpcSettings = vpcSettingsarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-microsoftad.html#cfn-directoryservice-microsoftad-createalias
+dsmadCreateAlias :: Lens' DirectoryServiceMicrosoftAD (Maybe (Val Bool'))
+dsmadCreateAlias = lens _directoryServiceMicrosoftADCreateAlias (\s a -> s { _directoryServiceMicrosoftADCreateAlias = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-microsoftad.html#cfn-directoryservice-microsoftad-enablesso
+dsmadEnableSso :: Lens' DirectoryServiceMicrosoftAD (Maybe (Val Bool'))
+dsmadEnableSso = lens _directoryServiceMicrosoftADEnableSso (\s a -> s { _directoryServiceMicrosoftADEnableSso = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-microsoftad.html#cfn-directoryservice-microsoftad-name
+dsmadName :: Lens' DirectoryServiceMicrosoftAD (Val Text)
+dsmadName = lens _directoryServiceMicrosoftADName (\s a -> s { _directoryServiceMicrosoftADName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-microsoftad.html#cfn-directoryservice-microsoftad-password
+dsmadPassword :: Lens' DirectoryServiceMicrosoftAD (Val Text)
+dsmadPassword = lens _directoryServiceMicrosoftADPassword (\s a -> s { _directoryServiceMicrosoftADPassword = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-microsoftad.html#cfn-directoryservice-microsoftad-shortname
+dsmadShortName :: Lens' DirectoryServiceMicrosoftAD (Maybe (Val Text))
+dsmadShortName = lens _directoryServiceMicrosoftADShortName (\s a -> s { _directoryServiceMicrosoftADShortName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-microsoftad.html#cfn-directoryservice-microsoftad-vpcsettings
+dsmadVpcSettings :: Lens' DirectoryServiceMicrosoftAD DirectoryServiceMicrosoftADVpcSettings
+dsmadVpcSettings = lens _directoryServiceMicrosoftADVpcSettings (\s a -> s { _directoryServiceMicrosoftADVpcSettings = a })
diff --git a/library-gen/Stratosphere/Resources/DirectoryServiceSimpleAD.hs b/library-gen/Stratosphere/Resources/DirectoryServiceSimpleAD.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/DirectoryServiceSimpleAD.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-simplead.html
+
+module Stratosphere.Resources.DirectoryServiceSimpleAD where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.DirectoryServiceSimpleADVpcSettings
+
+-- | Full data type definition for DirectoryServiceSimpleAD. See
+-- | 'directoryServiceSimpleAD' for a more convenient constructor.
+data DirectoryServiceSimpleAD =
+  DirectoryServiceSimpleAD
+  { _directoryServiceSimpleADCreateAlias :: Maybe (Val Bool')
+  , _directoryServiceSimpleADDescription :: Maybe (Val Text)
+  , _directoryServiceSimpleADEnableSso :: Maybe (Val Bool')
+  , _directoryServiceSimpleADName :: Val Text
+  , _directoryServiceSimpleADPassword :: Val Text
+  , _directoryServiceSimpleADShortName :: Maybe (Val Text)
+  , _directoryServiceSimpleADSize :: Val Text
+  , _directoryServiceSimpleADVpcSettings :: DirectoryServiceSimpleADVpcSettings
+  } deriving (Show, Generic)
+
+instance ToJSON DirectoryServiceSimpleAD where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+instance FromJSON DirectoryServiceSimpleAD where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+-- | Constructor for 'DirectoryServiceSimpleAD' containing required fields as
+-- | arguments.
+directoryServiceSimpleAD
+  :: Val Text -- ^ 'dssadName'
+  -> Val Text -- ^ 'dssadPassword'
+  -> Val Text -- ^ 'dssadSize'
+  -> DirectoryServiceSimpleADVpcSettings -- ^ 'dssadVpcSettings'
+  -> DirectoryServiceSimpleAD
+directoryServiceSimpleAD namearg passwordarg sizearg vpcSettingsarg =
+  DirectoryServiceSimpleAD
+  { _directoryServiceSimpleADCreateAlias = Nothing
+  , _directoryServiceSimpleADDescription = Nothing
+  , _directoryServiceSimpleADEnableSso = Nothing
+  , _directoryServiceSimpleADName = namearg
+  , _directoryServiceSimpleADPassword = passwordarg
+  , _directoryServiceSimpleADShortName = Nothing
+  , _directoryServiceSimpleADSize = sizearg
+  , _directoryServiceSimpleADVpcSettings = vpcSettingsarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-simplead.html#cfn-directoryservice-simplead-createalias
+dssadCreateAlias :: Lens' DirectoryServiceSimpleAD (Maybe (Val Bool'))
+dssadCreateAlias = lens _directoryServiceSimpleADCreateAlias (\s a -> s { _directoryServiceSimpleADCreateAlias = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-simplead.html#cfn-directoryservice-simplead-description
+dssadDescription :: Lens' DirectoryServiceSimpleAD (Maybe (Val Text))
+dssadDescription = lens _directoryServiceSimpleADDescription (\s a -> s { _directoryServiceSimpleADDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-simplead.html#cfn-directoryservice-simplead-enablesso
+dssadEnableSso :: Lens' DirectoryServiceSimpleAD (Maybe (Val Bool'))
+dssadEnableSso = lens _directoryServiceSimpleADEnableSso (\s a -> s { _directoryServiceSimpleADEnableSso = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-simplead.html#cfn-directoryservice-simplead-name
+dssadName :: Lens' DirectoryServiceSimpleAD (Val Text)
+dssadName = lens _directoryServiceSimpleADName (\s a -> s { _directoryServiceSimpleADName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-simplead.html#cfn-directoryservice-simplead-password
+dssadPassword :: Lens' DirectoryServiceSimpleAD (Val Text)
+dssadPassword = lens _directoryServiceSimpleADPassword (\s a -> s { _directoryServiceSimpleADPassword = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-simplead.html#cfn-directoryservice-simplead-shortname
+dssadShortName :: Lens' DirectoryServiceSimpleAD (Maybe (Val Text))
+dssadShortName = lens _directoryServiceSimpleADShortName (\s a -> s { _directoryServiceSimpleADShortName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-simplead.html#cfn-directoryservice-simplead-size
+dssadSize :: Lens' DirectoryServiceSimpleAD (Val Text)
+dssadSize = lens _directoryServiceSimpleADSize (\s a -> s { _directoryServiceSimpleADSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-simplead.html#cfn-directoryservice-simplead-vpcsettings
+dssadVpcSettings :: Lens' DirectoryServiceSimpleAD DirectoryServiceSimpleADVpcSettings
+dssadVpcSettings = lens _directoryServiceSimpleADVpcSettings (\s a -> s { _directoryServiceSimpleADVpcSettings = a })
diff --git a/library-gen/Stratosphere/Resources/DynamoDBTable.hs b/library-gen/Stratosphere/Resources/DynamoDBTable.hs
--- a/library-gen/Stratosphere/Resources/DynamoDBTable.hs
+++ b/library-gen/Stratosphere/Resources/DynamoDBTable.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | Creates a DynamoDB table.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html
 
 module Stratosphere.Resources.DynamoDBTable where
 
@@ -12,23 +12,23 @@
 import GHC.Generics
 
 import Stratosphere.Values
-import Stratosphere.ResourceProperties.DynamoDBAttributeDefinition
-import Stratosphere.ResourceProperties.DynamoDBGlobalSecondaryIndex
-import Stratosphere.ResourceProperties.DynamoDBKeySchema
-import Stratosphere.ResourceProperties.DynamoDBLocalSecondaryIndex
-import Stratosphere.ResourceProperties.DynamoDBProvisionedThroughput
-import Stratosphere.ResourceProperties.DynamoDBStreamSpecification
+import Stratosphere.ResourceProperties.DynamoDBTableAttributeDefinition
+import Stratosphere.ResourceProperties.DynamoDBTableGlobalSecondaryIndex
+import Stratosphere.ResourceProperties.DynamoDBTableKeySchema
+import Stratosphere.ResourceProperties.DynamoDBTableLocalSecondaryIndex
+import Stratosphere.ResourceProperties.DynamoDBTableProvisionedThroughput
+import Stratosphere.ResourceProperties.DynamoDBTableStreamSpecification
 
 -- | Full data type definition for DynamoDBTable. See 'dynamoDBTable' for a
--- more convenient constructor.
+-- | more convenient constructor.
 data DynamoDBTable =
   DynamoDBTable
-  { _dynamoDBTableAttributeDefinitions :: [DynamoDBAttributeDefinition]
-  , _dynamoDBTableGlobalSecondaryIndexes :: Maybe [DynamoDBGlobalSecondaryIndex]
-  , _dynamoDBTableKeySchema :: [DynamoDBKeySchema]
-  , _dynamoDBTableLocalSecondaryIndexes :: Maybe [DynamoDBLocalSecondaryIndex]
-  , _dynamoDBTableProvisionedThroughput :: DynamoDBProvisionedThroughput
-  , _dynamoDBTableStreamSpecification :: Maybe DynamoDBStreamSpecification
+  { _dynamoDBTableAttributeDefinitions :: [DynamoDBTableAttributeDefinition]
+  , _dynamoDBTableGlobalSecondaryIndexes :: Maybe [DynamoDBTableGlobalSecondaryIndex]
+  , _dynamoDBTableKeySchema :: [DynamoDBTableKeySchema]
+  , _dynamoDBTableLocalSecondaryIndexes :: Maybe [DynamoDBTableLocalSecondaryIndex]
+  , _dynamoDBTableProvisionedThroughput :: DynamoDBTableProvisionedThroughput
+  , _dynamoDBTableStreamSpecification :: Maybe DynamoDBTableStreamSpecification
   , _dynamoDBTableTableName :: Maybe (Val Text)
   } deriving (Show, Generic)
 
@@ -40,9 +40,9 @@
 
 -- | Constructor for 'DynamoDBTable' containing required fields as arguments.
 dynamoDBTable
-  :: [DynamoDBAttributeDefinition] -- ^ 'ddbtAttributeDefinitions'
-  -> [DynamoDBKeySchema] -- ^ 'ddbtKeySchema'
-  -> DynamoDBProvisionedThroughput -- ^ 'ddbtProvisionedThroughput'
+  :: [DynamoDBTableAttributeDefinition] -- ^ 'ddbtAttributeDefinitions'
+  -> [DynamoDBTableKeySchema] -- ^ 'ddbtKeySchema'
+  -> DynamoDBTableProvisionedThroughput -- ^ 'ddbtProvisionedThroughput'
   -> DynamoDBTable
 dynamoDBTable attributeDefinitionsarg keySchemaarg provisionedThroughputarg =
   DynamoDBTable
@@ -55,54 +55,30 @@
   , _dynamoDBTableTableName = Nothing
   }
 
--- | A list of AttributeName and AttributeType objects that describe the key
--- schema for the table and indexes.
-ddbtAttributeDefinitions :: Lens' DynamoDBTable [DynamoDBAttributeDefinition]
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-attributedef
+ddbtAttributeDefinitions :: Lens' DynamoDBTable [DynamoDBTableAttributeDefinition]
 ddbtAttributeDefinitions = lens _dynamoDBTableAttributeDefinitions (\s a -> s { _dynamoDBTableAttributeDefinitions = a })
 
--- | Global secondary indexes to be created on the table. You can create up to
--- 5 global secondary indexes. Important If you update a table to include a
--- new global secondary index, AWS CloudFormation initiates the index creation
--- and then proceeds with the stack update. AWS CloudFormation doesn't wait
--- for the index to complete creation because the backfilling phase can take a
--- long time, depending on the size of the table. You cannot use the index or
--- update the table until the index's status is ACTIVE. You can track its
--- status by using the DynamoDB DescribeTable command. If you add or delete an
--- index during an update, we recommend that you don't update any other
--- resources. If your stack fails to update and is rolled back while adding a
--- new index, you must manually delete the index.
-ddbtGlobalSecondaryIndexes :: Lens' DynamoDBTable (Maybe [DynamoDBGlobalSecondaryIndex])
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-gsi
+ddbtGlobalSecondaryIndexes :: Lens' DynamoDBTable (Maybe [DynamoDBTableGlobalSecondaryIndex])
 ddbtGlobalSecondaryIndexes = lens _dynamoDBTableGlobalSecondaryIndexes (\s a -> s { _dynamoDBTableGlobalSecondaryIndexes = a })
 
--- | Specifies the attributes that make up the primary key for the table. The
--- attributes in the KeySchema property must also be defined in the
--- AttributeDefinitions property.
-ddbtKeySchema :: Lens' DynamoDBTable [DynamoDBKeySchema]
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-keyschema
+ddbtKeySchema :: Lens' DynamoDBTable [DynamoDBTableKeySchema]
 ddbtKeySchema = lens _dynamoDBTableKeySchema (\s a -> s { _dynamoDBTableKeySchema = a })
 
--- | Local secondary indexes to be created on the table. You can create up to
--- 5 local secondary indexes. Each index is scoped to a given hash key value.
--- The size of each hash key can be up to 10 gigabytes.
-ddbtLocalSecondaryIndexes :: Lens' DynamoDBTable (Maybe [DynamoDBLocalSecondaryIndex])
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-lsi
+ddbtLocalSecondaryIndexes :: Lens' DynamoDBTable (Maybe [DynamoDBTableLocalSecondaryIndex])
 ddbtLocalSecondaryIndexes = lens _dynamoDBTableLocalSecondaryIndexes (\s a -> s { _dynamoDBTableLocalSecondaryIndexes = a })
 
--- | Throughput for the specified table, consisting of values for
--- ReadCapacityUnits and WriteCapacityUnits. For more information about the
--- contents of a provisioned throughput structure, see DynamoDB Provisioned
--- Throughput.
-ddbtProvisionedThroughput :: Lens' DynamoDBTable DynamoDBProvisionedThroughput
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-provisionedthroughput
+ddbtProvisionedThroughput :: Lens' DynamoDBTable DynamoDBTableProvisionedThroughput
 ddbtProvisionedThroughput = lens _dynamoDBTableProvisionedThroughput (\s a -> s { _dynamoDBTableProvisionedThroughput = a })
 
--- | The settings for the DynamoDB table stream, which capture changes to
--- items stored in the table.
-ddbtStreamSpecification :: Lens' DynamoDBTable (Maybe DynamoDBStreamSpecification)
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-streamspecification
+ddbtStreamSpecification :: Lens' DynamoDBTable (Maybe DynamoDBTableStreamSpecification)
 ddbtStreamSpecification = lens _dynamoDBTableStreamSpecification (\s a -> s { _dynamoDBTableStreamSpecification = a })
 
--- | A name for the table. If you don't specify a name, AWS CloudFormation
--- generates a unique physical ID and uses that ID for the table name. For
--- more information, see Name Type. Important If you specify a name, you
--- cannot do updates that require this resource to be replaced. You can still
--- do updates that require no or some interruption. If you must replace the
--- resource, specify a new name.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-tablename
 ddbtTableName :: Lens' DynamoDBTable (Maybe (Val Text))
 ddbtTableName = lens _dynamoDBTableTableName (\s a -> s { _dynamoDBTableTableName = a })
diff --git a/library-gen/Stratosphere/Resources/EC2CustomerGateway.hs b/library-gen/Stratosphere/Resources/EC2CustomerGateway.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2CustomerGateway.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-customer-gateway.html
+
+module Stratosphere.Resources.EC2CustomerGateway where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2CustomerGateway. See
+-- | 'ec2CustomerGateway' for a more convenient constructor.
+data EC2CustomerGateway =
+  EC2CustomerGateway
+  { _eC2CustomerGatewayBgpAsn :: Val Integer'
+  , _eC2CustomerGatewayIpAddress :: Val Text
+  , _eC2CustomerGatewayTags :: Maybe [Tag]
+  , _eC2CustomerGatewayType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2CustomerGateway where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+instance FromJSON EC2CustomerGateway where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+-- | Constructor for 'EC2CustomerGateway' containing required fields as
+-- | arguments.
+ec2CustomerGateway
+  :: Val Integer' -- ^ 'eccgBgpAsn'
+  -> Val Text -- ^ 'eccgIpAddress'
+  -> Val Text -- ^ 'eccgType'
+  -> EC2CustomerGateway
+ec2CustomerGateway bgpAsnarg ipAddressarg typearg =
+  EC2CustomerGateway
+  { _eC2CustomerGatewayBgpAsn = bgpAsnarg
+  , _eC2CustomerGatewayIpAddress = ipAddressarg
+  , _eC2CustomerGatewayTags = Nothing
+  , _eC2CustomerGatewayType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-customer-gateway.html#cfn-ec2-customergateway-bgpasn
+eccgBgpAsn :: Lens' EC2CustomerGateway (Val Integer')
+eccgBgpAsn = lens _eC2CustomerGatewayBgpAsn (\s a -> s { _eC2CustomerGatewayBgpAsn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-customer-gateway.html#cfn-ec2-customergateway-ipaddress
+eccgIpAddress :: Lens' EC2CustomerGateway (Val Text)
+eccgIpAddress = lens _eC2CustomerGatewayIpAddress (\s a -> s { _eC2CustomerGatewayIpAddress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-customer-gateway.html#cfn-ec2-customergateway-tags
+eccgTags :: Lens' EC2CustomerGateway (Maybe [Tag])
+eccgTags = lens _eC2CustomerGatewayTags (\s a -> s { _eC2CustomerGatewayTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-customer-gateway.html#cfn-ec2-customergateway-type
+eccgType :: Lens' EC2CustomerGateway (Val Text)
+eccgType = lens _eC2CustomerGatewayType (\s a -> s { _eC2CustomerGatewayType = a })
diff --git a/library-gen/Stratosphere/Resources/EC2DHCPOptions.hs b/library-gen/Stratosphere/Resources/EC2DHCPOptions.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2DHCPOptions.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcp-options.html
+
+module Stratosphere.Resources.EC2DHCPOptions where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2DHCPOptions. See 'ec2DHCPOptions' for a
+-- | more convenient constructor.
+data EC2DHCPOptions =
+  EC2DHCPOptions
+  { _eC2DHCPOptionsDomainName :: Maybe (Val Text)
+  , _eC2DHCPOptionsDomainNameServers :: Maybe [Val Text]
+  , _eC2DHCPOptionsNetbiosNameServers :: Maybe [Val Text]
+  , _eC2DHCPOptionsNetbiosNodeType :: Maybe (Val Integer')
+  , _eC2DHCPOptionsNtpServers :: Maybe (Val Text)
+  , _eC2DHCPOptionsTags :: Maybe Tag
+  } deriving (Show, Generic)
+
+instance ToJSON EC2DHCPOptions where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+instance FromJSON EC2DHCPOptions where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+-- | Constructor for 'EC2DHCPOptions' containing required fields as arguments.
+ec2DHCPOptions
+  :: EC2DHCPOptions
+ec2DHCPOptions  =
+  EC2DHCPOptions
+  { _eC2DHCPOptionsDomainName = Nothing
+  , _eC2DHCPOptionsDomainNameServers = Nothing
+  , _eC2DHCPOptionsNetbiosNameServers = Nothing
+  , _eC2DHCPOptionsNetbiosNodeType = Nothing
+  , _eC2DHCPOptionsNtpServers = Nothing
+  , _eC2DHCPOptionsTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcp-options.html#cfn-ec2-dhcpoptions-domainname
+ecdhcpoDomainName :: Lens' EC2DHCPOptions (Maybe (Val Text))
+ecdhcpoDomainName = lens _eC2DHCPOptionsDomainName (\s a -> s { _eC2DHCPOptionsDomainName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcp-options.html#cfn-ec2-dhcpoptions-domainnameservers
+ecdhcpoDomainNameServers :: Lens' EC2DHCPOptions (Maybe [Val Text])
+ecdhcpoDomainNameServers = lens _eC2DHCPOptionsDomainNameServers (\s a -> s { _eC2DHCPOptionsDomainNameServers = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcp-options.html#cfn-ec2-dhcpoptions-netbiosnameservers
+ecdhcpoNetbiosNameServers :: Lens' EC2DHCPOptions (Maybe [Val Text])
+ecdhcpoNetbiosNameServers = lens _eC2DHCPOptionsNetbiosNameServers (\s a -> s { _eC2DHCPOptionsNetbiosNameServers = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcp-options.html#cfn-ec2-dhcpoptions-netbiosnodetype
+ecdhcpoNetbiosNodeType :: Lens' EC2DHCPOptions (Maybe (Val Integer'))
+ecdhcpoNetbiosNodeType = lens _eC2DHCPOptionsNetbiosNodeType (\s a -> s { _eC2DHCPOptionsNetbiosNodeType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcp-options.html#cfn-ec2-dhcpoptions-ntpservers
+ecdhcpoNtpServers :: Lens' EC2DHCPOptions (Maybe (Val Text))
+ecdhcpoNtpServers = lens _eC2DHCPOptionsNtpServers (\s a -> s { _eC2DHCPOptionsNtpServers = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcp-options.html#cfn-ec2-dhcpoptions-tags
+ecdhcpoTags :: Lens' EC2DHCPOptions (Maybe Tag)
+ecdhcpoTags = lens _eC2DHCPOptionsTags (\s a -> s { _eC2DHCPOptionsTags = a })
diff --git a/library-gen/Stratosphere/Resources/EC2EIP.hs b/library-gen/Stratosphere/Resources/EC2EIP.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2EIP.hs
@@ -0,0 +1,46 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip.html
+
+module Stratosphere.Resources.EC2EIP where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2EIP. See 'ec2EIP' for a more convenient
+-- | constructor.
+data EC2EIP =
+  EC2EIP
+  { _eC2EIPDomain :: Maybe (Val Text)
+  , _eC2EIPInstanceId :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2EIP where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
+
+instance FromJSON EC2EIP where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
+
+-- | Constructor for 'EC2EIP' containing required fields as arguments.
+ec2EIP
+  :: EC2EIP
+ec2EIP  =
+  EC2EIP
+  { _eC2EIPDomain = Nothing
+  , _eC2EIPInstanceId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip.html#cfn-ec2-eip-domain
+eceipDomain :: Lens' EC2EIP (Maybe (Val Text))
+eceipDomain = lens _eC2EIPDomain (\s a -> s { _eC2EIPDomain = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip.html#cfn-ec2-eip-instanceid
+eceipInstanceId :: Lens' EC2EIP (Maybe (Val Text))
+eceipInstanceId = lens _eC2EIPInstanceId (\s a -> s { _eC2EIPInstanceId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2EIPAssociation.hs b/library-gen/Stratosphere/Resources/EC2EIPAssociation.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2EIPAssociation.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip-association.html
+
+module Stratosphere.Resources.EC2EIPAssociation where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2EIPAssociation. See 'ec2EIPAssociation'
+-- | for a more convenient constructor.
+data EC2EIPAssociation =
+  EC2EIPAssociation
+  { _eC2EIPAssociationAllocationId :: Maybe (Val Text)
+  , _eC2EIPAssociationEip :: Maybe (Val Text)
+  , _eC2EIPAssociationInstanceId :: Maybe (Val Text)
+  , _eC2EIPAssociationNetworkInterfaceId :: Maybe (Val Text)
+  , _eC2EIPAssociationPrivateIpAddress :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2EIPAssociation where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+
+instance FromJSON EC2EIPAssociation where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+
+-- | Constructor for 'EC2EIPAssociation' containing required fields as
+-- | arguments.
+ec2EIPAssociation
+  :: EC2EIPAssociation
+ec2EIPAssociation  =
+  EC2EIPAssociation
+  { _eC2EIPAssociationAllocationId = Nothing
+  , _eC2EIPAssociationEip = Nothing
+  , _eC2EIPAssociationInstanceId = Nothing
+  , _eC2EIPAssociationNetworkInterfaceId = Nothing
+  , _eC2EIPAssociationPrivateIpAddress = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip-association.html#cfn-ec2-eipassociation-allocationid
+eceipaAllocationId :: Lens' EC2EIPAssociation (Maybe (Val Text))
+eceipaAllocationId = lens _eC2EIPAssociationAllocationId (\s a -> s { _eC2EIPAssociationAllocationId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip-association.html#cfn-ec2-eipassociation-eip
+eceipaEip :: Lens' EC2EIPAssociation (Maybe (Val Text))
+eceipaEip = lens _eC2EIPAssociationEip (\s a -> s { _eC2EIPAssociationEip = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip-association.html#cfn-ec2-eipassociation-instanceid
+eceipaInstanceId :: Lens' EC2EIPAssociation (Maybe (Val Text))
+eceipaInstanceId = lens _eC2EIPAssociationInstanceId (\s a -> s { _eC2EIPAssociationInstanceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip-association.html#cfn-ec2-eipassociation-networkinterfaceid
+eceipaNetworkInterfaceId :: Lens' EC2EIPAssociation (Maybe (Val Text))
+eceipaNetworkInterfaceId = lens _eC2EIPAssociationNetworkInterfaceId (\s a -> s { _eC2EIPAssociationNetworkInterfaceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip-association.html#cfn-ec2-eipassociation-PrivateIpAddress
+eceipaPrivateIpAddress :: Lens' EC2EIPAssociation (Maybe (Val Text))
+eceipaPrivateIpAddress = lens _eC2EIPAssociationPrivateIpAddress (\s a -> s { _eC2EIPAssociationPrivateIpAddress = a })
diff --git a/library-gen/Stratosphere/Resources/EC2FlowLog.hs b/library-gen/Stratosphere/Resources/EC2FlowLog.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2FlowLog.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html
+
+module Stratosphere.Resources.EC2FlowLog where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2FlowLog. See 'ec2FlowLog' for a more
+-- | convenient constructor.
+data EC2FlowLog =
+  EC2FlowLog
+  { _eC2FlowLogDeliverLogsPermissionArn :: Val Text
+  , _eC2FlowLogLogGroupName :: Val Text
+  , _eC2FlowLogResourceId :: Val Text
+  , _eC2FlowLogResourceType :: Val Text
+  , _eC2FlowLogTrafficType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2FlowLog where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+
+instance FromJSON EC2FlowLog where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+
+-- | Constructor for 'EC2FlowLog' containing required fields as arguments.
+ec2FlowLog
+  :: Val Text -- ^ 'ecflDeliverLogsPermissionArn'
+  -> Val Text -- ^ 'ecflLogGroupName'
+  -> Val Text -- ^ 'ecflResourceId'
+  -> Val Text -- ^ 'ecflResourceType'
+  -> Val Text -- ^ 'ecflTrafficType'
+  -> EC2FlowLog
+ec2FlowLog deliverLogsPermissionArnarg logGroupNamearg resourceIdarg resourceTypearg trafficTypearg =
+  EC2FlowLog
+  { _eC2FlowLogDeliverLogsPermissionArn = deliverLogsPermissionArnarg
+  , _eC2FlowLogLogGroupName = logGroupNamearg
+  , _eC2FlowLogResourceId = resourceIdarg
+  , _eC2FlowLogResourceType = resourceTypearg
+  , _eC2FlowLogTrafficType = trafficTypearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-deliverlogspermissionarn
+ecflDeliverLogsPermissionArn :: Lens' EC2FlowLog (Val Text)
+ecflDeliverLogsPermissionArn = lens _eC2FlowLogDeliverLogsPermissionArn (\s a -> s { _eC2FlowLogDeliverLogsPermissionArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-loggroupname
+ecflLogGroupName :: Lens' EC2FlowLog (Val Text)
+ecflLogGroupName = lens _eC2FlowLogLogGroupName (\s a -> s { _eC2FlowLogLogGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-resourceid
+ecflResourceId :: Lens' EC2FlowLog (Val Text)
+ecflResourceId = lens _eC2FlowLogResourceId (\s a -> s { _eC2FlowLogResourceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-resourcetype
+ecflResourceType :: Lens' EC2FlowLog (Val Text)
+ecflResourceType = lens _eC2FlowLogResourceType (\s a -> s { _eC2FlowLogResourceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-traffictype
+ecflTrafficType :: Lens' EC2FlowLog (Val Text)
+ecflTrafficType = lens _eC2FlowLogTrafficType (\s a -> s { _eC2FlowLogTrafficType = a })
diff --git a/library-gen/Stratosphere/Resources/EC2Host.hs b/library-gen/Stratosphere/Resources/EC2Host.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2Host.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-host.html
+
+module Stratosphere.Resources.EC2Host where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2Host. See 'ec2Host' for a more
+-- | convenient constructor.
+data EC2Host =
+  EC2Host
+  { _eC2HostAutoPlacement :: Maybe (Val Text)
+  , _eC2HostAvailabilityZone :: Val Text
+  , _eC2HostInstanceType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2Host where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+
+instance FromJSON EC2Host where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+
+-- | Constructor for 'EC2Host' containing required fields as arguments.
+ec2Host
+  :: Val Text -- ^ 'echAvailabilityZone'
+  -> Val Text -- ^ 'echInstanceType'
+  -> EC2Host
+ec2Host availabilityZonearg instanceTypearg =
+  EC2Host
+  { _eC2HostAutoPlacement = Nothing
+  , _eC2HostAvailabilityZone = availabilityZonearg
+  , _eC2HostInstanceType = instanceTypearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-host.html#cfn-ec2-host-autoplacement
+echAutoPlacement :: Lens' EC2Host (Maybe (Val Text))
+echAutoPlacement = lens _eC2HostAutoPlacement (\s a -> s { _eC2HostAutoPlacement = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-host.html#cfn-ec2-host-availabilityzone
+echAvailabilityZone :: Lens' EC2Host (Val Text)
+echAvailabilityZone = lens _eC2HostAvailabilityZone (\s a -> s { _eC2HostAvailabilityZone = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-host.html#cfn-ec2-host-instancetype
+echInstanceType :: Lens' EC2Host (Val Text)
+echInstanceType = lens _eC2HostInstanceType (\s a -> s { _eC2HostInstanceType = a })
diff --git a/library-gen/Stratosphere/Resources/EC2Instance.hs b/library-gen/Stratosphere/Resources/EC2Instance.hs
--- a/library-gen/Stratosphere/Resources/EC2Instance.hs
+++ b/library-gen/Stratosphere/Resources/EC2Instance.hs
@@ -1,10 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::EC2::Instance type creates an Amazon EC2 instance. If an Elastic
--- IP address is attached to your instance, AWS CloudFormation reattaches the
--- Elastic IP address after it updates the instance. For more information
--- about updating stacks, see AWS CloudFormation Stacks Updates.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html
 
 module Stratosphere.Resources.EC2Instance where
 
@@ -15,41 +12,46 @@
 import GHC.Generics
 
 import Stratosphere.Values
-import Stratosphere.ResourceProperties.EC2BlockDeviceMapping
-import Stratosphere.ResourceProperties.NetworkInterface
-import Stratosphere.ResourceProperties.EC2SsmAssociations
-import Stratosphere.ResourceProperties.ResourceTag
-import Stratosphere.ResourceProperties.EC2MountPoint
+import Stratosphere.ResourceProperties.EC2InstanceBlockDeviceMapping
+import Stratosphere.ResourceProperties.EC2InstanceInstanceIpv6Address
+import Stratosphere.ResourceProperties.EC2InstanceNetworkInterface
+import Stratosphere.ResourceProperties.EC2InstanceSsmAssociation
+import Stratosphere.ResourceProperties.Tag
+import Stratosphere.ResourceProperties.EC2InstanceVolume
 
 -- | Full data type definition for EC2Instance. See 'ec2Instance' for a more
--- convenient constructor.
+-- | convenient constructor.
 data EC2Instance =
   EC2Instance
-  { _eC2InstanceAvailabilityZone :: Maybe (Val Text)
-  , _eC2InstanceBlockDeviceMappings :: Maybe [EC2BlockDeviceMapping]
+  { _eC2InstanceAdditionalInfo :: Maybe (Val Text)
+  , _eC2InstanceAffinity :: Maybe (Val Text)
+  , _eC2InstanceAvailabilityZone :: Maybe (Val Text)
+  , _eC2InstanceBlockDeviceMappings :: Maybe [EC2InstanceBlockDeviceMapping]
   , _eC2InstanceDisableApiTermination :: Maybe (Val Bool')
   , _eC2InstanceEbsOptimized :: Maybe (Val Bool')
+  , _eC2InstanceHostId :: Maybe (Val Text)
   , _eC2InstanceIamInstanceProfile :: Maybe (Val Text)
   , _eC2InstanceImageId :: Val Text
   , _eC2InstanceInstanceInitiatedShutdownBehavior :: Maybe (Val Text)
   , _eC2InstanceInstanceType :: Maybe (Val Text)
+  , _eC2InstanceIpv6AddressCount :: Maybe (Val Integer')
+  , _eC2InstanceIpv6Addresses :: Maybe [EC2InstanceInstanceIpv6Address]
   , _eC2InstanceKernelId :: Maybe (Val Text)
   , _eC2InstanceKeyName :: Maybe (Val Text)
   , _eC2InstanceMonitoring :: Maybe (Val Bool')
-  , _eC2InstanceNetworkInterfaces :: Maybe [NetworkInterface]
+  , _eC2InstanceNetworkInterfaces :: Maybe [EC2InstanceNetworkInterface]
   , _eC2InstancePlacementGroupName :: Maybe (Val Text)
   , _eC2InstancePrivateIpAddress :: Maybe (Val Text)
   , _eC2InstanceRamdiskId :: Maybe (Val Text)
   , _eC2InstanceSecurityGroupIds :: Maybe [Val Text]
   , _eC2InstanceSecurityGroups :: Maybe [Val Text]
   , _eC2InstanceSourceDestCheck :: Maybe (Val Bool')
-  , _eC2InstanceSsmAssociations :: Maybe [EC2SsmAssociations]
+  , _eC2InstanceSsmAssociations :: Maybe [EC2InstanceSsmAssociation]
   , _eC2InstanceSubnetId :: Maybe (Val Text)
-  , _eC2InstanceTags :: Maybe [ResourceTag]
+  , _eC2InstanceTags :: Maybe [Tag]
   , _eC2InstanceTenancy :: Maybe (Val Text)
   , _eC2InstanceUserData :: Maybe (Val Text)
-  , _eC2InstanceVolumes :: Maybe [EC2MountPoint]
-  , _eC2InstanceAdditionalInfo :: Maybe (Val Text)
+  , _eC2InstanceVolumes :: Maybe [EC2InstanceVolume]
   } deriving (Show, Generic)
 
 instance ToJSON EC2Instance where
@@ -64,14 +66,19 @@
   -> EC2Instance
 ec2Instance imageIdarg =
   EC2Instance
-  { _eC2InstanceAvailabilityZone = Nothing
+  { _eC2InstanceAdditionalInfo = Nothing
+  , _eC2InstanceAffinity = Nothing
+  , _eC2InstanceAvailabilityZone = Nothing
   , _eC2InstanceBlockDeviceMappings = Nothing
   , _eC2InstanceDisableApiTermination = Nothing
   , _eC2InstanceEbsOptimized = Nothing
+  , _eC2InstanceHostId = Nothing
   , _eC2InstanceIamInstanceProfile = Nothing
   , _eC2InstanceImageId = imageIdarg
   , _eC2InstanceInstanceInitiatedShutdownBehavior = Nothing
   , _eC2InstanceInstanceType = Nothing
+  , _eC2InstanceIpv6AddressCount = Nothing
+  , _eC2InstanceIpv6Addresses = Nothing
   , _eC2InstanceKernelId = Nothing
   , _eC2InstanceKeyName = Nothing
   , _eC2InstanceMonitoring = Nothing
@@ -88,166 +95,120 @@
   , _eC2InstanceTenancy = Nothing
   , _eC2InstanceUserData = Nothing
   , _eC2InstanceVolumes = Nothing
-  , _eC2InstanceAdditionalInfo = Nothing
   }
 
--- | Specifies the name of the Availability Zone in which the instance is
--- located. For more information about AWS regions and Availability Zones, see
--- Regions and Availability Zones in the Amazon EC2 User Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-additionalinfo
+eciAdditionalInfo :: Lens' EC2Instance (Maybe (Val Text))
+eciAdditionalInfo = lens _eC2InstanceAdditionalInfo (\s a -> s { _eC2InstanceAdditionalInfo = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-affinity
+eciAffinity :: Lens' EC2Instance (Maybe (Val Text))
+eciAffinity = lens _eC2InstanceAffinity (\s a -> s { _eC2InstanceAffinity = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-availabilityzone
 eciAvailabilityZone :: Lens' EC2Instance (Maybe (Val Text))
 eciAvailabilityZone = lens _eC2InstanceAvailabilityZone (\s a -> s { _eC2InstanceAvailabilityZone = a })
 
--- | Defines a set of Amazon Elastic Block Store block device mappings,
--- ephemeral instance store block device mappings, or both. For more
--- information, see Amazon Elastic Block Store or Amazon EC2 Instance Store in
--- the Amazon EC2 User Guide for Linux Instances.
-eciBlockDeviceMappings :: Lens' EC2Instance (Maybe [EC2BlockDeviceMapping])
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-blockdevicemappings
+eciBlockDeviceMappings :: Lens' EC2Instance (Maybe [EC2InstanceBlockDeviceMapping])
 eciBlockDeviceMappings = lens _eC2InstanceBlockDeviceMappings (\s a -> s { _eC2InstanceBlockDeviceMappings = a })
 
--- | Specifies whether the instance can be terminated through the API.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-disableapitermination
 eciDisableApiTermination :: Lens' EC2Instance (Maybe (Val Bool'))
 eciDisableApiTermination = lens _eC2InstanceDisableApiTermination (\s a -> s { _eC2InstanceDisableApiTermination = a })
 
--- | Specifies whether the instance is optimized for Amazon Elastic Block
--- Store I/O. This optimization provides dedicated throughput to Amazon EBS
--- and an optimized configuration stack to provide optimal EBS I/O
--- performance. For more information about the instance types that can be
--- launched as Amazon EBS optimized instances, see Amazon EBS-Optimized
--- Instances in the Amazon Elastic Compute Cloud User Guide. Additional fees
--- are incurred when using Amazon EBS-optimized instances.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-ebsoptimized
 eciEbsOptimized :: Lens' EC2Instance (Maybe (Val Bool'))
 eciEbsOptimized = lens _eC2InstanceEbsOptimized (\s a -> s { _eC2InstanceEbsOptimized = a })
 
--- | The physical ID (resource name) of an instance profile or a reference to
--- an AWS::IAM::InstanceProfile resource. For more information about IAM
--- roles, see Working with Roles in the AWS Identity and Access Management
--- User Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-hostid
+eciHostId :: Lens' EC2Instance (Maybe (Val Text))
+eciHostId = lens _eC2InstanceHostId (\s a -> s { _eC2InstanceHostId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-iaminstanceprofile
 eciIamInstanceProfile :: Lens' EC2Instance (Maybe (Val Text))
 eciIamInstanceProfile = lens _eC2InstanceIamInstanceProfile (\s a -> s { _eC2InstanceIamInstanceProfile = a })
 
--- | Provides the unique ID of the Amazon Machine Image (AMI) that was
--- assigned during registration.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-imageid
 eciImageId :: Lens' EC2Instance (Val Text)
 eciImageId = lens _eC2InstanceImageId (\s a -> s { _eC2InstanceImageId = a })
 
--- | Indicates whether an instance stops or terminates when you shut down the
--- instance from the instance's operating system shutdown command. You can
--- specify stop or terminate. For more information, see the RunInstances
--- command in the Amazon EC2 API Reference.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-instanceinitiatedshutdownbehavior
 eciInstanceInitiatedShutdownBehavior :: Lens' EC2Instance (Maybe (Val Text))
 eciInstanceInitiatedShutdownBehavior = lens _eC2InstanceInstanceInitiatedShutdownBehavior (\s a -> s { _eC2InstanceInstanceInitiatedShutdownBehavior = a })
 
--- | The instance type, such as t2.micro. The default type is "m1.small". For
--- a list of instance types, see Instance Families and Types.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-instancetype
 eciInstanceType :: Lens' EC2Instance (Maybe (Val Text))
 eciInstanceType = lens _eC2InstanceInstanceType (\s a -> s { _eC2InstanceInstanceType = a })
 
--- | The kernel ID.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-ipv6addresscount
+eciIpv6AddressCount :: Lens' EC2Instance (Maybe (Val Integer'))
+eciIpv6AddressCount = lens _eC2InstanceIpv6AddressCount (\s a -> s { _eC2InstanceIpv6AddressCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-ipv6addresses
+eciIpv6Addresses :: Lens' EC2Instance (Maybe [EC2InstanceInstanceIpv6Address])
+eciIpv6Addresses = lens _eC2InstanceIpv6Addresses (\s a -> s { _eC2InstanceIpv6Addresses = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-kernelid
 eciKernelId :: Lens' EC2Instance (Maybe (Val Text))
 eciKernelId = lens _eC2InstanceKernelId (\s a -> s { _eC2InstanceKernelId = a })
 
--- | Provides the name of the Amazon EC2 key pair.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-keyname
 eciKeyName :: Lens' EC2Instance (Maybe (Val Text))
 eciKeyName = lens _eC2InstanceKeyName (\s a -> s { _eC2InstanceKeyName = a })
 
--- | Specifies whether monitoring is enabled for the instance.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-monitoring
 eciMonitoring :: Lens' EC2Instance (Maybe (Val Bool'))
 eciMonitoring = lens _eC2InstanceMonitoring (\s a -> s { _eC2InstanceMonitoring = a })
 
--- | A list of embedded objects that describe the network interfaces to
--- associate with this instance. Note If this resource has a public IP address
--- and is also in a VPC that is defined in the same template, you must use the
--- DependsOn attribute to declare a dependency on the VPC-gateway attachment.
--- For more information, see DependsOn Attribute.
-eciNetworkInterfaces :: Lens' EC2Instance (Maybe [NetworkInterface])
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-networkinterfaces
+eciNetworkInterfaces :: Lens' EC2Instance (Maybe [EC2InstanceNetworkInterface])
 eciNetworkInterfaces = lens _eC2InstanceNetworkInterfaces (\s a -> s { _eC2InstanceNetworkInterfaces = a })
 
--- | The name of an existing placement group that you want to launch the
--- instance into (for cluster instances).
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-placementgroupname
 eciPlacementGroupName :: Lens' EC2Instance (Maybe (Val Text))
 eciPlacementGroupName = lens _eC2InstancePlacementGroupName (\s a -> s { _eC2InstancePlacementGroupName = a })
 
--- | The private IP address for this instance. Important If you make an update
--- to an instance that requires replacement, you must assign a new private IP
--- address. During a replacement, AWS CloudFormation creates a new instance
--- but doesn't delete the old instance until the stack has successfully
--- updated. If the stack update fails, AWS CloudFormation uses the old
--- instance in order to roll back the stack to the previous working state. The
--- old and new instances cannot have the same private IP address. (Optional)
--- If you're using Amazon VPC, you can use this parameter to assign the
--- instance a specific available IP address from the subnet (for example,
--- 10.0.0.25). By default, Amazon VPC selects an IP address from the subnet
--- for the instance.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-privateipaddress
 eciPrivateIpAddress :: Lens' EC2Instance (Maybe (Val Text))
 eciPrivateIpAddress = lens _eC2InstancePrivateIpAddress (\s a -> s { _eC2InstancePrivateIpAddress = a })
 
--- | The ID of the RAM disk to select. Some kernels require additional drivers
--- at launch. Check the kernel requirements for information about whether you
--- need to specify a RAM disk. To find kernel requirements, go to the AWS
--- Resource Center and search for the kernel ID.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-ramdiskid
 eciRamdiskId :: Lens' EC2Instance (Maybe (Val Text))
 eciRamdiskId = lens _eC2InstanceRamdiskId (\s a -> s { _eC2InstanceRamdiskId = a })
 
--- | A list that contains the security group IDs for VPC security groups to
--- assign to the Amazon EC2 instance. If you specified the NetworkInterfaces
--- property, do not specify this property.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-securitygroupids
 eciSecurityGroupIds :: Lens' EC2Instance (Maybe [Val Text])
 eciSecurityGroupIds = lens _eC2InstanceSecurityGroupIds (\s a -> s { _eC2InstanceSecurityGroupIds = a })
 
--- | Valid only for Amazon EC2 security groups. A list that contains the
--- Amazon EC2 security groups to assign to the Amazon EC2 instance. The list
--- can contain both the name of existing Amazon EC2 security groups or
--- references to AWS::EC2::SecurityGroup resources created in the template.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-securitygroups
 eciSecurityGroups :: Lens' EC2Instance (Maybe [Val Text])
 eciSecurityGroups = lens _eC2InstanceSecurityGroups (\s a -> s { _eC2InstanceSecurityGroups = a })
 
--- | Controls whether source/destination checking is enabled on the instance.
--- Also determines if an instance in a VPC will perform network address
--- translation (NAT). A value of "true" means that source/destination checking
--- is enabled, and a value of "false" means that checking is disabled. For the
--- instance to perform NAT, the value must be "false". For more information,
--- see NAT Instances in the Amazon Virtual Private Cloud User Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-sourcedestcheck
 eciSourceDestCheck :: Lens' EC2Instance (Maybe (Val Bool'))
 eciSourceDestCheck = lens _eC2InstanceSourceDestCheck (\s a -> s { _eC2InstanceSourceDestCheck = a })
 
--- | The Amazon EC2 Simple Systems Manager (SSM) document and parameter values
--- to associate with this instance. To use this property, you must specify an
--- IAM role for the instance. For more information, see Prerequisites for
--- Remotely Running Commands on EC2 Instances in the Amazon EC2 User Guide for
--- Microsoft Windows Instances. Note You can currently associate only one
--- document with an instance.
-eciSsmAssociations :: Lens' EC2Instance (Maybe [EC2SsmAssociations])
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-ssmassociations
+eciSsmAssociations :: Lens' EC2Instance (Maybe [EC2InstanceSsmAssociation])
 eciSsmAssociations = lens _eC2InstanceSsmAssociations (\s a -> s { _eC2InstanceSsmAssociations = a })
 
--- | If you're using Amazon VPC, this property specifies the ID of the subnet
--- that you want to launch the instance into. If you specified the
--- NetworkInterfaces property, do not specify this property.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-subnetid
 eciSubnetId :: Lens' EC2Instance (Maybe (Val Text))
 eciSubnetId = lens _eC2InstanceSubnetId (\s a -> s { _eC2InstanceSubnetId = a })
 
--- | An arbitrary set of tags (key–value pairs) for this instance.
-eciTags :: Lens' EC2Instance (Maybe [ResourceTag])
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-tags
+eciTags :: Lens' EC2Instance (Maybe [Tag])
 eciTags = lens _eC2InstanceTags (\s a -> s { _eC2InstanceTags = a })
 
--- | The tenancy of the instance that you want to launch. This value can be
--- either "default" or "dedicated". An instance that has a tenancy value of
--- "dedicated" runs on single-tenant hardware and can be launched only into a
--- VPC. For more information, see Using EC2 Dedicated Instances Within Your
--- VPC in the Amazon VPC User Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-tenancy
 eciTenancy :: Lens' EC2Instance (Maybe (Val Text))
 eciTenancy = lens _eC2InstanceTenancy (\s a -> s { _eC2InstanceTenancy = a })
 
--- | Base64-encoded MIME user data that is made available to the instances.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-userdata
 eciUserData :: Lens' EC2Instance (Maybe (Val Text))
 eciUserData = lens _eC2InstanceUserData (\s a -> s { _eC2InstanceUserData = a })
 
--- | The Amazon EBS volumes to attach to the instance. Note Before detaching a
--- volume, unmount any file systems on the device within your operating
--- system. If you don't unmount the file system, a volume might get stuck in a
--- busy state while detaching.
-eciVolumes :: Lens' EC2Instance (Maybe [EC2MountPoint])
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-volumes
+eciVolumes :: Lens' EC2Instance (Maybe [EC2InstanceVolume])
 eciVolumes = lens _eC2InstanceVolumes (\s a -> s { _eC2InstanceVolumes = a })
-
--- | Reserved.
-eciAdditionalInfo :: Lens' EC2Instance (Maybe (Val Text))
-eciAdditionalInfo = lens _eC2InstanceAdditionalInfo (\s a -> s { _eC2InstanceAdditionalInfo = a })
diff --git a/library-gen/Stratosphere/Resources/EC2InternetGateway.hs b/library-gen/Stratosphere/Resources/EC2InternetGateway.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2InternetGateway.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-internet-gateway.html
+
+module Stratosphere.Resources.EC2InternetGateway where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2InternetGateway. See
+-- | 'ec2InternetGateway' for a more convenient constructor.
+data EC2InternetGateway =
+  EC2InternetGateway
+  { _eC2InternetGatewayTags :: Maybe [Tag]
+  } deriving (Show, Generic)
+
+instance ToJSON EC2InternetGateway where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+instance FromJSON EC2InternetGateway where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+-- | Constructor for 'EC2InternetGateway' containing required fields as
+-- | arguments.
+ec2InternetGateway
+  :: EC2InternetGateway
+ec2InternetGateway  =
+  EC2InternetGateway
+  { _eC2InternetGatewayTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-internet-gateway.html#cfn-ec2-internetgateway-tags
+ecigTags :: Lens' EC2InternetGateway (Maybe [Tag])
+ecigTags = lens _eC2InternetGatewayTags (\s a -> s { _eC2InternetGatewayTags = a })
diff --git a/library-gen/Stratosphere/Resources/EC2NatGateway.hs b/library-gen/Stratosphere/Resources/EC2NatGateway.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2NatGateway.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html
+
+module Stratosphere.Resources.EC2NatGateway where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2NatGateway. See 'ec2NatGateway' for a
+-- | more convenient constructor.
+data EC2NatGateway =
+  EC2NatGateway
+  { _eC2NatGatewayAllocationId :: Val Text
+  , _eC2NatGatewaySubnetId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2NatGateway where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+instance FromJSON EC2NatGateway where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+-- | Constructor for 'EC2NatGateway' containing required fields as arguments.
+ec2NatGateway
+  :: Val Text -- ^ 'ecngAllocationId'
+  -> Val Text -- ^ 'ecngSubnetId'
+  -> EC2NatGateway
+ec2NatGateway allocationIdarg subnetIdarg =
+  EC2NatGateway
+  { _eC2NatGatewayAllocationId = allocationIdarg
+  , _eC2NatGatewaySubnetId = subnetIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html#cfn-ec2-natgateway-allocationid
+ecngAllocationId :: Lens' EC2NatGateway (Val Text)
+ecngAllocationId = lens _eC2NatGatewayAllocationId (\s a -> s { _eC2NatGatewayAllocationId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html#cfn-ec2-natgateway-subnetid
+ecngSubnetId :: Lens' EC2NatGateway (Val Text)
+ecngSubnetId = lens _eC2NatGatewaySubnetId (\s a -> s { _eC2NatGatewaySubnetId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2NetworkAcl.hs b/library-gen/Stratosphere/Resources/EC2NetworkAcl.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2NetworkAcl.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl.html
+
+module Stratosphere.Resources.EC2NetworkAcl where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2NetworkAcl. See 'ec2NetworkAcl' for a
+-- | more convenient constructor.
+data EC2NetworkAcl =
+  EC2NetworkAcl
+  { _eC2NetworkAclTags :: Maybe [Tag]
+  , _eC2NetworkAclVpcId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2NetworkAcl where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+instance FromJSON EC2NetworkAcl where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+-- | Constructor for 'EC2NetworkAcl' containing required fields as arguments.
+ec2NetworkAcl
+  :: Val Text -- ^ 'ecnaVpcId'
+  -> EC2NetworkAcl
+ec2NetworkAcl vpcIdarg =
+  EC2NetworkAcl
+  { _eC2NetworkAclTags = Nothing
+  , _eC2NetworkAclVpcId = vpcIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl.html#cfn-ec2-networkacl-tags
+ecnaTags :: Lens' EC2NetworkAcl (Maybe [Tag])
+ecnaTags = lens _eC2NetworkAclTags (\s a -> s { _eC2NetworkAclTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl.html#cfn-ec2-networkacl-vpcid
+ecnaVpcId :: Lens' EC2NetworkAcl (Val Text)
+ecnaVpcId = lens _eC2NetworkAclVpcId (\s a -> s { _eC2NetworkAclVpcId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2NetworkAclEntry.hs b/library-gen/Stratosphere/Resources/EC2NetworkAclEntry.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2NetworkAclEntry.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html
+
+module Stratosphere.Resources.EC2NetworkAclEntry where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EC2NetworkAclEntryIcmp
+import Stratosphere.ResourceProperties.EC2NetworkAclEntryPortRange
+
+-- | Full data type definition for EC2NetworkAclEntry. See
+-- | 'ec2NetworkAclEntry' for a more convenient constructor.
+data EC2NetworkAclEntry =
+  EC2NetworkAclEntry
+  { _eC2NetworkAclEntryCidrBlock :: Val Text
+  , _eC2NetworkAclEntryEgress :: Maybe (Val Bool')
+  , _eC2NetworkAclEntryIcmp :: Maybe EC2NetworkAclEntryIcmp
+  , _eC2NetworkAclEntryIpv6CidrBlock :: Maybe (Val Text)
+  , _eC2NetworkAclEntryNetworkAclId :: Val Text
+  , _eC2NetworkAclEntryPortRange :: Maybe EC2NetworkAclEntryPortRange
+  , _eC2NetworkAclEntryProtocol :: Val Integer'
+  , _eC2NetworkAclEntryRuleAction :: Val Text
+  , _eC2NetworkAclEntryRuleNumber :: Val Integer'
+  } deriving (Show, Generic)
+
+instance ToJSON EC2NetworkAclEntry where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+instance FromJSON EC2NetworkAclEntry where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+-- | Constructor for 'EC2NetworkAclEntry' containing required fields as
+-- | arguments.
+ec2NetworkAclEntry
+  :: Val Text -- ^ 'ecnaeCidrBlock'
+  -> Val Text -- ^ 'ecnaeNetworkAclId'
+  -> Val Integer' -- ^ 'ecnaeProtocol'
+  -> Val Text -- ^ 'ecnaeRuleAction'
+  -> Val Integer' -- ^ 'ecnaeRuleNumber'
+  -> EC2NetworkAclEntry
+ec2NetworkAclEntry cidrBlockarg networkAclIdarg protocolarg ruleActionarg ruleNumberarg =
+  EC2NetworkAclEntry
+  { _eC2NetworkAclEntryCidrBlock = cidrBlockarg
+  , _eC2NetworkAclEntryEgress = Nothing
+  , _eC2NetworkAclEntryIcmp = Nothing
+  , _eC2NetworkAclEntryIpv6CidrBlock = Nothing
+  , _eC2NetworkAclEntryNetworkAclId = networkAclIdarg
+  , _eC2NetworkAclEntryPortRange = Nothing
+  , _eC2NetworkAclEntryProtocol = protocolarg
+  , _eC2NetworkAclEntryRuleAction = ruleActionarg
+  , _eC2NetworkAclEntryRuleNumber = ruleNumberarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-cidrblock
+ecnaeCidrBlock :: Lens' EC2NetworkAclEntry (Val Text)
+ecnaeCidrBlock = lens _eC2NetworkAclEntryCidrBlock (\s a -> s { _eC2NetworkAclEntryCidrBlock = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-egress
+ecnaeEgress :: Lens' EC2NetworkAclEntry (Maybe (Val Bool'))
+ecnaeEgress = lens _eC2NetworkAclEntryEgress (\s a -> s { _eC2NetworkAclEntryEgress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-icmp
+ecnaeIcmp :: Lens' EC2NetworkAclEntry (Maybe EC2NetworkAclEntryIcmp)
+ecnaeIcmp = lens _eC2NetworkAclEntryIcmp (\s a -> s { _eC2NetworkAclEntryIcmp = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-ipv6cidrblock
+ecnaeIpv6CidrBlock :: Lens' EC2NetworkAclEntry (Maybe (Val Text))
+ecnaeIpv6CidrBlock = lens _eC2NetworkAclEntryIpv6CidrBlock (\s a -> s { _eC2NetworkAclEntryIpv6CidrBlock = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-networkaclid
+ecnaeNetworkAclId :: Lens' EC2NetworkAclEntry (Val Text)
+ecnaeNetworkAclId = lens _eC2NetworkAclEntryNetworkAclId (\s a -> s { _eC2NetworkAclEntryNetworkAclId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-portrange
+ecnaePortRange :: Lens' EC2NetworkAclEntry (Maybe EC2NetworkAclEntryPortRange)
+ecnaePortRange = lens _eC2NetworkAclEntryPortRange (\s a -> s { _eC2NetworkAclEntryPortRange = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-protocol
+ecnaeProtocol :: Lens' EC2NetworkAclEntry (Val Integer')
+ecnaeProtocol = lens _eC2NetworkAclEntryProtocol (\s a -> s { _eC2NetworkAclEntryProtocol = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-ruleaction
+ecnaeRuleAction :: Lens' EC2NetworkAclEntry (Val Text)
+ecnaeRuleAction = lens _eC2NetworkAclEntryRuleAction (\s a -> s { _eC2NetworkAclEntryRuleAction = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-rulenumber
+ecnaeRuleNumber :: Lens' EC2NetworkAclEntry (Val Integer')
+ecnaeRuleNumber = lens _eC2NetworkAclEntryRuleNumber (\s a -> s { _eC2NetworkAclEntryRuleNumber = a })
diff --git a/library-gen/Stratosphere/Resources/EC2NetworkInterface.hs b/library-gen/Stratosphere/Resources/EC2NetworkInterface.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2NetworkInterface.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface.html
+
+module Stratosphere.Resources.EC2NetworkInterface where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EC2NetworkInterfaceInstanceIpv6Address
+import Stratosphere.ResourceProperties.EC2NetworkInterfacePrivateIpAddressSpecification
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2NetworkInterface. See
+-- | 'ec2NetworkInterface' for a more convenient constructor.
+data EC2NetworkInterface =
+  EC2NetworkInterface
+  { _eC2NetworkInterfaceDescription :: Maybe (Val Text)
+  , _eC2NetworkInterfaceGroupSet :: Maybe [Val Text]
+  , _eC2NetworkInterfaceIpv6AddressCount :: Maybe (Val Integer')
+  , _eC2NetworkInterfaceIpv6Addresses :: Maybe EC2NetworkInterfaceInstanceIpv6Address
+  , _eC2NetworkInterfacePrivateIpAddress :: Maybe (Val Text)
+  , _eC2NetworkInterfacePrivateIpAddresses :: Maybe [EC2NetworkInterfacePrivateIpAddressSpecification]
+  , _eC2NetworkInterfaceSecondaryPrivateIpAddressCount :: Maybe (Val Integer')
+  , _eC2NetworkInterfaceSourceDestCheck :: Maybe (Val Bool')
+  , _eC2NetworkInterfaceSubnetId :: Val Text
+  , _eC2NetworkInterfaceTags :: Maybe [Tag]
+  } deriving (Show, Generic)
+
+instance ToJSON EC2NetworkInterface where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+instance FromJSON EC2NetworkInterface where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+-- | Constructor for 'EC2NetworkInterface' containing required fields as
+-- | arguments.
+ec2NetworkInterface
+  :: Val Text -- ^ 'ecniSubnetId'
+  -> EC2NetworkInterface
+ec2NetworkInterface subnetIdarg =
+  EC2NetworkInterface
+  { _eC2NetworkInterfaceDescription = Nothing
+  , _eC2NetworkInterfaceGroupSet = Nothing
+  , _eC2NetworkInterfaceIpv6AddressCount = Nothing
+  , _eC2NetworkInterfaceIpv6Addresses = Nothing
+  , _eC2NetworkInterfacePrivateIpAddress = Nothing
+  , _eC2NetworkInterfacePrivateIpAddresses = Nothing
+  , _eC2NetworkInterfaceSecondaryPrivateIpAddressCount = Nothing
+  , _eC2NetworkInterfaceSourceDestCheck = Nothing
+  , _eC2NetworkInterfaceSubnetId = subnetIdarg
+  , _eC2NetworkInterfaceTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface.html#cfn-awsec2networkinterface-description
+ecniDescription :: Lens' EC2NetworkInterface (Maybe (Val Text))
+ecniDescription = lens _eC2NetworkInterfaceDescription (\s a -> s { _eC2NetworkInterfaceDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface.html#cfn-awsec2networkinterface-groupset
+ecniGroupSet :: Lens' EC2NetworkInterface (Maybe [Val Text])
+ecniGroupSet = lens _eC2NetworkInterfaceGroupSet (\s a -> s { _eC2NetworkInterfaceGroupSet = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface.html#cfn-ec2-networkinterface-ipv6addresscount
+ecniIpv6AddressCount :: Lens' EC2NetworkInterface (Maybe (Val Integer'))
+ecniIpv6AddressCount = lens _eC2NetworkInterfaceIpv6AddressCount (\s a -> s { _eC2NetworkInterfaceIpv6AddressCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface.html#cfn-ec2-networkinterface-ipv6addresses
+ecniIpv6Addresses :: Lens' EC2NetworkInterface (Maybe EC2NetworkInterfaceInstanceIpv6Address)
+ecniIpv6Addresses = lens _eC2NetworkInterfaceIpv6Addresses (\s a -> s { _eC2NetworkInterfaceIpv6Addresses = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface.html#cfn-awsec2networkinterface-privateipaddress
+ecniPrivateIpAddress :: Lens' EC2NetworkInterface (Maybe (Val Text))
+ecniPrivateIpAddress = lens _eC2NetworkInterfacePrivateIpAddress (\s a -> s { _eC2NetworkInterfacePrivateIpAddress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface.html#cfn-awsec2networkinterface-privateipaddresses
+ecniPrivateIpAddresses :: Lens' EC2NetworkInterface (Maybe [EC2NetworkInterfacePrivateIpAddressSpecification])
+ecniPrivateIpAddresses = lens _eC2NetworkInterfacePrivateIpAddresses (\s a -> s { _eC2NetworkInterfacePrivateIpAddresses = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface.html#cfn-awsec2networkinterface-secondaryprivateipcount
+ecniSecondaryPrivateIpAddressCount :: Lens' EC2NetworkInterface (Maybe (Val Integer'))
+ecniSecondaryPrivateIpAddressCount = lens _eC2NetworkInterfaceSecondaryPrivateIpAddressCount (\s a -> s { _eC2NetworkInterfaceSecondaryPrivateIpAddressCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface.html#cfn-awsec2networkinterface-sourcedestcheck
+ecniSourceDestCheck :: Lens' EC2NetworkInterface (Maybe (Val Bool'))
+ecniSourceDestCheck = lens _eC2NetworkInterfaceSourceDestCheck (\s a -> s { _eC2NetworkInterfaceSourceDestCheck = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface.html#cfn-awsec2networkinterface-subnetid
+ecniSubnetId :: Lens' EC2NetworkInterface (Val Text)
+ecniSubnetId = lens _eC2NetworkInterfaceSubnetId (\s a -> s { _eC2NetworkInterfaceSubnetId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface.html#cfn-awsec2networkinterface-tags
+ecniTags :: Lens' EC2NetworkInterface (Maybe [Tag])
+ecniTags = lens _eC2NetworkInterfaceTags (\s a -> s { _eC2NetworkInterfaceTags = a })
diff --git a/library-gen/Stratosphere/Resources/EC2NetworkInterfaceAttachment.hs b/library-gen/Stratosphere/Resources/EC2NetworkInterfaceAttachment.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2NetworkInterfaceAttachment.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface-attachment.html
+
+module Stratosphere.Resources.EC2NetworkInterfaceAttachment where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2NetworkInterfaceAttachment. See
+-- | 'ec2NetworkInterfaceAttachment' for a more convenient constructor.
+data EC2NetworkInterfaceAttachment =
+  EC2NetworkInterfaceAttachment
+  { _eC2NetworkInterfaceAttachmentDeleteOnTermination :: Maybe (Val Bool')
+  , _eC2NetworkInterfaceAttachmentDeviceIndex :: Val Text
+  , _eC2NetworkInterfaceAttachmentInstanceId :: Val Text
+  , _eC2NetworkInterfaceAttachmentNetworkInterfaceId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2NetworkInterfaceAttachment where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+instance FromJSON EC2NetworkInterfaceAttachment where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+-- | Constructor for 'EC2NetworkInterfaceAttachment' containing required
+-- | fields as arguments.
+ec2NetworkInterfaceAttachment
+  :: Val Text -- ^ 'ecniaDeviceIndex'
+  -> Val Text -- ^ 'ecniaInstanceId'
+  -> Val Text -- ^ 'ecniaNetworkInterfaceId'
+  -> EC2NetworkInterfaceAttachment
+ec2NetworkInterfaceAttachment deviceIndexarg instanceIdarg networkInterfaceIdarg =
+  EC2NetworkInterfaceAttachment
+  { _eC2NetworkInterfaceAttachmentDeleteOnTermination = Nothing
+  , _eC2NetworkInterfaceAttachmentDeviceIndex = deviceIndexarg
+  , _eC2NetworkInterfaceAttachmentInstanceId = instanceIdarg
+  , _eC2NetworkInterfaceAttachmentNetworkInterfaceId = networkInterfaceIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface-attachment.html#cfn-ec2-network-interface-attachment-deleteonterm
+ecniaDeleteOnTermination :: Lens' EC2NetworkInterfaceAttachment (Maybe (Val Bool'))
+ecniaDeleteOnTermination = lens _eC2NetworkInterfaceAttachmentDeleteOnTermination (\s a -> s { _eC2NetworkInterfaceAttachmentDeleteOnTermination = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface-attachment.html#cfn-ec2-network-interface-attachment-deviceindex
+ecniaDeviceIndex :: Lens' EC2NetworkInterfaceAttachment (Val Text)
+ecniaDeviceIndex = lens _eC2NetworkInterfaceAttachmentDeviceIndex (\s a -> s { _eC2NetworkInterfaceAttachmentDeviceIndex = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface-attachment.html#cfn-ec2-network-interface-attachment-instanceid
+ecniaInstanceId :: Lens' EC2NetworkInterfaceAttachment (Val Text)
+ecniaInstanceId = lens _eC2NetworkInterfaceAttachmentInstanceId (\s a -> s { _eC2NetworkInterfaceAttachmentInstanceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface-attachment.html#cfn-ec2-network-interface-attachment-networkinterfaceid
+ecniaNetworkInterfaceId :: Lens' EC2NetworkInterfaceAttachment (Val Text)
+ecniaNetworkInterfaceId = lens _eC2NetworkInterfaceAttachmentNetworkInterfaceId (\s a -> s { _eC2NetworkInterfaceAttachmentNetworkInterfaceId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2PlacementGroup.hs b/library-gen/Stratosphere/Resources/EC2PlacementGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2PlacementGroup.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-placementgroup.html
+
+module Stratosphere.Resources.EC2PlacementGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2PlacementGroup. See 'ec2PlacementGroup'
+-- | for a more convenient constructor.
+data EC2PlacementGroup =
+  EC2PlacementGroup
+  { _eC2PlacementGroupStrategy :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2PlacementGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+
+instance FromJSON EC2PlacementGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+
+-- | Constructor for 'EC2PlacementGroup' containing required fields as
+-- | arguments.
+ec2PlacementGroup
+  :: EC2PlacementGroup
+ec2PlacementGroup  =
+  EC2PlacementGroup
+  { _eC2PlacementGroupStrategy = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-placementgroup.html#cfn-ec2-placementgroup-strategy
+ecpgStrategy :: Lens' EC2PlacementGroup (Maybe (Val Text))
+ecpgStrategy = lens _eC2PlacementGroupStrategy (\s a -> s { _eC2PlacementGroupStrategy = a })
diff --git a/library-gen/Stratosphere/Resources/EC2Route.hs b/library-gen/Stratosphere/Resources/EC2Route.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2Route.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html
+
+module Stratosphere.Resources.EC2Route where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2Route. See 'ec2Route' for a more
+-- | convenient constructor.
+data EC2Route =
+  EC2Route
+  { _eC2RouteDestinationCidrBlock :: Val Text
+  , _eC2RouteDestinationIpv6CidrBlock :: Maybe (Val Text)
+  , _eC2RouteGatewayId :: Maybe (Val Text)
+  , _eC2RouteInstanceId :: Maybe (Val Text)
+  , _eC2RouteNatGatewayId :: Maybe (Val Text)
+  , _eC2RouteNetworkInterfaceId :: Maybe (Val Text)
+  , _eC2RouteRouteTableId :: Val Text
+  , _eC2RouteVpcPeeringConnectionId :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2Route where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+
+instance FromJSON EC2Route where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+
+-- | Constructor for 'EC2Route' containing required fields as arguments.
+ec2Route
+  :: Val Text -- ^ 'ecrDestinationCidrBlock'
+  -> Val Text -- ^ 'ecrRouteTableId'
+  -> EC2Route
+ec2Route destinationCidrBlockarg routeTableIdarg =
+  EC2Route
+  { _eC2RouteDestinationCidrBlock = destinationCidrBlockarg
+  , _eC2RouteDestinationIpv6CidrBlock = Nothing
+  , _eC2RouteGatewayId = Nothing
+  , _eC2RouteInstanceId = Nothing
+  , _eC2RouteNatGatewayId = Nothing
+  , _eC2RouteNetworkInterfaceId = Nothing
+  , _eC2RouteRouteTableId = routeTableIdarg
+  , _eC2RouteVpcPeeringConnectionId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-destinationcidrblock
+ecrDestinationCidrBlock :: Lens' EC2Route (Val Text)
+ecrDestinationCidrBlock = lens _eC2RouteDestinationCidrBlock (\s a -> s { _eC2RouteDestinationCidrBlock = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-destinationipv6cidrblock
+ecrDestinationIpv6CidrBlock :: Lens' EC2Route (Maybe (Val Text))
+ecrDestinationIpv6CidrBlock = lens _eC2RouteDestinationIpv6CidrBlock (\s a -> s { _eC2RouteDestinationIpv6CidrBlock = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-gatewayid
+ecrGatewayId :: Lens' EC2Route (Maybe (Val Text))
+ecrGatewayId = lens _eC2RouteGatewayId (\s a -> s { _eC2RouteGatewayId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-instanceid
+ecrInstanceId :: Lens' EC2Route (Maybe (Val Text))
+ecrInstanceId = lens _eC2RouteInstanceId (\s a -> s { _eC2RouteInstanceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-natgatewayid
+ecrNatGatewayId :: Lens' EC2Route (Maybe (Val Text))
+ecrNatGatewayId = lens _eC2RouteNatGatewayId (\s a -> s { _eC2RouteNatGatewayId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-networkinterfaceid
+ecrNetworkInterfaceId :: Lens' EC2Route (Maybe (Val Text))
+ecrNetworkInterfaceId = lens _eC2RouteNetworkInterfaceId (\s a -> s { _eC2RouteNetworkInterfaceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-routetableid
+ecrRouteTableId :: Lens' EC2Route (Val Text)
+ecrRouteTableId = lens _eC2RouteRouteTableId (\s a -> s { _eC2RouteRouteTableId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-vpcpeeringconnectionid
+ecrVpcPeeringConnectionId :: Lens' EC2Route (Maybe (Val Text))
+ecrVpcPeeringConnectionId = lens _eC2RouteVpcPeeringConnectionId (\s a -> s { _eC2RouteVpcPeeringConnectionId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2RouteTable.hs b/library-gen/Stratosphere/Resources/EC2RouteTable.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2RouteTable.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route-table.html
+
+module Stratosphere.Resources.EC2RouteTable where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2RouteTable. See 'ec2RouteTable' for a
+-- | more convenient constructor.
+data EC2RouteTable =
+  EC2RouteTable
+  { _eC2RouteTableTags :: Maybe [Tag]
+  , _eC2RouteTableVpcId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2RouteTable where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+instance FromJSON EC2RouteTable where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+-- | Constructor for 'EC2RouteTable' containing required fields as arguments.
+ec2RouteTable
+  :: Val Text -- ^ 'ecrtVpcId'
+  -> EC2RouteTable
+ec2RouteTable vpcIdarg =
+  EC2RouteTable
+  { _eC2RouteTableTags = Nothing
+  , _eC2RouteTableVpcId = vpcIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route-table.html#cfn-ec2-routetable-tags
+ecrtTags :: Lens' EC2RouteTable (Maybe [Tag])
+ecrtTags = lens _eC2RouteTableTags (\s a -> s { _eC2RouteTableTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route-table.html#cfn-ec2-routetable-vpcid
+ecrtVpcId :: Lens' EC2RouteTable (Val Text)
+ecrtVpcId = lens _eC2RouteTableVpcId (\s a -> s { _eC2RouteTableVpcId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2SecurityGroup.hs b/library-gen/Stratosphere/Resources/EC2SecurityGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2SecurityGroup.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html
+
+module Stratosphere.Resources.EC2SecurityGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EC2SecurityGroupRule
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2SecurityGroup. See 'ec2SecurityGroup'
+-- | for a more convenient constructor.
+data EC2SecurityGroup =
+  EC2SecurityGroup
+  { _eC2SecurityGroupGroupDescription :: Val Text
+  , _eC2SecurityGroupSecurityGroupEgress :: Maybe [EC2SecurityGroupRule]
+  , _eC2SecurityGroupSecurityGroupIngress :: Maybe [EC2SecurityGroupRule]
+  , _eC2SecurityGroupTags :: Maybe [Tag]
+  , _eC2SecurityGroupVpcId :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SecurityGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+instance FromJSON EC2SecurityGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+-- | Constructor for 'EC2SecurityGroup' containing required fields as
+-- | arguments.
+ec2SecurityGroup
+  :: Val Text -- ^ 'ecsgGroupDescription'
+  -> EC2SecurityGroup
+ec2SecurityGroup groupDescriptionarg =
+  EC2SecurityGroup
+  { _eC2SecurityGroupGroupDescription = groupDescriptionarg
+  , _eC2SecurityGroupSecurityGroupEgress = Nothing
+  , _eC2SecurityGroupSecurityGroupIngress = Nothing
+  , _eC2SecurityGroupTags = Nothing
+  , _eC2SecurityGroupVpcId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html#cfn-ec2-securitygroup-groupdescription
+ecsgGroupDescription :: Lens' EC2SecurityGroup (Val Text)
+ecsgGroupDescription = lens _eC2SecurityGroupGroupDescription (\s a -> s { _eC2SecurityGroupGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html#cfn-ec2-securitygroup-securitygroupegress
+ecsgSecurityGroupEgress :: Lens' EC2SecurityGroup (Maybe [EC2SecurityGroupRule])
+ecsgSecurityGroupEgress = lens _eC2SecurityGroupSecurityGroupEgress (\s a -> s { _eC2SecurityGroupSecurityGroupEgress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html#cfn-ec2-securitygroup-securitygroupingress
+ecsgSecurityGroupIngress :: Lens' EC2SecurityGroup (Maybe [EC2SecurityGroupRule])
+ecsgSecurityGroupIngress = lens _eC2SecurityGroupSecurityGroupIngress (\s a -> s { _eC2SecurityGroupSecurityGroupIngress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html#cfn-ec2-securitygroup-tags
+ecsgTags :: Lens' EC2SecurityGroup (Maybe [Tag])
+ecsgTags = lens _eC2SecurityGroupTags (\s a -> s { _eC2SecurityGroupTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html#cfn-ec2-securitygroup-vpcid
+ecsgVpcId :: Lens' EC2SecurityGroup (Maybe (Val Text))
+ecsgVpcId = lens _eC2SecurityGroupVpcId (\s a -> s { _eC2SecurityGroupVpcId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2SecurityGroupEgress.hs b/library-gen/Stratosphere/Resources/EC2SecurityGroupEgress.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2SecurityGroupEgress.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-security-group-egress.html
+
+module Stratosphere.Resources.EC2SecurityGroupEgress where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SecurityGroupEgress. See
+-- | 'ec2SecurityGroupEgress' for a more convenient constructor.
+data EC2SecurityGroupEgress =
+  EC2SecurityGroupEgress
+  { _eC2SecurityGroupEgressCidrIp :: Maybe (Val Text)
+  , _eC2SecurityGroupEgressCidrIpv6 :: Maybe (Val Text)
+  , _eC2SecurityGroupEgressDestinationPrefixListId :: Maybe (Val Text)
+  , _eC2SecurityGroupEgressDestinationSecurityGroupId :: Maybe (Val Text)
+  , _eC2SecurityGroupEgressFromPort :: Maybe (Val Integer')
+  , _eC2SecurityGroupEgressGroupId :: Val Text
+  , _eC2SecurityGroupEgressIpProtocol :: Val Text
+  , _eC2SecurityGroupEgressToPort :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SecurityGroupEgress where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+instance FromJSON EC2SecurityGroupEgress where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+-- | Constructor for 'EC2SecurityGroupEgress' containing required fields as
+-- | arguments.
+ec2SecurityGroupEgress
+  :: Val Text -- ^ 'ecsgeGroupId'
+  -> Val Text -- ^ 'ecsgeIpProtocol'
+  -> EC2SecurityGroupEgress
+ec2SecurityGroupEgress groupIdarg ipProtocolarg =
+  EC2SecurityGroupEgress
+  { _eC2SecurityGroupEgressCidrIp = Nothing
+  , _eC2SecurityGroupEgressCidrIpv6 = Nothing
+  , _eC2SecurityGroupEgressDestinationPrefixListId = Nothing
+  , _eC2SecurityGroupEgressDestinationSecurityGroupId = Nothing
+  , _eC2SecurityGroupEgressFromPort = Nothing
+  , _eC2SecurityGroupEgressGroupId = groupIdarg
+  , _eC2SecurityGroupEgressIpProtocol = ipProtocolarg
+  , _eC2SecurityGroupEgressToPort = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-security-group-egress.html#cfn-ec2-securitygroupegress-cidrip
+ecsgeCidrIp :: Lens' EC2SecurityGroupEgress (Maybe (Val Text))
+ecsgeCidrIp = lens _eC2SecurityGroupEgressCidrIp (\s a -> s { _eC2SecurityGroupEgressCidrIp = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-security-group-egress.html#cfn-ec2-securitygroupegress-cidripv6
+ecsgeCidrIpv6 :: Lens' EC2SecurityGroupEgress (Maybe (Val Text))
+ecsgeCidrIpv6 = lens _eC2SecurityGroupEgressCidrIpv6 (\s a -> s { _eC2SecurityGroupEgressCidrIpv6 = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-security-group-egress.html#cfn-ec2-securitygroupegress-destinationprefixlistid
+ecsgeDestinationPrefixListId :: Lens' EC2SecurityGroupEgress (Maybe (Val Text))
+ecsgeDestinationPrefixListId = lens _eC2SecurityGroupEgressDestinationPrefixListId (\s a -> s { _eC2SecurityGroupEgressDestinationPrefixListId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-security-group-egress.html#cfn-ec2-securitygroupegress-destinationsecuritygroupid
+ecsgeDestinationSecurityGroupId :: Lens' EC2SecurityGroupEgress (Maybe (Val Text))
+ecsgeDestinationSecurityGroupId = lens _eC2SecurityGroupEgressDestinationSecurityGroupId (\s a -> s { _eC2SecurityGroupEgressDestinationSecurityGroupId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-security-group-egress.html#cfn-ec2-securitygroupegress-fromport
+ecsgeFromPort :: Lens' EC2SecurityGroupEgress (Maybe (Val Integer'))
+ecsgeFromPort = lens _eC2SecurityGroupEgressFromPort (\s a -> s { _eC2SecurityGroupEgressFromPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-security-group-egress.html#cfn-ec2-securitygroupegress-groupid
+ecsgeGroupId :: Lens' EC2SecurityGroupEgress (Val Text)
+ecsgeGroupId = lens _eC2SecurityGroupEgressGroupId (\s a -> s { _eC2SecurityGroupEgressGroupId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-security-group-egress.html#cfn-ec2-securitygroupegress-ipprotocol
+ecsgeIpProtocol :: Lens' EC2SecurityGroupEgress (Val Text)
+ecsgeIpProtocol = lens _eC2SecurityGroupEgressIpProtocol (\s a -> s { _eC2SecurityGroupEgressIpProtocol = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-security-group-egress.html#cfn-ec2-securitygroupegress-toport
+ecsgeToPort :: Lens' EC2SecurityGroupEgress (Maybe (Val Integer'))
+ecsgeToPort = lens _eC2SecurityGroupEgressToPort (\s a -> s { _eC2SecurityGroupEgressToPort = a })
diff --git a/library-gen/Stratosphere/Resources/EC2SecurityGroupIngress.hs b/library-gen/Stratosphere/Resources/EC2SecurityGroupIngress.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2SecurityGroupIngress.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html
+
+module Stratosphere.Resources.EC2SecurityGroupIngress where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SecurityGroupIngress. See
+-- | 'ec2SecurityGroupIngress' for a more convenient constructor.
+data EC2SecurityGroupIngress =
+  EC2SecurityGroupIngress
+  { _eC2SecurityGroupIngressCidrIp :: Maybe (Val Text)
+  , _eC2SecurityGroupIngressCidrIpv6 :: Maybe (Val Text)
+  , _eC2SecurityGroupIngressFromPort :: Maybe (Val Integer')
+  , _eC2SecurityGroupIngressGroupId :: Maybe (Val Text)
+  , _eC2SecurityGroupIngressGroupName :: Maybe (Val Text)
+  , _eC2SecurityGroupIngressIpProtocol :: Val Text
+  , _eC2SecurityGroupIngressSourceSecurityGroupId :: Maybe (Val Text)
+  , _eC2SecurityGroupIngressSourceSecurityGroupName :: Maybe (Val Text)
+  , _eC2SecurityGroupIngressSourceSecurityGroupOwnerId :: Maybe (Val Text)
+  , _eC2SecurityGroupIngressToPort :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SecurityGroupIngress where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+instance FromJSON EC2SecurityGroupIngress where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+-- | Constructor for 'EC2SecurityGroupIngress' containing required fields as
+-- | arguments.
+ec2SecurityGroupIngress
+  :: Val Text -- ^ 'ecsgiIpProtocol'
+  -> EC2SecurityGroupIngress
+ec2SecurityGroupIngress ipProtocolarg =
+  EC2SecurityGroupIngress
+  { _eC2SecurityGroupIngressCidrIp = Nothing
+  , _eC2SecurityGroupIngressCidrIpv6 = Nothing
+  , _eC2SecurityGroupIngressFromPort = Nothing
+  , _eC2SecurityGroupIngressGroupId = Nothing
+  , _eC2SecurityGroupIngressGroupName = Nothing
+  , _eC2SecurityGroupIngressIpProtocol = ipProtocolarg
+  , _eC2SecurityGroupIngressSourceSecurityGroupId = Nothing
+  , _eC2SecurityGroupIngressSourceSecurityGroupName = Nothing
+  , _eC2SecurityGroupIngressSourceSecurityGroupOwnerId = Nothing
+  , _eC2SecurityGroupIngressToPort = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html#cfn-ec2-security-group-ingress-cidrip
+ecsgiCidrIp :: Lens' EC2SecurityGroupIngress (Maybe (Val Text))
+ecsgiCidrIp = lens _eC2SecurityGroupIngressCidrIp (\s a -> s { _eC2SecurityGroupIngressCidrIp = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html#cfn-ec2-security-group-ingress-cidripv6
+ecsgiCidrIpv6 :: Lens' EC2SecurityGroupIngress (Maybe (Val Text))
+ecsgiCidrIpv6 = lens _eC2SecurityGroupIngressCidrIpv6 (\s a -> s { _eC2SecurityGroupIngressCidrIpv6 = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html#cfn-ec2-security-group-ingress-fromport
+ecsgiFromPort :: Lens' EC2SecurityGroupIngress (Maybe (Val Integer'))
+ecsgiFromPort = lens _eC2SecurityGroupIngressFromPort (\s a -> s { _eC2SecurityGroupIngressFromPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html#cfn-ec2-security-group-ingress-groupid
+ecsgiGroupId :: Lens' EC2SecurityGroupIngress (Maybe (Val Text))
+ecsgiGroupId = lens _eC2SecurityGroupIngressGroupId (\s a -> s { _eC2SecurityGroupIngressGroupId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html#cfn-ec2-security-group-ingress-groupname
+ecsgiGroupName :: Lens' EC2SecurityGroupIngress (Maybe (Val Text))
+ecsgiGroupName = lens _eC2SecurityGroupIngressGroupName (\s a -> s { _eC2SecurityGroupIngressGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html#cfn-ec2-security-group-ingress-ipprotocol
+ecsgiIpProtocol :: Lens' EC2SecurityGroupIngress (Val Text)
+ecsgiIpProtocol = lens _eC2SecurityGroupIngressIpProtocol (\s a -> s { _eC2SecurityGroupIngressIpProtocol = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html#cfn-ec2-security-group-ingress-sourcesecuritygroupid
+ecsgiSourceSecurityGroupId :: Lens' EC2SecurityGroupIngress (Maybe (Val Text))
+ecsgiSourceSecurityGroupId = lens _eC2SecurityGroupIngressSourceSecurityGroupId (\s a -> s { _eC2SecurityGroupIngressSourceSecurityGroupId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html#cfn-ec2-security-group-ingress-sourcesecuritygroupname
+ecsgiSourceSecurityGroupName :: Lens' EC2SecurityGroupIngress (Maybe (Val Text))
+ecsgiSourceSecurityGroupName = lens _eC2SecurityGroupIngressSourceSecurityGroupName (\s a -> s { _eC2SecurityGroupIngressSourceSecurityGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html#cfn-ec2-security-group-ingress-sourcesecuritygroupownerid
+ecsgiSourceSecurityGroupOwnerId :: Lens' EC2SecurityGroupIngress (Maybe (Val Text))
+ecsgiSourceSecurityGroupOwnerId = lens _eC2SecurityGroupIngressSourceSecurityGroupOwnerId (\s a -> s { _eC2SecurityGroupIngressSourceSecurityGroupOwnerId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html#cfn-ec2-security-group-ingress-toport
+ecsgiToPort :: Lens' EC2SecurityGroupIngress (Maybe (Val Integer'))
+ecsgiToPort = lens _eC2SecurityGroupIngressToPort (\s a -> s { _eC2SecurityGroupIngressToPort = a })
diff --git a/library-gen/Stratosphere/Resources/EC2SpotFleet.hs b/library-gen/Stratosphere/Resources/EC2SpotFleet.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2SpotFleet.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-spotfleet.html
+
+module Stratosphere.Resources.EC2SpotFleet where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetRequestConfigData
+
+-- | Full data type definition for EC2SpotFleet. See 'ec2SpotFleet' for a more
+-- | convenient constructor.
+data EC2SpotFleet =
+  EC2SpotFleet
+  { _eC2SpotFleetSpotFleetRequestConfigData :: EC2SpotFleetSpotFleetRequestConfigData
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SpotFleet where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+
+instance FromJSON EC2SpotFleet where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+
+-- | Constructor for 'EC2SpotFleet' containing required fields as arguments.
+ec2SpotFleet
+  :: EC2SpotFleetSpotFleetRequestConfigData -- ^ 'ecsfSpotFleetRequestConfigData'
+  -> EC2SpotFleet
+ec2SpotFleet spotFleetRequestConfigDataarg =
+  EC2SpotFleet
+  { _eC2SpotFleetSpotFleetRequestConfigData = spotFleetRequestConfigDataarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-spotfleet.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata
+ecsfSpotFleetRequestConfigData :: Lens' EC2SpotFleet EC2SpotFleetSpotFleetRequestConfigData
+ecsfSpotFleetRequestConfigData = lens _eC2SpotFleetSpotFleetRequestConfigData (\s a -> s { _eC2SpotFleetSpotFleetRequestConfigData = a })
diff --git a/library-gen/Stratosphere/Resources/EC2Subnet.hs b/library-gen/Stratosphere/Resources/EC2Subnet.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2Subnet.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html
+
+module Stratosphere.Resources.EC2Subnet where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2Subnet. See 'ec2Subnet' for a more
+-- | convenient constructor.
+data EC2Subnet =
+  EC2Subnet
+  { _eC2SubnetAvailabilityZone :: Maybe (Val Text)
+  , _eC2SubnetCidrBlock :: Val Text
+  , _eC2SubnetMapPublicIpOnLaunch :: Maybe (Val Bool')
+  , _eC2SubnetTags :: Maybe [Tag]
+  , _eC2SubnetVpcId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2Subnet where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+
+instance FromJSON EC2Subnet where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+
+-- | Constructor for 'EC2Subnet' containing required fields as arguments.
+ec2Subnet
+  :: Val Text -- ^ 'ecsCidrBlock'
+  -> Val Text -- ^ 'ecsVpcId'
+  -> EC2Subnet
+ec2Subnet cidrBlockarg vpcIdarg =
+  EC2Subnet
+  { _eC2SubnetAvailabilityZone = Nothing
+  , _eC2SubnetCidrBlock = cidrBlockarg
+  , _eC2SubnetMapPublicIpOnLaunch = Nothing
+  , _eC2SubnetTags = Nothing
+  , _eC2SubnetVpcId = vpcIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-availabilityzone
+ecsAvailabilityZone :: Lens' EC2Subnet (Maybe (Val Text))
+ecsAvailabilityZone = lens _eC2SubnetAvailabilityZone (\s a -> s { _eC2SubnetAvailabilityZone = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-cidrblock
+ecsCidrBlock :: Lens' EC2Subnet (Val Text)
+ecsCidrBlock = lens _eC2SubnetCidrBlock (\s a -> s { _eC2SubnetCidrBlock = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-mappubliciponlaunch
+ecsMapPublicIpOnLaunch :: Lens' EC2Subnet (Maybe (Val Bool'))
+ecsMapPublicIpOnLaunch = lens _eC2SubnetMapPublicIpOnLaunch (\s a -> s { _eC2SubnetMapPublicIpOnLaunch = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-tags
+ecsTags :: Lens' EC2Subnet (Maybe [Tag])
+ecsTags = lens _eC2SubnetTags (\s a -> s { _eC2SubnetTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-awsec2subnet-prop-vpcid
+ecsVpcId :: Lens' EC2Subnet (Val Text)
+ecsVpcId = lens _eC2SubnetVpcId (\s a -> s { _eC2SubnetVpcId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2SubnetCidrBlock.hs b/library-gen/Stratosphere/Resources/EC2SubnetCidrBlock.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2SubnetCidrBlock.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnetcidrblock.html
+
+module Stratosphere.Resources.EC2SubnetCidrBlock where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SubnetCidrBlock. See
+-- | 'ec2SubnetCidrBlock' for a more convenient constructor.
+data EC2SubnetCidrBlock =
+  EC2SubnetCidrBlock
+  { _eC2SubnetCidrBlockIpv6CidrBlock :: Val Text
+  , _eC2SubnetCidrBlockSubnetId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SubnetCidrBlock where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+instance FromJSON EC2SubnetCidrBlock where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+-- | Constructor for 'EC2SubnetCidrBlock' containing required fields as
+-- | arguments.
+ec2SubnetCidrBlock
+  :: Val Text -- ^ 'ecscbIpv6CidrBlock'
+  -> Val Text -- ^ 'ecscbSubnetId'
+  -> EC2SubnetCidrBlock
+ec2SubnetCidrBlock ipv6CidrBlockarg subnetIdarg =
+  EC2SubnetCidrBlock
+  { _eC2SubnetCidrBlockIpv6CidrBlock = ipv6CidrBlockarg
+  , _eC2SubnetCidrBlockSubnetId = subnetIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnetcidrblock.html#cfn-ec2-subnetcidrblock-ipv6cidrblock
+ecscbIpv6CidrBlock :: Lens' EC2SubnetCidrBlock (Val Text)
+ecscbIpv6CidrBlock = lens _eC2SubnetCidrBlockIpv6CidrBlock (\s a -> s { _eC2SubnetCidrBlockIpv6CidrBlock = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnetcidrblock.html#cfn-ec2-subnetcidrblock-subnetid
+ecscbSubnetId :: Lens' EC2SubnetCidrBlock (Val Text)
+ecscbSubnetId = lens _eC2SubnetCidrBlockSubnetId (\s a -> s { _eC2SubnetCidrBlockSubnetId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2SubnetNetworkAclAssociation.hs b/library-gen/Stratosphere/Resources/EC2SubnetNetworkAclAssociation.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2SubnetNetworkAclAssociation.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet-network-acl-assoc.html
+
+module Stratosphere.Resources.EC2SubnetNetworkAclAssociation where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SubnetNetworkAclAssociation. See
+-- | 'ec2SubnetNetworkAclAssociation' for a more convenient constructor.
+data EC2SubnetNetworkAclAssociation =
+  EC2SubnetNetworkAclAssociation
+  { _eC2SubnetNetworkAclAssociationNetworkAclId :: Val Text
+  , _eC2SubnetNetworkAclAssociationSubnetId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SubnetNetworkAclAssociation where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+instance FromJSON EC2SubnetNetworkAclAssociation where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+-- | Constructor for 'EC2SubnetNetworkAclAssociation' containing required
+-- | fields as arguments.
+ec2SubnetNetworkAclAssociation
+  :: Val Text -- ^ 'ecsnaaNetworkAclId'
+  -> Val Text -- ^ 'ecsnaaSubnetId'
+  -> EC2SubnetNetworkAclAssociation
+ec2SubnetNetworkAclAssociation networkAclIdarg subnetIdarg =
+  EC2SubnetNetworkAclAssociation
+  { _eC2SubnetNetworkAclAssociationNetworkAclId = networkAclIdarg
+  , _eC2SubnetNetworkAclAssociationSubnetId = subnetIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet-network-acl-assoc.html#cfn-ec2-subnetnetworkaclassociation-networkaclid
+ecsnaaNetworkAclId :: Lens' EC2SubnetNetworkAclAssociation (Val Text)
+ecsnaaNetworkAclId = lens _eC2SubnetNetworkAclAssociationNetworkAclId (\s a -> s { _eC2SubnetNetworkAclAssociationNetworkAclId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet-network-acl-assoc.html#cfn-ec2-subnetnetworkaclassociation-associationid
+ecsnaaSubnetId :: Lens' EC2SubnetNetworkAclAssociation (Val Text)
+ecsnaaSubnetId = lens _eC2SubnetNetworkAclAssociationSubnetId (\s a -> s { _eC2SubnetNetworkAclAssociationSubnetId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2SubnetRouteTableAssociation.hs b/library-gen/Stratosphere/Resources/EC2SubnetRouteTableAssociation.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2SubnetRouteTableAssociation.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet-route-table-assoc.html
+
+module Stratosphere.Resources.EC2SubnetRouteTableAssociation where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SubnetRouteTableAssociation. See
+-- | 'ec2SubnetRouteTableAssociation' for a more convenient constructor.
+data EC2SubnetRouteTableAssociation =
+  EC2SubnetRouteTableAssociation
+  { _eC2SubnetRouteTableAssociationRouteTableId :: Val Text
+  , _eC2SubnetRouteTableAssociationSubnetId :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2SubnetRouteTableAssociation where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+instance FromJSON EC2SubnetRouteTableAssociation where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+-- | Constructor for 'EC2SubnetRouteTableAssociation' containing required
+-- | fields as arguments.
+ec2SubnetRouteTableAssociation
+  :: Val Text -- ^ 'ecsrtaRouteTableId'
+  -> EC2SubnetRouteTableAssociation
+ec2SubnetRouteTableAssociation routeTableIdarg =
+  EC2SubnetRouteTableAssociation
+  { _eC2SubnetRouteTableAssociationRouteTableId = routeTableIdarg
+  , _eC2SubnetRouteTableAssociationSubnetId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet-route-table-assoc.html#cfn-ec2-subnetroutetableassociation-routetableid
+ecsrtaRouteTableId :: Lens' EC2SubnetRouteTableAssociation (Val Text)
+ecsrtaRouteTableId = lens _eC2SubnetRouteTableAssociationRouteTableId (\s a -> s { _eC2SubnetRouteTableAssociationRouteTableId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet-route-table-assoc.html#cfn-ec2-subnetroutetableassociation-subnetid
+ecsrtaSubnetId :: Lens' EC2SubnetRouteTableAssociation (Maybe (Val Text))
+ecsrtaSubnetId = lens _eC2SubnetRouteTableAssociationSubnetId (\s a -> s { _eC2SubnetRouteTableAssociationSubnetId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2VPC.hs b/library-gen/Stratosphere/Resources/EC2VPC.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2VPC.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html
+
+module Stratosphere.Resources.EC2VPC where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2VPC. See 'ec2VPC' for a more convenient
+-- | constructor.
+data EC2VPC =
+  EC2VPC
+  { _eC2VPCCidrBlock :: Val Text
+  , _eC2VPCEnableDnsHostnames :: Maybe (Val Bool')
+  , _eC2VPCEnableDnsSupport :: Maybe (Val Bool')
+  , _eC2VPCInstanceTenancy :: Maybe (Val Text)
+  , _eC2VPCTags :: Maybe [Tag]
+  } deriving (Show, Generic)
+
+instance ToJSON EC2VPC where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
+
+instance FromJSON EC2VPC where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
+
+-- | Constructor for 'EC2VPC' containing required fields as arguments.
+ec2VPC
+  :: Val Text -- ^ 'ecvpcCidrBlock'
+  -> EC2VPC
+ec2VPC cidrBlockarg =
+  EC2VPC
+  { _eC2VPCCidrBlock = cidrBlockarg
+  , _eC2VPCEnableDnsHostnames = Nothing
+  , _eC2VPCEnableDnsSupport = Nothing
+  , _eC2VPCInstanceTenancy = Nothing
+  , _eC2VPCTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html#cfn-aws-ec2-vpc-cidrblock
+ecvpcCidrBlock :: Lens' EC2VPC (Val Text)
+ecvpcCidrBlock = lens _eC2VPCCidrBlock (\s a -> s { _eC2VPCCidrBlock = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html#cfn-aws-ec2-vpc-EnableDnsHostnames
+ecvpcEnableDnsHostnames :: Lens' EC2VPC (Maybe (Val Bool'))
+ecvpcEnableDnsHostnames = lens _eC2VPCEnableDnsHostnames (\s a -> s { _eC2VPCEnableDnsHostnames = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html#cfn-aws-ec2-vpc-EnableDnsSupport
+ecvpcEnableDnsSupport :: Lens' EC2VPC (Maybe (Val Bool'))
+ecvpcEnableDnsSupport = lens _eC2VPCEnableDnsSupport (\s a -> s { _eC2VPCEnableDnsSupport = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html#cfn-aws-ec2-vpc-instancetenancy
+ecvpcInstanceTenancy :: Lens' EC2VPC (Maybe (Val Text))
+ecvpcInstanceTenancy = lens _eC2VPCInstanceTenancy (\s a -> s { _eC2VPCInstanceTenancy = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html#cfn-aws-ec2-vpc-tags
+ecvpcTags :: Lens' EC2VPC (Maybe [Tag])
+ecvpcTags = lens _eC2VPCTags (\s a -> s { _eC2VPCTags = a })
diff --git a/library-gen/Stratosphere/Resources/EC2VPCCidrBlock.hs b/library-gen/Stratosphere/Resources/EC2VPCCidrBlock.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2VPCCidrBlock.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpccidrblock.html
+
+module Stratosphere.Resources.EC2VPCCidrBlock where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2VPCCidrBlock. See 'ec2VPCCidrBlock' for
+-- | a more convenient constructor.
+data EC2VPCCidrBlock =
+  EC2VPCCidrBlock
+  { _eC2VPCCidrBlockAmazonProvidedIpv6CidrBlock :: Maybe (Val Bool')
+  , _eC2VPCCidrBlockVpcId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2VPCCidrBlock where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+
+instance FromJSON EC2VPCCidrBlock where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+
+-- | Constructor for 'EC2VPCCidrBlock' containing required fields as
+-- | arguments.
+ec2VPCCidrBlock
+  :: Val Text -- ^ 'ecvpccbVpcId'
+  -> EC2VPCCidrBlock
+ec2VPCCidrBlock vpcIdarg =
+  EC2VPCCidrBlock
+  { _eC2VPCCidrBlockAmazonProvidedIpv6CidrBlock = Nothing
+  , _eC2VPCCidrBlockVpcId = vpcIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpccidrblock.html#cfn-ec2-vpccidrblock-amazonprovidedipv6cidrblock
+ecvpccbAmazonProvidedIpv6CidrBlock :: Lens' EC2VPCCidrBlock (Maybe (Val Bool'))
+ecvpccbAmazonProvidedIpv6CidrBlock = lens _eC2VPCCidrBlockAmazonProvidedIpv6CidrBlock (\s a -> s { _eC2VPCCidrBlockAmazonProvidedIpv6CidrBlock = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpccidrblock.html#cfn-ec2-vpccidrblock-vpcid
+ecvpccbVpcId :: Lens' EC2VPCCidrBlock (Val Text)
+ecvpccbVpcId = lens _eC2VPCCidrBlockVpcId (\s a -> s { _eC2VPCCidrBlockVpcId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2VPCDHCPOptionsAssociation.hs b/library-gen/Stratosphere/Resources/EC2VPCDHCPOptionsAssociation.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2VPCDHCPOptionsAssociation.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc-dhcp-options-assoc.html
+
+module Stratosphere.Resources.EC2VPCDHCPOptionsAssociation where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2VPCDHCPOptionsAssociation. See
+-- | 'ec2VPCDHCPOptionsAssociation' for a more convenient constructor.
+data EC2VPCDHCPOptionsAssociation =
+  EC2VPCDHCPOptionsAssociation
+  { _eC2VPCDHCPOptionsAssociationDhcpOptionsId :: Val Text
+  , _eC2VPCDHCPOptionsAssociationVpcId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2VPCDHCPOptionsAssociation where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+instance FromJSON EC2VPCDHCPOptionsAssociation where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+-- | Constructor for 'EC2VPCDHCPOptionsAssociation' containing required fields
+-- | as arguments.
+ec2VPCDHCPOptionsAssociation
+  :: Val Text -- ^ 'ecvpcdhcpoaDhcpOptionsId'
+  -> Val Text -- ^ 'ecvpcdhcpoaVpcId'
+  -> EC2VPCDHCPOptionsAssociation
+ec2VPCDHCPOptionsAssociation dhcpOptionsIdarg vpcIdarg =
+  EC2VPCDHCPOptionsAssociation
+  { _eC2VPCDHCPOptionsAssociationDhcpOptionsId = dhcpOptionsIdarg
+  , _eC2VPCDHCPOptionsAssociationVpcId = vpcIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc-dhcp-options-assoc.html#cfn-ec2-vpcdhcpoptionsassociation-dhcpoptionsid
+ecvpcdhcpoaDhcpOptionsId :: Lens' EC2VPCDHCPOptionsAssociation (Val Text)
+ecvpcdhcpoaDhcpOptionsId = lens _eC2VPCDHCPOptionsAssociationDhcpOptionsId (\s a -> s { _eC2VPCDHCPOptionsAssociationDhcpOptionsId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc-dhcp-options-assoc.html#cfn-ec2-vpcdhcpoptionsassociation-vpcid
+ecvpcdhcpoaVpcId :: Lens' EC2VPCDHCPOptionsAssociation (Val Text)
+ecvpcdhcpoaVpcId = lens _eC2VPCDHCPOptionsAssociationVpcId (\s a -> s { _eC2VPCDHCPOptionsAssociationVpcId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2VPCEndpoint.hs b/library-gen/Stratosphere/Resources/EC2VPCEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2VPCEndpoint.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html
+
+module Stratosphere.Resources.EC2VPCEndpoint where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2VPCEndpoint. See 'ec2VPCEndpoint' for a
+-- | more convenient constructor.
+data EC2VPCEndpoint =
+  EC2VPCEndpoint
+  { _eC2VPCEndpointPolicyDocument :: Maybe Object
+  , _eC2VPCEndpointRouteTableIds :: Maybe [Val Text]
+  , _eC2VPCEndpointServiceName :: Val Text
+  , _eC2VPCEndpointVpcId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2VPCEndpoint where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+instance FromJSON EC2VPCEndpoint where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+-- | Constructor for 'EC2VPCEndpoint' containing required fields as arguments.
+ec2VPCEndpoint
+  :: Val Text -- ^ 'ecvpceServiceName'
+  -> Val Text -- ^ 'ecvpceVpcId'
+  -> EC2VPCEndpoint
+ec2VPCEndpoint serviceNamearg vpcIdarg =
+  EC2VPCEndpoint
+  { _eC2VPCEndpointPolicyDocument = Nothing
+  , _eC2VPCEndpointRouteTableIds = Nothing
+  , _eC2VPCEndpointServiceName = serviceNamearg
+  , _eC2VPCEndpointVpcId = vpcIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-policydocument
+ecvpcePolicyDocument :: Lens' EC2VPCEndpoint (Maybe Object)
+ecvpcePolicyDocument = lens _eC2VPCEndpointPolicyDocument (\s a -> s { _eC2VPCEndpointPolicyDocument = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-routetableids
+ecvpceRouteTableIds :: Lens' EC2VPCEndpoint (Maybe [Val Text])
+ecvpceRouteTableIds = lens _eC2VPCEndpointRouteTableIds (\s a -> s { _eC2VPCEndpointRouteTableIds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-servicename
+ecvpceServiceName :: Lens' EC2VPCEndpoint (Val Text)
+ecvpceServiceName = lens _eC2VPCEndpointServiceName (\s a -> s { _eC2VPCEndpointServiceName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-vpcid
+ecvpceVpcId :: Lens' EC2VPCEndpoint (Val Text)
+ecvpceVpcId = lens _eC2VPCEndpointVpcId (\s a -> s { _eC2VPCEndpointVpcId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2VPCGatewayAttachment.hs b/library-gen/Stratosphere/Resources/EC2VPCGatewayAttachment.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2VPCGatewayAttachment.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc-gateway-attachment.html
+
+module Stratosphere.Resources.EC2VPCGatewayAttachment where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2VPCGatewayAttachment. See
+-- | 'ec2VPCGatewayAttachment' for a more convenient constructor.
+data EC2VPCGatewayAttachment =
+  EC2VPCGatewayAttachment
+  { _eC2VPCGatewayAttachmentInternetGatewayId :: Maybe (Val Text)
+  , _eC2VPCGatewayAttachmentVpcId :: Val Text
+  , _eC2VPCGatewayAttachmentVpnGatewayId :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2VPCGatewayAttachment where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+instance FromJSON EC2VPCGatewayAttachment where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+-- | Constructor for 'EC2VPCGatewayAttachment' containing required fields as
+-- | arguments.
+ec2VPCGatewayAttachment
+  :: Val Text -- ^ 'ecvpcgaVpcId'
+  -> EC2VPCGatewayAttachment
+ec2VPCGatewayAttachment vpcIdarg =
+  EC2VPCGatewayAttachment
+  { _eC2VPCGatewayAttachmentInternetGatewayId = Nothing
+  , _eC2VPCGatewayAttachmentVpcId = vpcIdarg
+  , _eC2VPCGatewayAttachmentVpnGatewayId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc-gateway-attachment.html#cfn-ec2-vpcgatewayattachment-internetgatewayid
+ecvpcgaInternetGatewayId :: Lens' EC2VPCGatewayAttachment (Maybe (Val Text))
+ecvpcgaInternetGatewayId = lens _eC2VPCGatewayAttachmentInternetGatewayId (\s a -> s { _eC2VPCGatewayAttachmentInternetGatewayId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc-gateway-attachment.html#cfn-ec2-vpcgatewayattachment-vpcid
+ecvpcgaVpcId :: Lens' EC2VPCGatewayAttachment (Val Text)
+ecvpcgaVpcId = lens _eC2VPCGatewayAttachmentVpcId (\s a -> s { _eC2VPCGatewayAttachmentVpcId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc-gateway-attachment.html#cfn-ec2-vpcgatewayattachment-vpngatewayid
+ecvpcgaVpnGatewayId :: Lens' EC2VPCGatewayAttachment (Maybe (Val Text))
+ecvpcgaVpnGatewayId = lens _eC2VPCGatewayAttachmentVpnGatewayId (\s a -> s { _eC2VPCGatewayAttachmentVpnGatewayId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2VPCPeeringConnection.hs b/library-gen/Stratosphere/Resources/EC2VPCPeeringConnection.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2VPCPeeringConnection.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcpeeringconnection.html
+
+module Stratosphere.Resources.EC2VPCPeeringConnection where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2VPCPeeringConnection. See
+-- | 'ec2VPCPeeringConnection' for a more convenient constructor.
+data EC2VPCPeeringConnection =
+  EC2VPCPeeringConnection
+  { _eC2VPCPeeringConnectionPeerVpcId :: Val Text
+  , _eC2VPCPeeringConnectionTags :: Maybe [Tag]
+  , _eC2VPCPeeringConnectionVpcId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2VPCPeeringConnection where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+instance FromJSON EC2VPCPeeringConnection where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+-- | Constructor for 'EC2VPCPeeringConnection' containing required fields as
+-- | arguments.
+ec2VPCPeeringConnection
+  :: Val Text -- ^ 'ecvpcpcPeerVpcId'
+  -> Val Text -- ^ 'ecvpcpcVpcId'
+  -> EC2VPCPeeringConnection
+ec2VPCPeeringConnection peerVpcIdarg vpcIdarg =
+  EC2VPCPeeringConnection
+  { _eC2VPCPeeringConnectionPeerVpcId = peerVpcIdarg
+  , _eC2VPCPeeringConnectionTags = Nothing
+  , _eC2VPCPeeringConnectionVpcId = vpcIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcpeeringconnection.html#cfn-ec2-vpcpeeringconnection-peervpcid
+ecvpcpcPeerVpcId :: Lens' EC2VPCPeeringConnection (Val Text)
+ecvpcpcPeerVpcId = lens _eC2VPCPeeringConnectionPeerVpcId (\s a -> s { _eC2VPCPeeringConnectionPeerVpcId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcpeeringconnection.html#cfn-ec2-vpcpeeringconnection-tags
+ecvpcpcTags :: Lens' EC2VPCPeeringConnection (Maybe [Tag])
+ecvpcpcTags = lens _eC2VPCPeeringConnectionTags (\s a -> s { _eC2VPCPeeringConnectionTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcpeeringconnection.html#cfn-ec2-vpcpeeringconnection-vpcid
+ecvpcpcVpcId :: Lens' EC2VPCPeeringConnection (Val Text)
+ecvpcpcVpcId = lens _eC2VPCPeeringConnectionVpcId (\s a -> s { _eC2VPCPeeringConnectionVpcId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2VPNConnection.hs b/library-gen/Stratosphere/Resources/EC2VPNConnection.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2VPNConnection.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-connection.html
+
+module Stratosphere.Resources.EC2VPNConnection where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2VPNConnection. See 'ec2VPNConnection'
+-- | for a more convenient constructor.
+data EC2VPNConnection =
+  EC2VPNConnection
+  { _eC2VPNConnectionCustomerGatewayId :: Val Text
+  , _eC2VPNConnectionStaticRoutesOnly :: Maybe (Val Bool')
+  , _eC2VPNConnectionTags :: Maybe [Tag]
+  , _eC2VPNConnectionType :: Val Text
+  , _eC2VPNConnectionVpnGatewayId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2VPNConnection where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+instance FromJSON EC2VPNConnection where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+-- | Constructor for 'EC2VPNConnection' containing required fields as
+-- | arguments.
+ec2VPNConnection
+  :: Val Text -- ^ 'ecvpncCustomerGatewayId'
+  -> Val Text -- ^ 'ecvpncType'
+  -> Val Text -- ^ 'ecvpncVpnGatewayId'
+  -> EC2VPNConnection
+ec2VPNConnection customerGatewayIdarg typearg vpnGatewayIdarg =
+  EC2VPNConnection
+  { _eC2VPNConnectionCustomerGatewayId = customerGatewayIdarg
+  , _eC2VPNConnectionStaticRoutesOnly = Nothing
+  , _eC2VPNConnectionTags = Nothing
+  , _eC2VPNConnectionType = typearg
+  , _eC2VPNConnectionVpnGatewayId = vpnGatewayIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-connection.html#cfn-ec2-vpnconnection-customergatewayid
+ecvpncCustomerGatewayId :: Lens' EC2VPNConnection (Val Text)
+ecvpncCustomerGatewayId = lens _eC2VPNConnectionCustomerGatewayId (\s a -> s { _eC2VPNConnectionCustomerGatewayId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-connection.html#cfn-ec2-vpnconnection-StaticRoutesOnly
+ecvpncStaticRoutesOnly :: Lens' EC2VPNConnection (Maybe (Val Bool'))
+ecvpncStaticRoutesOnly = lens _eC2VPNConnectionStaticRoutesOnly (\s a -> s { _eC2VPNConnectionStaticRoutesOnly = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-connection.html#cfn-ec2-vpnconnection-tags
+ecvpncTags :: Lens' EC2VPNConnection (Maybe [Tag])
+ecvpncTags = lens _eC2VPNConnectionTags (\s a -> s { _eC2VPNConnectionTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-connection.html#cfn-ec2-vpnconnection-type
+ecvpncType :: Lens' EC2VPNConnection (Val Text)
+ecvpncType = lens _eC2VPNConnectionType (\s a -> s { _eC2VPNConnectionType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-connection.html#cfn-ec2-vpnconnection-vpngatewayid
+ecvpncVpnGatewayId :: Lens' EC2VPNConnection (Val Text)
+ecvpncVpnGatewayId = lens _eC2VPNConnectionVpnGatewayId (\s a -> s { _eC2VPNConnectionVpnGatewayId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2VPNConnectionRoute.hs b/library-gen/Stratosphere/Resources/EC2VPNConnectionRoute.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2VPNConnectionRoute.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-connection-route.html
+
+module Stratosphere.Resources.EC2VPNConnectionRoute where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2VPNConnectionRoute. See
+-- | 'ec2VPNConnectionRoute' for a more convenient constructor.
+data EC2VPNConnectionRoute =
+  EC2VPNConnectionRoute
+  { _eC2VPNConnectionRouteDestinationCidrBlock :: Val Text
+  , _eC2VPNConnectionRouteVpnConnectionId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2VPNConnectionRoute where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+instance FromJSON EC2VPNConnectionRoute where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+-- | Constructor for 'EC2VPNConnectionRoute' containing required fields as
+-- | arguments.
+ec2VPNConnectionRoute
+  :: Val Text -- ^ 'ecvpncrDestinationCidrBlock'
+  -> Val Text -- ^ 'ecvpncrVpnConnectionId'
+  -> EC2VPNConnectionRoute
+ec2VPNConnectionRoute destinationCidrBlockarg vpnConnectionIdarg =
+  EC2VPNConnectionRoute
+  { _eC2VPNConnectionRouteDestinationCidrBlock = destinationCidrBlockarg
+  , _eC2VPNConnectionRouteVpnConnectionId = vpnConnectionIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-connection-route.html#cfn-ec2-vpnconnectionroute-cidrblock
+ecvpncrDestinationCidrBlock :: Lens' EC2VPNConnectionRoute (Val Text)
+ecvpncrDestinationCidrBlock = lens _eC2VPNConnectionRouteDestinationCidrBlock (\s a -> s { _eC2VPNConnectionRouteDestinationCidrBlock = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-connection-route.html#cfn-ec2-vpnconnectionroute-connectionid
+ecvpncrVpnConnectionId :: Lens' EC2VPNConnectionRoute (Val Text)
+ecvpncrVpnConnectionId = lens _eC2VPNConnectionRouteVpnConnectionId (\s a -> s { _eC2VPNConnectionRouteVpnConnectionId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2VPNGateway.hs b/library-gen/Stratosphere/Resources/EC2VPNGateway.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2VPNGateway.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-gateway.html
+
+module Stratosphere.Resources.EC2VPNGateway where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2VPNGateway. See 'ec2VPNGateway' for a
+-- | more convenient constructor.
+data EC2VPNGateway =
+  EC2VPNGateway
+  { _eC2VPNGatewayTags :: Maybe [Tag]
+  , _eC2VPNGatewayType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2VPNGateway where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+instance FromJSON EC2VPNGateway where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+-- | Constructor for 'EC2VPNGateway' containing required fields as arguments.
+ec2VPNGateway
+  :: Val Text -- ^ 'ecvpngType'
+  -> EC2VPNGateway
+ec2VPNGateway typearg =
+  EC2VPNGateway
+  { _eC2VPNGatewayTags = Nothing
+  , _eC2VPNGatewayType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-gateway.html#cfn-ec2-vpngateway-tags
+ecvpngTags :: Lens' EC2VPNGateway (Maybe [Tag])
+ecvpngTags = lens _eC2VPNGatewayTags (\s a -> s { _eC2VPNGatewayTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-gateway.html#cfn-ec2-vpngateway-type
+ecvpngType :: Lens' EC2VPNGateway (Val Text)
+ecvpngType = lens _eC2VPNGatewayType (\s a -> s { _eC2VPNGatewayType = a })
diff --git a/library-gen/Stratosphere/Resources/EC2VPNGatewayRoutePropagation.hs b/library-gen/Stratosphere/Resources/EC2VPNGatewayRoutePropagation.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2VPNGatewayRoutePropagation.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-gatewayrouteprop.html
+
+module Stratosphere.Resources.EC2VPNGatewayRoutePropagation where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2VPNGatewayRoutePropagation. See
+-- | 'ec2VPNGatewayRoutePropagation' for a more convenient constructor.
+data EC2VPNGatewayRoutePropagation =
+  EC2VPNGatewayRoutePropagation
+  { _eC2VPNGatewayRoutePropagationRouteTableIds :: [Val Text]
+  , _eC2VPNGatewayRoutePropagationVpnGatewayId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2VPNGatewayRoutePropagation where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+instance FromJSON EC2VPNGatewayRoutePropagation where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+-- | Constructor for 'EC2VPNGatewayRoutePropagation' containing required
+-- | fields as arguments.
+ec2VPNGatewayRoutePropagation
+  :: [Val Text] -- ^ 'ecvpngrpRouteTableIds'
+  -> Val Text -- ^ 'ecvpngrpVpnGatewayId'
+  -> EC2VPNGatewayRoutePropagation
+ec2VPNGatewayRoutePropagation routeTableIdsarg vpnGatewayIdarg =
+  EC2VPNGatewayRoutePropagation
+  { _eC2VPNGatewayRoutePropagationRouteTableIds = routeTableIdsarg
+  , _eC2VPNGatewayRoutePropagationVpnGatewayId = vpnGatewayIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-gatewayrouteprop.html#cfn-ec2-vpngatewayrouteprop-routetableids
+ecvpngrpRouteTableIds :: Lens' EC2VPNGatewayRoutePropagation [Val Text]
+ecvpngrpRouteTableIds = lens _eC2VPNGatewayRoutePropagationRouteTableIds (\s a -> s { _eC2VPNGatewayRoutePropagationRouteTableIds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpn-gatewayrouteprop.html#cfn-ec2-vpngatewayrouteprop-vpngatewayid
+ecvpngrpVpnGatewayId :: Lens' EC2VPNGatewayRoutePropagation (Val Text)
+ecvpngrpVpnGatewayId = lens _eC2VPNGatewayRoutePropagationVpnGatewayId (\s a -> s { _eC2VPNGatewayRoutePropagationVpnGatewayId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2Volume.hs b/library-gen/Stratosphere/Resources/EC2Volume.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2Volume.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volume.html
+
+module Stratosphere.Resources.EC2Volume where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2Volume. See 'ec2Volume' for a more
+-- | convenient constructor.
+data EC2Volume =
+  EC2Volume
+  { _eC2VolumeAutoEnableIO :: Maybe (Val Bool')
+  , _eC2VolumeAvailabilityZone :: Val Text
+  , _eC2VolumeEncrypted :: Maybe (Val Bool')
+  , _eC2VolumeIops :: Maybe (Val Integer')
+  , _eC2VolumeKmsKeyId :: Maybe (Val Text)
+  , _eC2VolumeSize :: Maybe (Val Integer')
+  , _eC2VolumeSnapshotId :: Maybe (Val Text)
+  , _eC2VolumeTags :: Maybe [Tag]
+  , _eC2VolumeVolumeType :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EC2Volume where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+
+instance FromJSON EC2Volume where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+
+-- | Constructor for 'EC2Volume' containing required fields as arguments.
+ec2Volume
+  :: Val Text -- ^ 'ecvAvailabilityZone'
+  -> EC2Volume
+ec2Volume availabilityZonearg =
+  EC2Volume
+  { _eC2VolumeAutoEnableIO = Nothing
+  , _eC2VolumeAvailabilityZone = availabilityZonearg
+  , _eC2VolumeEncrypted = Nothing
+  , _eC2VolumeIops = Nothing
+  , _eC2VolumeKmsKeyId = Nothing
+  , _eC2VolumeSize = Nothing
+  , _eC2VolumeSnapshotId = Nothing
+  , _eC2VolumeTags = Nothing
+  , _eC2VolumeVolumeType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volume.html#cfn-ec2-ebs-volume-autoenableio
+ecvAutoEnableIO :: Lens' EC2Volume (Maybe (Val Bool'))
+ecvAutoEnableIO = lens _eC2VolumeAutoEnableIO (\s a -> s { _eC2VolumeAutoEnableIO = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volume.html#cfn-ec2-ebs-volume-availabilityzone
+ecvAvailabilityZone :: Lens' EC2Volume (Val Text)
+ecvAvailabilityZone = lens _eC2VolumeAvailabilityZone (\s a -> s { _eC2VolumeAvailabilityZone = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volume.html#cfn-ec2-ebs-volume-encrypted
+ecvEncrypted :: Lens' EC2Volume (Maybe (Val Bool'))
+ecvEncrypted = lens _eC2VolumeEncrypted (\s a -> s { _eC2VolumeEncrypted = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volume.html#cfn-ec2-ebs-volume-iops
+ecvIops :: Lens' EC2Volume (Maybe (Val Integer'))
+ecvIops = lens _eC2VolumeIops (\s a -> s { _eC2VolumeIops = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volume.html#cfn-ec2-ebs-volume-kmskeyid
+ecvKmsKeyId :: Lens' EC2Volume (Maybe (Val Text))
+ecvKmsKeyId = lens _eC2VolumeKmsKeyId (\s a -> s { _eC2VolumeKmsKeyId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volume.html#cfn-ec2-ebs-volume-size
+ecvSize :: Lens' EC2Volume (Maybe (Val Integer'))
+ecvSize = lens _eC2VolumeSize (\s a -> s { _eC2VolumeSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volume.html#cfn-ec2-ebs-volume-snapshotid
+ecvSnapshotId :: Lens' EC2Volume (Maybe (Val Text))
+ecvSnapshotId = lens _eC2VolumeSnapshotId (\s a -> s { _eC2VolumeSnapshotId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volume.html#cfn-ec2-ebs-volume-tags
+ecvTags :: Lens' EC2Volume (Maybe [Tag])
+ecvTags = lens _eC2VolumeTags (\s a -> s { _eC2VolumeTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volume.html#cfn-ec2-ebs-volume-volumetype
+ecvVolumeType :: Lens' EC2Volume (Maybe (Val Text))
+ecvVolumeType = lens _eC2VolumeVolumeType (\s a -> s { _eC2VolumeVolumeType = a })
diff --git a/library-gen/Stratosphere/Resources/EC2VolumeAttachment.hs b/library-gen/Stratosphere/Resources/EC2VolumeAttachment.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2VolumeAttachment.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volumeattachment.html
+
+module Stratosphere.Resources.EC2VolumeAttachment where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2VolumeAttachment. See
+-- | 'ec2VolumeAttachment' for a more convenient constructor.
+data EC2VolumeAttachment =
+  EC2VolumeAttachment
+  { _eC2VolumeAttachmentDevice :: Val Text
+  , _eC2VolumeAttachmentInstanceId :: Val Text
+  , _eC2VolumeAttachmentVolumeId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EC2VolumeAttachment where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+instance FromJSON EC2VolumeAttachment where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+-- | Constructor for 'EC2VolumeAttachment' containing required fields as
+-- | arguments.
+ec2VolumeAttachment
+  :: Val Text -- ^ 'ecvaDevice'
+  -> Val Text -- ^ 'ecvaInstanceId'
+  -> Val Text -- ^ 'ecvaVolumeId'
+  -> EC2VolumeAttachment
+ec2VolumeAttachment devicearg instanceIdarg volumeIdarg =
+  EC2VolumeAttachment
+  { _eC2VolumeAttachmentDevice = devicearg
+  , _eC2VolumeAttachmentInstanceId = instanceIdarg
+  , _eC2VolumeAttachmentVolumeId = volumeIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volumeattachment.html#cfn-ec2-ebs-volumeattachment-device
+ecvaDevice :: Lens' EC2VolumeAttachment (Val Text)
+ecvaDevice = lens _eC2VolumeAttachmentDevice (\s a -> s { _eC2VolumeAttachmentDevice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volumeattachment.html#cfn-ec2-ebs-volumeattachment-instanceid
+ecvaInstanceId :: Lens' EC2VolumeAttachment (Val Text)
+ecvaInstanceId = lens _eC2VolumeAttachmentInstanceId (\s a -> s { _eC2VolumeAttachmentInstanceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volumeattachment.html#cfn-ec2-ebs-volumeattachment-volumeid
+ecvaVolumeId :: Lens' EC2VolumeAttachment (Val Text)
+ecvaVolumeId = lens _eC2VolumeAttachmentVolumeId (\s a -> s { _eC2VolumeAttachmentVolumeId = a })
diff --git a/library-gen/Stratosphere/Resources/ECRRepository.hs b/library-gen/Stratosphere/Resources/ECRRepository.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ECRRepository.hs
@@ -0,0 +1,46 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html
+
+module Stratosphere.Resources.ECRRepository where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ECRRepository. See 'ecrRepository' for a
+-- | more convenient constructor.
+data ECRRepository =
+  ECRRepository
+  { _eCRRepositoryRepositoryName :: Maybe (Val Text)
+  , _eCRRepositoryRepositoryPolicyText :: Maybe Object
+  } deriving (Show, Generic)
+
+instance ToJSON ECRRepository where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+instance FromJSON ECRRepository where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+-- | Constructor for 'ECRRepository' containing required fields as arguments.
+ecrRepository
+  :: ECRRepository
+ecrRepository  =
+  ECRRepository
+  { _eCRRepositoryRepositoryName = Nothing
+  , _eCRRepositoryRepositoryPolicyText = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html#cfn-ecr-repository-repositoryname
+ecrrRepositoryName :: Lens' ECRRepository (Maybe (Val Text))
+ecrrRepositoryName = lens _eCRRepositoryRepositoryName (\s a -> s { _eCRRepositoryRepositoryName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html#cfn-ecr-repository-repositorypolicytext
+ecrrRepositoryPolicyText :: Lens' ECRRepository (Maybe Object)
+ecrrRepositoryPolicyText = lens _eCRRepositoryRepositoryPolicyText (\s a -> s { _eCRRepositoryRepositoryPolicyText = a })
diff --git a/library-gen/Stratosphere/Resources/ECSCluster.hs b/library-gen/Stratosphere/Resources/ECSCluster.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ECSCluster.hs
@@ -0,0 +1,40 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html
+
+module Stratosphere.Resources.ECSCluster where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ECSCluster. See 'ecsCluster' for a more
+-- | convenient constructor.
+data ECSCluster =
+  ECSCluster
+  { _eCSClusterClusterName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ECSCluster where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+
+instance FromJSON ECSCluster where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+
+-- | Constructor for 'ECSCluster' containing required fields as arguments.
+ecsCluster
+  :: ECSCluster
+ecsCluster  =
+  ECSCluster
+  { _eCSClusterClusterName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#cfn-ecs-cluster-clustername
+ecscClusterName :: Lens' ECSCluster (Maybe (Val Text))
+ecscClusterName = lens _eCSClusterClusterName (\s a -> s { _eCSClusterClusterName = a })
diff --git a/library-gen/Stratosphere/Resources/ECSService.hs b/library-gen/Stratosphere/Resources/ECSService.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ECSService.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html
+
+module Stratosphere.Resources.ECSService where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ECSServiceDeploymentConfiguration
+import Stratosphere.ResourceProperties.ECSServiceLoadBalancer
+
+-- | Full data type definition for ECSService. See 'ecsService' for a more
+-- | convenient constructor.
+data ECSService =
+  ECSService
+  { _eCSServiceCluster :: Maybe (Val Text)
+  , _eCSServiceDeploymentConfiguration :: Maybe ECSServiceDeploymentConfiguration
+  , _eCSServiceDesiredCount :: Val Integer'
+  , _eCSServiceLoadBalancers :: Maybe [ECSServiceLoadBalancer]
+  , _eCSServiceRole :: Maybe (Val Text)
+  , _eCSServiceTaskDefinition :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ECSService where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+
+instance FromJSON ECSService where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+
+-- | Constructor for 'ECSService' containing required fields as arguments.
+ecsService
+  :: Val Integer' -- ^ 'ecssDesiredCount'
+  -> Val Text -- ^ 'ecssTaskDefinition'
+  -> ECSService
+ecsService desiredCountarg taskDefinitionarg =
+  ECSService
+  { _eCSServiceCluster = Nothing
+  , _eCSServiceDeploymentConfiguration = Nothing
+  , _eCSServiceDesiredCount = desiredCountarg
+  , _eCSServiceLoadBalancers = Nothing
+  , _eCSServiceRole = Nothing
+  , _eCSServiceTaskDefinition = taskDefinitionarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-cluster
+ecssCluster :: Lens' ECSService (Maybe (Val Text))
+ecssCluster = lens _eCSServiceCluster (\s a -> s { _eCSServiceCluster = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-deploymentconfiguration
+ecssDeploymentConfiguration :: Lens' ECSService (Maybe ECSServiceDeploymentConfiguration)
+ecssDeploymentConfiguration = lens _eCSServiceDeploymentConfiguration (\s a -> s { _eCSServiceDeploymentConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-desiredcount
+ecssDesiredCount :: Lens' ECSService (Val Integer')
+ecssDesiredCount = lens _eCSServiceDesiredCount (\s a -> s { _eCSServiceDesiredCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-loadbalancers
+ecssLoadBalancers :: Lens' ECSService (Maybe [ECSServiceLoadBalancer])
+ecssLoadBalancers = lens _eCSServiceLoadBalancers (\s a -> s { _eCSServiceLoadBalancers = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-role
+ecssRole :: Lens' ECSService (Maybe (Val Text))
+ecssRole = lens _eCSServiceRole (\s a -> s { _eCSServiceRole = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-taskdefinition
+ecssTaskDefinition :: Lens' ECSService (Val Text)
+ecssTaskDefinition = lens _eCSServiceTaskDefinition (\s a -> s { _eCSServiceTaskDefinition = a })
diff --git a/library-gen/Stratosphere/Resources/ECSTaskDefinition.hs b/library-gen/Stratosphere/Resources/ECSTaskDefinition.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ECSTaskDefinition.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html
+
+module Stratosphere.Resources.ECSTaskDefinition where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ECSTaskDefinitionContainerDefinition
+import Stratosphere.ResourceProperties.ECSTaskDefinitionVolume
+
+-- | Full data type definition for ECSTaskDefinition. See 'ecsTaskDefinition'
+-- | for a more convenient constructor.
+data ECSTaskDefinition =
+  ECSTaskDefinition
+  { _eCSTaskDefinitionContainerDefinitions :: Maybe [ECSTaskDefinitionContainerDefinition]
+  , _eCSTaskDefinitionFamily :: Maybe (Val Text)
+  , _eCSTaskDefinitionNetworkMode :: Maybe (Val Text)
+  , _eCSTaskDefinitionTaskRoleArn :: Maybe (Val Text)
+  , _eCSTaskDefinitionVolumes :: Maybe [ECSTaskDefinitionVolume]
+  } deriving (Show, Generic)
+
+instance ToJSON ECSTaskDefinition where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+
+instance FromJSON ECSTaskDefinition where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+
+-- | Constructor for 'ECSTaskDefinition' containing required fields as
+-- | arguments.
+ecsTaskDefinition
+  :: ECSTaskDefinition
+ecsTaskDefinition  =
+  ECSTaskDefinition
+  { _eCSTaskDefinitionContainerDefinitions = Nothing
+  , _eCSTaskDefinitionFamily = Nothing
+  , _eCSTaskDefinitionNetworkMode = Nothing
+  , _eCSTaskDefinitionTaskRoleArn = Nothing
+  , _eCSTaskDefinitionVolumes = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-containerdefinitions
+ecstdContainerDefinitions :: Lens' ECSTaskDefinition (Maybe [ECSTaskDefinitionContainerDefinition])
+ecstdContainerDefinitions = lens _eCSTaskDefinitionContainerDefinitions (\s a -> s { _eCSTaskDefinitionContainerDefinitions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-family
+ecstdFamily :: Lens' ECSTaskDefinition (Maybe (Val Text))
+ecstdFamily = lens _eCSTaskDefinitionFamily (\s a -> s { _eCSTaskDefinitionFamily = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-networkmode
+ecstdNetworkMode :: Lens' ECSTaskDefinition (Maybe (Val Text))
+ecstdNetworkMode = lens _eCSTaskDefinitionNetworkMode (\s a -> s { _eCSTaskDefinitionNetworkMode = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-taskrolearn
+ecstdTaskRoleArn :: Lens' ECSTaskDefinition (Maybe (Val Text))
+ecstdTaskRoleArn = lens _eCSTaskDefinitionTaskRoleArn (\s a -> s { _eCSTaskDefinitionTaskRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-volumes
+ecstdVolumes :: Lens' ECSTaskDefinition (Maybe [ECSTaskDefinitionVolume])
+ecstdVolumes = lens _eCSTaskDefinitionVolumes (\s a -> s { _eCSTaskDefinitionVolumes = a })
diff --git a/library-gen/Stratosphere/Resources/EFSFileSystem.hs b/library-gen/Stratosphere/Resources/EFSFileSystem.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EFSFileSystem.hs
@@ -0,0 +1,46 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-filesystem.html
+
+module Stratosphere.Resources.EFSFileSystem where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EFSFileSystemElasticFileSystemTag
+
+-- | Full data type definition for EFSFileSystem. See 'efsFileSystem' for a
+-- | more convenient constructor.
+data EFSFileSystem =
+  EFSFileSystem
+  { _eFSFileSystemFileSystemTags :: Maybe [EFSFileSystemElasticFileSystemTag]
+  , _eFSFileSystemPerformanceMode :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EFSFileSystem where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+instance FromJSON EFSFileSystem where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+-- | Constructor for 'EFSFileSystem' containing required fields as arguments.
+efsFileSystem
+  :: EFSFileSystem
+efsFileSystem  =
+  EFSFileSystem
+  { _eFSFileSystemFileSystemTags = Nothing
+  , _eFSFileSystemPerformanceMode = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-filesystem.html#cfn-efs-filesystem-filesystemtags
+efsfsFileSystemTags :: Lens' EFSFileSystem (Maybe [EFSFileSystemElasticFileSystemTag])
+efsfsFileSystemTags = lens _eFSFileSystemFileSystemTags (\s a -> s { _eFSFileSystemFileSystemTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-filesystem.html#cfn-efs-filesystem-performancemode
+efsfsPerformanceMode :: Lens' EFSFileSystem (Maybe (Val Text))
+efsfsPerformanceMode = lens _eFSFileSystemPerformanceMode (\s a -> s { _eFSFileSystemPerformanceMode = a })
diff --git a/library-gen/Stratosphere/Resources/EFSMountTarget.hs b/library-gen/Stratosphere/Resources/EFSMountTarget.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EFSMountTarget.hs
@@ -0,0 +1,61 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-mounttarget.html
+
+module Stratosphere.Resources.EFSMountTarget where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EFSMountTarget. See 'efsMountTarget' for a
+-- | more convenient constructor.
+data EFSMountTarget =
+  EFSMountTarget
+  { _eFSMountTargetFileSystemId :: Val Text
+  , _eFSMountTargetIpAddress :: Maybe (Val Text)
+  , _eFSMountTargetSecurityGroups :: [Val Text]
+  , _eFSMountTargetSubnetId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EFSMountTarget where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+instance FromJSON EFSMountTarget where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+-- | Constructor for 'EFSMountTarget' containing required fields as arguments.
+efsMountTarget
+  :: Val Text -- ^ 'efsmtFileSystemId'
+  -> [Val Text] -- ^ 'efsmtSecurityGroups'
+  -> Val Text -- ^ 'efsmtSubnetId'
+  -> EFSMountTarget
+efsMountTarget fileSystemIdarg securityGroupsarg subnetIdarg =
+  EFSMountTarget
+  { _eFSMountTargetFileSystemId = fileSystemIdarg
+  , _eFSMountTargetIpAddress = Nothing
+  , _eFSMountTargetSecurityGroups = securityGroupsarg
+  , _eFSMountTargetSubnetId = subnetIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-mounttarget.html#cfn-efs-mounttarget-filesystemid
+efsmtFileSystemId :: Lens' EFSMountTarget (Val Text)
+efsmtFileSystemId = lens _eFSMountTargetFileSystemId (\s a -> s { _eFSMountTargetFileSystemId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-mounttarget.html#cfn-efs-mounttarget-ipaddress
+efsmtIpAddress :: Lens' EFSMountTarget (Maybe (Val Text))
+efsmtIpAddress = lens _eFSMountTargetIpAddress (\s a -> s { _eFSMountTargetIpAddress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-mounttarget.html#cfn-efs-mounttarget-securitygroups
+efsmtSecurityGroups :: Lens' EFSMountTarget [Val Text]
+efsmtSecurityGroups = lens _eFSMountTargetSecurityGroups (\s a -> s { _eFSMountTargetSecurityGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-mounttarget.html#cfn-efs-mounttarget-subnetid
+efsmtSubnetId :: Lens' EFSMountTarget (Val Text)
+efsmtSubnetId = lens _eFSMountTargetSubnetId (\s a -> s { _eFSMountTargetSubnetId = a })
diff --git a/library-gen/Stratosphere/Resources/EIP.hs b/library-gen/Stratosphere/Resources/EIP.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/EIP.hs
+++ /dev/null
@@ -1,55 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::EC2::EIP resource allocates an Elastic IP (EIP) address and can,
--- optionally, associate it with an Amazon EC2 instance.
-
-module Stratosphere.Resources.EIP where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for EIP. See 'eip' for a more convenient
--- constructor.
-data EIP =
-  EIP
-  { _eIPInstanceId :: Maybe (Val Text)
-  , _eIPDomain :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON EIP where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 4, omitNothingFields = True }
-
-instance FromJSON EIP where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 4, omitNothingFields = True }
-
--- | Constructor for 'EIP' containing required fields as arguments.
-eip
-  :: EIP
-eip  =
-  EIP
-  { _eIPInstanceId = Nothing
-  , _eIPDomain = Nothing
-  }
-
--- | The Instance ID of the Amazon EC2 instance that you want to associate
--- with this Elastic IP address.
-eipInstanceId :: Lens' EIP (Maybe (Val Text))
-eipInstanceId = lens _eIPInstanceId (\s a -> s { _eIPInstanceId = a })
-
--- | Set to vpc to allocate the address to your Virtual Private Cloud (VPC).
--- No other values are supported. Note If you define an Elastic IP address and
--- associate it with a VPC that is defined in the same template, you must
--- declare a dependency on the VPC-gateway attachment by using the DependsOn
--- attribute on this resource. For more information, see DependsOn Attribute.
--- For more information, see AllocateAddress in the Amazon EC2 API Reference.
--- For more information about Elastic IP Addresses in VPC, go to IP Addressing
--- in Your VPC in the Amazon VPC User Guide.
-eipDomain :: Lens' EIP (Maybe (Val Text))
-eipDomain = lens _eIPDomain (\s a -> s { _eIPDomain = a })
diff --git a/library-gen/Stratosphere/Resources/EIPAssociation.hs b/library-gen/Stratosphere/Resources/EIPAssociation.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/EIPAssociation.hs
+++ /dev/null
@@ -1,78 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::EC2::EIPAssociation resource type associates an Elastic IP
--- address with an Amazon EC2 instance. The Elastic IP address can be an
--- existing Elastic IP address or an Elastic IP address allocated through an
--- AWS::EC2::EIP resource. This type supports updates. For more information
--- about updating stacks, see AWS CloudFormation Stacks Updates.
-
-module Stratosphere.Resources.EIPAssociation where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for EIPAssociation. See 'eipAssociation' for a
--- more convenient constructor.
-data EIPAssociation =
-  EIPAssociation
-  { _eIPAssociationAllocationId :: Maybe (Val Text)
-  , _eIPAssociationEIP :: Maybe (Val Text)
-  , _eIPAssociationInstanceId :: Maybe (Val Text)
-  , _eIPAssociationNetworkInterfaceId :: Maybe (Val Text)
-  , _eIPAssociationPrivateIpAddress :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON EIPAssociation where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
-
-instance FromJSON EIPAssociation where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
-
--- | Constructor for 'EIPAssociation' containing required fields as arguments.
-eipAssociation
-  :: EIPAssociation
-eipAssociation  =
-  EIPAssociation
-  { _eIPAssociationAllocationId = Nothing
-  , _eIPAssociationEIP = Nothing
-  , _eIPAssociationInstanceId = Nothing
-  , _eIPAssociationNetworkInterfaceId = Nothing
-  , _eIPAssociationPrivateIpAddress = Nothing
-  }
-
--- | Allocation ID for the VPC Elastic IP address you want to associate with
--- an Amazon EC2 instance in your VPC.
-eipaAllocationId :: Lens' EIPAssociation (Maybe (Val Text))
-eipaAllocationId = lens _eIPAssociationAllocationId (\s a -> s { _eIPAssociationAllocationId = a })
-
--- | Elastic IP address that you want to associate with the Amazon EC2
--- instance specified by the InstanceId property. You can specify an existing
--- Elastic IP address or a reference to an Elastic IP address allocated with a
--- AWS::EC2::EIP resource.
-eipaEIP :: Lens' EIPAssociation (Maybe (Val Text))
-eipaEIP = lens _eIPAssociationEIP (\s a -> s { _eIPAssociationEIP = a })
-
--- | Instance ID of the Amazon EC2 instance that you want to associate with
--- the Elastic IP address specified by the EIP property.
-eipaInstanceId :: Lens' EIPAssociation (Maybe (Val Text))
-eipaInstanceId = lens _eIPAssociationInstanceId (\s a -> s { _eIPAssociationInstanceId = a })
-
--- | The ID of the network interface to associate with the Elastic IP address
--- (VPC only).
-eipaNetworkInterfaceId :: Lens' EIPAssociation (Maybe (Val Text))
-eipaNetworkInterfaceId = lens _eIPAssociationNetworkInterfaceId (\s a -> s { _eIPAssociationNetworkInterfaceId = a })
-
--- | The private IP address that you want to associate with the Elastic IP
--- address. The private IP address is restricted to the primary and secondary
--- private IP addresses that are associated with the network interface. By
--- default, the private IP address that is associated with the EIP is the
--- primary private IP address of the network interface.
-eipaPrivateIpAddress :: Lens' EIPAssociation (Maybe (Val Text))
-eipaPrivateIpAddress = lens _eIPAssociationPrivateIpAddress (\s a -> s { _eIPAssociationPrivateIpAddress = a })
diff --git a/library-gen/Stratosphere/Resources/EMRCluster.hs b/library-gen/Stratosphere/Resources/EMRCluster.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EMRCluster.hs
@@ -0,0 +1,114 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html
+
+module Stratosphere.Resources.EMRCluster where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRClusterApplication
+import Stratosphere.ResourceProperties.EMRClusterBootstrapActionConfig
+import Stratosphere.ResourceProperties.EMRClusterConfiguration
+import Stratosphere.ResourceProperties.EMRClusterJobFlowInstancesConfig
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EMRCluster. See 'emrCluster' for a more
+-- | convenient constructor.
+data EMRCluster =
+  EMRCluster
+  { _eMRClusterAdditionalInfo :: Maybe Object
+  , _eMRClusterApplications :: Maybe [EMRClusterApplication]
+  , _eMRClusterBootstrapActions :: Maybe [EMRClusterBootstrapActionConfig]
+  , _eMRClusterConfigurations :: Maybe [EMRClusterConfiguration]
+  , _eMRClusterInstances :: EMRClusterJobFlowInstancesConfig
+  , _eMRClusterJobFlowRole :: Val Text
+  , _eMRClusterLogUri :: Maybe (Val Text)
+  , _eMRClusterName :: Val Text
+  , _eMRClusterReleaseLabel :: Maybe (Val Text)
+  , _eMRClusterServiceRole :: Val Text
+  , _eMRClusterTags :: Maybe [Tag]
+  , _eMRClusterVisibleToAllUsers :: Maybe (Val Bool')
+  } deriving (Show, Generic)
+
+instance ToJSON EMRCluster where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+
+instance FromJSON EMRCluster where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
+
+-- | Constructor for 'EMRCluster' containing required fields as arguments.
+emrCluster
+  :: EMRClusterJobFlowInstancesConfig -- ^ 'emrcInstances'
+  -> Val Text -- ^ 'emrcJobFlowRole'
+  -> Val Text -- ^ 'emrcName'
+  -> Val Text -- ^ 'emrcServiceRole'
+  -> EMRCluster
+emrCluster instancesarg jobFlowRolearg namearg serviceRolearg =
+  EMRCluster
+  { _eMRClusterAdditionalInfo = Nothing
+  , _eMRClusterApplications = Nothing
+  , _eMRClusterBootstrapActions = Nothing
+  , _eMRClusterConfigurations = Nothing
+  , _eMRClusterInstances = instancesarg
+  , _eMRClusterJobFlowRole = jobFlowRolearg
+  , _eMRClusterLogUri = Nothing
+  , _eMRClusterName = namearg
+  , _eMRClusterReleaseLabel = Nothing
+  , _eMRClusterServiceRole = serviceRolearg
+  , _eMRClusterTags = Nothing
+  , _eMRClusterVisibleToAllUsers = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-emr-cluster-additionalinfo
+emrcAdditionalInfo :: Lens' EMRCluster (Maybe Object)
+emrcAdditionalInfo = lens _eMRClusterAdditionalInfo (\s a -> s { _eMRClusterAdditionalInfo = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-emr-cluster-applications
+emrcApplications :: Lens' EMRCluster (Maybe [EMRClusterApplication])
+emrcApplications = lens _eMRClusterApplications (\s a -> s { _eMRClusterApplications = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-emr-cluster-bootstrapactions
+emrcBootstrapActions :: Lens' EMRCluster (Maybe [EMRClusterBootstrapActionConfig])
+emrcBootstrapActions = lens _eMRClusterBootstrapActions (\s a -> s { _eMRClusterBootstrapActions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-emr-cluster-configurations
+emrcConfigurations :: Lens' EMRCluster (Maybe [EMRClusterConfiguration])
+emrcConfigurations = lens _eMRClusterConfigurations (\s a -> s { _eMRClusterConfigurations = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-emr-cluster-instances
+emrcInstances :: Lens' EMRCluster EMRClusterJobFlowInstancesConfig
+emrcInstances = lens _eMRClusterInstances (\s a -> s { _eMRClusterInstances = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-emr-cluster-jobflowrole
+emrcJobFlowRole :: Lens' EMRCluster (Val Text)
+emrcJobFlowRole = lens _eMRClusterJobFlowRole (\s a -> s { _eMRClusterJobFlowRole = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-emr-cluster-loguri
+emrcLogUri :: Lens' EMRCluster (Maybe (Val Text))
+emrcLogUri = lens _eMRClusterLogUri (\s a -> s { _eMRClusterLogUri = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-emr-cluster-name
+emrcName :: Lens' EMRCluster (Val Text)
+emrcName = lens _eMRClusterName (\s a -> s { _eMRClusterName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-emr-cluster-releaselabel
+emrcReleaseLabel :: Lens' EMRCluster (Maybe (Val Text))
+emrcReleaseLabel = lens _eMRClusterReleaseLabel (\s a -> s { _eMRClusterReleaseLabel = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-emr-cluster-servicerole
+emrcServiceRole :: Lens' EMRCluster (Val Text)
+emrcServiceRole = lens _eMRClusterServiceRole (\s a -> s { _eMRClusterServiceRole = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-elasticmapreduce-cluster-tags
+emrcTags :: Lens' EMRCluster (Maybe [Tag])
+emrcTags = lens _eMRClusterTags (\s a -> s { _eMRClusterTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-emr-cluster-visibletoallusers
+emrcVisibleToAllUsers :: Lens' EMRCluster (Maybe (Val Bool'))
+emrcVisibleToAllUsers = lens _eMRClusterVisibleToAllUsers (\s a -> s { _eMRClusterVisibleToAllUsers = a })
diff --git a/library-gen/Stratosphere/Resources/EMRInstanceGroupConfig.hs b/library-gen/Stratosphere/Resources/EMRInstanceGroupConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EMRInstanceGroupConfig.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html
+
+module Stratosphere.Resources.EMRInstanceGroupConfig where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigConfiguration
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigEbsConfiguration
+
+-- | Full data type definition for EMRInstanceGroupConfig. See
+-- | 'emrInstanceGroupConfig' for a more convenient constructor.
+data EMRInstanceGroupConfig =
+  EMRInstanceGroupConfig
+  { _eMRInstanceGroupConfigBidPrice :: Maybe (Val Text)
+  , _eMRInstanceGroupConfigConfigurations :: Maybe [EMRInstanceGroupConfigConfiguration]
+  , _eMRInstanceGroupConfigEbsConfiguration :: Maybe EMRInstanceGroupConfigEbsConfiguration
+  , _eMRInstanceGroupConfigInstanceCount :: Val Integer'
+  , _eMRInstanceGroupConfigInstanceRole :: Val Text
+  , _eMRInstanceGroupConfigInstanceType :: Val Text
+  , _eMRInstanceGroupConfigJobFlowId :: Val Text
+  , _eMRInstanceGroupConfigMarket :: Maybe (Val Text)
+  , _eMRInstanceGroupConfigName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON EMRInstanceGroupConfig where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+instance FromJSON EMRInstanceGroupConfig where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+-- | Constructor for 'EMRInstanceGroupConfig' containing required fields as
+-- | arguments.
+emrInstanceGroupConfig
+  :: Val Integer' -- ^ 'emrigcInstanceCount'
+  -> Val Text -- ^ 'emrigcInstanceRole'
+  -> Val Text -- ^ 'emrigcInstanceType'
+  -> Val Text -- ^ 'emrigcJobFlowId'
+  -> EMRInstanceGroupConfig
+emrInstanceGroupConfig instanceCountarg instanceRolearg instanceTypearg jobFlowIdarg =
+  EMRInstanceGroupConfig
+  { _eMRInstanceGroupConfigBidPrice = Nothing
+  , _eMRInstanceGroupConfigConfigurations = Nothing
+  , _eMRInstanceGroupConfigEbsConfiguration = Nothing
+  , _eMRInstanceGroupConfigInstanceCount = instanceCountarg
+  , _eMRInstanceGroupConfigInstanceRole = instanceRolearg
+  , _eMRInstanceGroupConfigInstanceType = instanceTypearg
+  , _eMRInstanceGroupConfigJobFlowId = jobFlowIdarg
+  , _eMRInstanceGroupConfigMarket = Nothing
+  , _eMRInstanceGroupConfigName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-bidprice
+emrigcBidPrice :: Lens' EMRInstanceGroupConfig (Maybe (Val Text))
+emrigcBidPrice = lens _eMRInstanceGroupConfigBidPrice (\s a -> s { _eMRInstanceGroupConfigBidPrice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-configurations
+emrigcConfigurations :: Lens' EMRInstanceGroupConfig (Maybe [EMRInstanceGroupConfigConfiguration])
+emrigcConfigurations = lens _eMRInstanceGroupConfigConfigurations (\s a -> s { _eMRInstanceGroupConfigConfigurations = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-ebsconfiguration
+emrigcEbsConfiguration :: Lens' EMRInstanceGroupConfig (Maybe EMRInstanceGroupConfigEbsConfiguration)
+emrigcEbsConfiguration = lens _eMRInstanceGroupConfigEbsConfiguration (\s a -> s { _eMRInstanceGroupConfigEbsConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfiginstancecount-
+emrigcInstanceCount :: Lens' EMRInstanceGroupConfig (Val Integer')
+emrigcInstanceCount = lens _eMRInstanceGroupConfigInstanceCount (\s a -> s { _eMRInstanceGroupConfigInstanceCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-instancerole
+emrigcInstanceRole :: Lens' EMRInstanceGroupConfig (Val Text)
+emrigcInstanceRole = lens _eMRInstanceGroupConfigInstanceRole (\s a -> s { _eMRInstanceGroupConfigInstanceRole = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-instancetype
+emrigcInstanceType :: Lens' EMRInstanceGroupConfig (Val Text)
+emrigcInstanceType = lens _eMRInstanceGroupConfigInstanceType (\s a -> s { _eMRInstanceGroupConfigInstanceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-jobflowid
+emrigcJobFlowId :: Lens' EMRInstanceGroupConfig (Val Text)
+emrigcJobFlowId = lens _eMRInstanceGroupConfigJobFlowId (\s a -> s { _eMRInstanceGroupConfigJobFlowId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-market
+emrigcMarket :: Lens' EMRInstanceGroupConfig (Maybe (Val Text))
+emrigcMarket = lens _eMRInstanceGroupConfigMarket (\s a -> s { _eMRInstanceGroupConfigMarket = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-name
+emrigcName :: Lens' EMRInstanceGroupConfig (Maybe (Val Text))
+emrigcName = lens _eMRInstanceGroupConfigName (\s a -> s { _eMRInstanceGroupConfigName = a })
diff --git a/library-gen/Stratosphere/Resources/EMRStep.hs b/library-gen/Stratosphere/Resources/EMRStep.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EMRStep.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-step.html
+
+module Stratosphere.Resources.EMRStep where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRStepHadoopJarStepConfig
+
+-- | Full data type definition for EMRStep. See 'emrStep' for a more
+-- | convenient constructor.
+data EMRStep =
+  EMRStep
+  { _eMRStepActionOnFailure :: Val Text
+  , _eMRStepHadoopJarStep :: EMRStepHadoopJarStepConfig
+  , _eMRStepJobFlowId :: Val Text
+  , _eMRStepName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON EMRStep where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+
+instance FromJSON EMRStep where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+
+-- | Constructor for 'EMRStep' containing required fields as arguments.
+emrStep
+  :: Val Text -- ^ 'emrsActionOnFailure'
+  -> EMRStepHadoopJarStepConfig -- ^ 'emrsHadoopJarStep'
+  -> Val Text -- ^ 'emrsJobFlowId'
+  -> Val Text -- ^ 'emrsName'
+  -> EMRStep
+emrStep actionOnFailurearg hadoopJarSteparg jobFlowIdarg namearg =
+  EMRStep
+  { _eMRStepActionOnFailure = actionOnFailurearg
+  , _eMRStepHadoopJarStep = hadoopJarSteparg
+  , _eMRStepJobFlowId = jobFlowIdarg
+  , _eMRStepName = namearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-step.html#cfn-elasticmapreduce-step-actiononfailure
+emrsActionOnFailure :: Lens' EMRStep (Val Text)
+emrsActionOnFailure = lens _eMRStepActionOnFailure (\s a -> s { _eMRStepActionOnFailure = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-step.html#cfn-elasticmapreduce-step-hadoopjarstep
+emrsHadoopJarStep :: Lens' EMRStep EMRStepHadoopJarStepConfig
+emrsHadoopJarStep = lens _eMRStepHadoopJarStep (\s a -> s { _eMRStepHadoopJarStep = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-step.html#cfn-elasticmapreduce-step-jobflowid
+emrsJobFlowId :: Lens' EMRStep (Val Text)
+emrsJobFlowId = lens _eMRStepJobFlowId (\s a -> s { _eMRStepJobFlowId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-step.html#cfn-elasticmapreduce-step-name
+emrsName :: Lens' EMRStep (Val Text)
+emrsName = lens _eMRStepName (\s a -> s { _eMRStepName = a })
diff --git a/library-gen/Stratosphere/Resources/ElastiCacheCacheCluster.hs b/library-gen/Stratosphere/Resources/ElastiCacheCacheCluster.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ElastiCacheCacheCluster.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html
+
+module Stratosphere.Resources.ElastiCacheCacheCluster where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for ElastiCacheCacheCluster. See
+-- | 'elastiCacheCacheCluster' for a more convenient constructor.
+data ElastiCacheCacheCluster =
+  ElastiCacheCacheCluster
+  { _elastiCacheCacheClusterAZMode :: Maybe (Val Text)
+  , _elastiCacheCacheClusterAutoMinorVersionUpgrade :: Maybe (Val Bool')
+  , _elastiCacheCacheClusterCacheNodeType :: Val Text
+  , _elastiCacheCacheClusterCacheParameterGroupName :: Maybe (Val Text)
+  , _elastiCacheCacheClusterCacheSecurityGroupNames :: Maybe [Val Text]
+  , _elastiCacheCacheClusterCacheSubnetGroupName :: Maybe (Val Text)
+  , _elastiCacheCacheClusterClusterName :: Maybe (Val Text)
+  , _elastiCacheCacheClusterEngine :: Val Text
+  , _elastiCacheCacheClusterEngineVersion :: Maybe (Val Text)
+  , _elastiCacheCacheClusterNotificationTopicArn :: Maybe (Val Text)
+  , _elastiCacheCacheClusterNumCacheNodes :: Val Integer'
+  , _elastiCacheCacheClusterPort :: Maybe (Val Integer')
+  , _elastiCacheCacheClusterPreferredAvailabilityZone :: Maybe (Val Text)
+  , _elastiCacheCacheClusterPreferredAvailabilityZones :: Maybe [Val Text]
+  , _elastiCacheCacheClusterPreferredMaintenanceWindow :: Maybe (Val Text)
+  , _elastiCacheCacheClusterSnapshotArns :: Maybe [Val Text]
+  , _elastiCacheCacheClusterSnapshotName :: Maybe (Val Text)
+  , _elastiCacheCacheClusterSnapshotRetentionLimit :: Maybe (Val Integer')
+  , _elastiCacheCacheClusterSnapshotWindow :: Maybe (Val Text)
+  , _elastiCacheCacheClusterTags :: Maybe [Tag]
+  , _elastiCacheCacheClusterVpcSecurityGroupIds :: Maybe [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON ElastiCacheCacheCluster where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+instance FromJSON ElastiCacheCacheCluster where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+-- | Constructor for 'ElastiCacheCacheCluster' containing required fields as
+-- | arguments.
+elastiCacheCacheCluster
+  :: Val Text -- ^ 'ecccCacheNodeType'
+  -> Val Text -- ^ 'ecccEngine'
+  -> Val Integer' -- ^ 'ecccNumCacheNodes'
+  -> ElastiCacheCacheCluster
+elastiCacheCacheCluster cacheNodeTypearg enginearg numCacheNodesarg =
+  ElastiCacheCacheCluster
+  { _elastiCacheCacheClusterAZMode = Nothing
+  , _elastiCacheCacheClusterAutoMinorVersionUpgrade = Nothing
+  , _elastiCacheCacheClusterCacheNodeType = cacheNodeTypearg
+  , _elastiCacheCacheClusterCacheParameterGroupName = Nothing
+  , _elastiCacheCacheClusterCacheSecurityGroupNames = Nothing
+  , _elastiCacheCacheClusterCacheSubnetGroupName = Nothing
+  , _elastiCacheCacheClusterClusterName = Nothing
+  , _elastiCacheCacheClusterEngine = enginearg
+  , _elastiCacheCacheClusterEngineVersion = Nothing
+  , _elastiCacheCacheClusterNotificationTopicArn = Nothing
+  , _elastiCacheCacheClusterNumCacheNodes = numCacheNodesarg
+  , _elastiCacheCacheClusterPort = Nothing
+  , _elastiCacheCacheClusterPreferredAvailabilityZone = Nothing
+  , _elastiCacheCacheClusterPreferredAvailabilityZones = Nothing
+  , _elastiCacheCacheClusterPreferredMaintenanceWindow = Nothing
+  , _elastiCacheCacheClusterSnapshotArns = Nothing
+  , _elastiCacheCacheClusterSnapshotName = Nothing
+  , _elastiCacheCacheClusterSnapshotRetentionLimit = Nothing
+  , _elastiCacheCacheClusterSnapshotWindow = Nothing
+  , _elastiCacheCacheClusterTags = Nothing
+  , _elastiCacheCacheClusterVpcSecurityGroupIds = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-azmode
+ecccAZMode :: Lens' ElastiCacheCacheCluster (Maybe (Val Text))
+ecccAZMode = lens _elastiCacheCacheClusterAZMode (\s a -> s { _elastiCacheCacheClusterAZMode = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-autominorversionupgrade
+ecccAutoMinorVersionUpgrade :: Lens' ElastiCacheCacheCluster (Maybe (Val Bool'))
+ecccAutoMinorVersionUpgrade = lens _elastiCacheCacheClusterAutoMinorVersionUpgrade (\s a -> s { _elastiCacheCacheClusterAutoMinorVersionUpgrade = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-cachenodetype
+ecccCacheNodeType :: Lens' ElastiCacheCacheCluster (Val Text)
+ecccCacheNodeType = lens _elastiCacheCacheClusterCacheNodeType (\s a -> s { _elastiCacheCacheClusterCacheNodeType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-cacheparametergroupname
+ecccCacheParameterGroupName :: Lens' ElastiCacheCacheCluster (Maybe (Val Text))
+ecccCacheParameterGroupName = lens _elastiCacheCacheClusterCacheParameterGroupName (\s a -> s { _elastiCacheCacheClusterCacheParameterGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-cachesecuritygroupnames
+ecccCacheSecurityGroupNames :: Lens' ElastiCacheCacheCluster (Maybe [Val Text])
+ecccCacheSecurityGroupNames = lens _elastiCacheCacheClusterCacheSecurityGroupNames (\s a -> s { _elastiCacheCacheClusterCacheSecurityGroupNames = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-cachesubnetgroupname
+ecccCacheSubnetGroupName :: Lens' ElastiCacheCacheCluster (Maybe (Val Text))
+ecccCacheSubnetGroupName = lens _elastiCacheCacheClusterCacheSubnetGroupName (\s a -> s { _elastiCacheCacheClusterCacheSubnetGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-clustername
+ecccClusterName :: Lens' ElastiCacheCacheCluster (Maybe (Val Text))
+ecccClusterName = lens _elastiCacheCacheClusterClusterName (\s a -> s { _elastiCacheCacheClusterClusterName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-engine
+ecccEngine :: Lens' ElastiCacheCacheCluster (Val Text)
+ecccEngine = lens _elastiCacheCacheClusterEngine (\s a -> s { _elastiCacheCacheClusterEngine = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-engineversion
+ecccEngineVersion :: Lens' ElastiCacheCacheCluster (Maybe (Val Text))
+ecccEngineVersion = lens _elastiCacheCacheClusterEngineVersion (\s a -> s { _elastiCacheCacheClusterEngineVersion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-notificationtopicarn
+ecccNotificationTopicArn :: Lens' ElastiCacheCacheCluster (Maybe (Val Text))
+ecccNotificationTopicArn = lens _elastiCacheCacheClusterNotificationTopicArn (\s a -> s { _elastiCacheCacheClusterNotificationTopicArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-numcachenodes
+ecccNumCacheNodes :: Lens' ElastiCacheCacheCluster (Val Integer')
+ecccNumCacheNodes = lens _elastiCacheCacheClusterNumCacheNodes (\s a -> s { _elastiCacheCacheClusterNumCacheNodes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-port
+ecccPort :: Lens' ElastiCacheCacheCluster (Maybe (Val Integer'))
+ecccPort = lens _elastiCacheCacheClusterPort (\s a -> s { _elastiCacheCacheClusterPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-preferredavailabilityzone
+ecccPreferredAvailabilityZone :: Lens' ElastiCacheCacheCluster (Maybe (Val Text))
+ecccPreferredAvailabilityZone = lens _elastiCacheCacheClusterPreferredAvailabilityZone (\s a -> s { _elastiCacheCacheClusterPreferredAvailabilityZone = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-preferredavailabilityzones
+ecccPreferredAvailabilityZones :: Lens' ElastiCacheCacheCluster (Maybe [Val Text])
+ecccPreferredAvailabilityZones = lens _elastiCacheCacheClusterPreferredAvailabilityZones (\s a -> s { _elastiCacheCacheClusterPreferredAvailabilityZones = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-preferredmaintenancewindow
+ecccPreferredMaintenanceWindow :: Lens' ElastiCacheCacheCluster (Maybe (Val Text))
+ecccPreferredMaintenanceWindow = lens _elastiCacheCacheClusterPreferredMaintenanceWindow (\s a -> s { _elastiCacheCacheClusterPreferredMaintenanceWindow = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-snapshotarns
+ecccSnapshotArns :: Lens' ElastiCacheCacheCluster (Maybe [Val Text])
+ecccSnapshotArns = lens _elastiCacheCacheClusterSnapshotArns (\s a -> s { _elastiCacheCacheClusterSnapshotArns = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-snapshotname
+ecccSnapshotName :: Lens' ElastiCacheCacheCluster (Maybe (Val Text))
+ecccSnapshotName = lens _elastiCacheCacheClusterSnapshotName (\s a -> s { _elastiCacheCacheClusterSnapshotName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-snapshotretentionlimit
+ecccSnapshotRetentionLimit :: Lens' ElastiCacheCacheCluster (Maybe (Val Integer'))
+ecccSnapshotRetentionLimit = lens _elastiCacheCacheClusterSnapshotRetentionLimit (\s a -> s { _elastiCacheCacheClusterSnapshotRetentionLimit = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-snapshotwindow
+ecccSnapshotWindow :: Lens' ElastiCacheCacheCluster (Maybe (Val Text))
+ecccSnapshotWindow = lens _elastiCacheCacheClusterSnapshotWindow (\s a -> s { _elastiCacheCacheClusterSnapshotWindow = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-tags
+ecccTags :: Lens' ElastiCacheCacheCluster (Maybe [Tag])
+ecccTags = lens _elastiCacheCacheClusterTags (\s a -> s { _elastiCacheCacheClusterTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html#cfn-elasticache-cachecluster-vpcsecuritygroupids
+ecccVpcSecurityGroupIds :: Lens' ElastiCacheCacheCluster (Maybe [Val Text])
+ecccVpcSecurityGroupIds = lens _elastiCacheCacheClusterVpcSecurityGroupIds (\s a -> s { _elastiCacheCacheClusterVpcSecurityGroupIds = a })
diff --git a/library-gen/Stratosphere/Resources/ElastiCacheParameterGroup.hs b/library-gen/Stratosphere/Resources/ElastiCacheParameterGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ElastiCacheParameterGroup.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-parameter-group.html
+
+module Stratosphere.Resources.ElastiCacheParameterGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ElastiCacheParameterGroup. See
+-- | 'elastiCacheParameterGroup' for a more convenient constructor.
+data ElastiCacheParameterGroup =
+  ElastiCacheParameterGroup
+  { _elastiCacheParameterGroupCacheParameterGroupFamily :: Val Text
+  , _elastiCacheParameterGroupDescription :: Val Text
+  , _elastiCacheParameterGroupProperties :: Maybe Object
+  } deriving (Show, Generic)
+
+instance ToJSON ElastiCacheParameterGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+instance FromJSON ElastiCacheParameterGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+-- | Constructor for 'ElastiCacheParameterGroup' containing required fields as
+-- | arguments.
+elastiCacheParameterGroup
+  :: Val Text -- ^ 'ecpgCacheParameterGroupFamily'
+  -> Val Text -- ^ 'ecpgDescription'
+  -> ElastiCacheParameterGroup
+elastiCacheParameterGroup cacheParameterGroupFamilyarg descriptionarg =
+  ElastiCacheParameterGroup
+  { _elastiCacheParameterGroupCacheParameterGroupFamily = cacheParameterGroupFamilyarg
+  , _elastiCacheParameterGroupDescription = descriptionarg
+  , _elastiCacheParameterGroupProperties = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-parameter-group.html#cfn-elasticache-parametergroup-cacheparametergroupfamily
+ecpgCacheParameterGroupFamily :: Lens' ElastiCacheParameterGroup (Val Text)
+ecpgCacheParameterGroupFamily = lens _elastiCacheParameterGroupCacheParameterGroupFamily (\s a -> s { _elastiCacheParameterGroupCacheParameterGroupFamily = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-parameter-group.html#cfn-elasticache-parametergroup-description
+ecpgDescription :: Lens' ElastiCacheParameterGroup (Val Text)
+ecpgDescription = lens _elastiCacheParameterGroupDescription (\s a -> s { _elastiCacheParameterGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-parameter-group.html#cfn-elasticache-parametergroup-properties
+ecpgProperties :: Lens' ElastiCacheParameterGroup (Maybe Object)
+ecpgProperties = lens _elastiCacheParameterGroupProperties (\s a -> s { _elastiCacheParameterGroupProperties = a })
diff --git a/library-gen/Stratosphere/Resources/ElastiCacheReplicationGroup.hs b/library-gen/Stratosphere/Resources/ElastiCacheReplicationGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ElastiCacheReplicationGroup.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html
+
+module Stratosphere.Resources.ElastiCacheReplicationGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ElastiCacheReplicationGroupNodeGroupConfiguration
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for ElastiCacheReplicationGroup. See
+-- | 'elastiCacheReplicationGroup' for a more convenient constructor.
+data ElastiCacheReplicationGroup =
+  ElastiCacheReplicationGroup
+  { _elastiCacheReplicationGroupAutoMinorVersionUpgrade :: Maybe (Val Bool')
+  , _elastiCacheReplicationGroupAutomaticFailoverEnabled :: Maybe (Val Bool')
+  , _elastiCacheReplicationGroupCacheNodeType :: Maybe (Val Text)
+  , _elastiCacheReplicationGroupCacheParameterGroupName :: Maybe (Val Text)
+  , _elastiCacheReplicationGroupCacheSecurityGroupNames :: Maybe [Val Text]
+  , _elastiCacheReplicationGroupCacheSubnetGroupName :: Maybe (Val Text)
+  , _elastiCacheReplicationGroupEngine :: Maybe (Val Text)
+  , _elastiCacheReplicationGroupEngineVersion :: Maybe (Val Text)
+  , _elastiCacheReplicationGroupNodeGroupConfiguration :: Maybe [ElastiCacheReplicationGroupNodeGroupConfiguration]
+  , _elastiCacheReplicationGroupNotificationTopicArn :: Maybe (Val Text)
+  , _elastiCacheReplicationGroupNumCacheClusters :: Maybe (Val Integer')
+  , _elastiCacheReplicationGroupNumNodeGroups :: Maybe (Val Integer')
+  , _elastiCacheReplicationGroupPort :: Maybe (Val Integer')
+  , _elastiCacheReplicationGroupPreferredCacheClusterAZs :: Maybe [Val Text]
+  , _elastiCacheReplicationGroupPreferredMaintenanceWindow :: Maybe (Val Text)
+  , _elastiCacheReplicationGroupPrimaryClusterId :: Maybe (Val Text)
+  , _elastiCacheReplicationGroupReplicasPerNodeGroup :: Maybe (Val Integer')
+  , _elastiCacheReplicationGroupReplicationGroupDescription :: Val Text
+  , _elastiCacheReplicationGroupReplicationGroupId :: Maybe (Val Text)
+  , _elastiCacheReplicationGroupSecurityGroupIds :: Maybe [Val Text]
+  , _elastiCacheReplicationGroupSnapshotArns :: Maybe [Val Text]
+  , _elastiCacheReplicationGroupSnapshotName :: Maybe (Val Text)
+  , _elastiCacheReplicationGroupSnapshotRetentionLimit :: Maybe (Val Integer')
+  , _elastiCacheReplicationGroupSnapshotWindow :: Maybe (Val Text)
+  , _elastiCacheReplicationGroupSnapshottingClusterId :: Maybe (Val Text)
+  , _elastiCacheReplicationGroupTags :: Maybe [Tag]
+  } deriving (Show, Generic)
+
+instance ToJSON ElastiCacheReplicationGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON ElastiCacheReplicationGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'ElastiCacheReplicationGroup' containing required fields
+-- | as arguments.
+elastiCacheReplicationGroup
+  :: Val Text -- ^ 'ecrgReplicationGroupDescription'
+  -> ElastiCacheReplicationGroup
+elastiCacheReplicationGroup replicationGroupDescriptionarg =
+  ElastiCacheReplicationGroup
+  { _elastiCacheReplicationGroupAutoMinorVersionUpgrade = Nothing
+  , _elastiCacheReplicationGroupAutomaticFailoverEnabled = Nothing
+  , _elastiCacheReplicationGroupCacheNodeType = Nothing
+  , _elastiCacheReplicationGroupCacheParameterGroupName = Nothing
+  , _elastiCacheReplicationGroupCacheSecurityGroupNames = Nothing
+  , _elastiCacheReplicationGroupCacheSubnetGroupName = Nothing
+  , _elastiCacheReplicationGroupEngine = Nothing
+  , _elastiCacheReplicationGroupEngineVersion = Nothing
+  , _elastiCacheReplicationGroupNodeGroupConfiguration = Nothing
+  , _elastiCacheReplicationGroupNotificationTopicArn = Nothing
+  , _elastiCacheReplicationGroupNumCacheClusters = Nothing
+  , _elastiCacheReplicationGroupNumNodeGroups = Nothing
+  , _elastiCacheReplicationGroupPort = Nothing
+  , _elastiCacheReplicationGroupPreferredCacheClusterAZs = Nothing
+  , _elastiCacheReplicationGroupPreferredMaintenanceWindow = Nothing
+  , _elastiCacheReplicationGroupPrimaryClusterId = Nothing
+  , _elastiCacheReplicationGroupReplicasPerNodeGroup = Nothing
+  , _elastiCacheReplicationGroupReplicationGroupDescription = replicationGroupDescriptionarg
+  , _elastiCacheReplicationGroupReplicationGroupId = Nothing
+  , _elastiCacheReplicationGroupSecurityGroupIds = Nothing
+  , _elastiCacheReplicationGroupSnapshotArns = Nothing
+  , _elastiCacheReplicationGroupSnapshotName = Nothing
+  , _elastiCacheReplicationGroupSnapshotRetentionLimit = Nothing
+  , _elastiCacheReplicationGroupSnapshotWindow = Nothing
+  , _elastiCacheReplicationGroupSnapshottingClusterId = Nothing
+  , _elastiCacheReplicationGroupTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-autominorversionupgrade
+ecrgAutoMinorVersionUpgrade :: Lens' ElastiCacheReplicationGroup (Maybe (Val Bool'))
+ecrgAutoMinorVersionUpgrade = lens _elastiCacheReplicationGroupAutoMinorVersionUpgrade (\s a -> s { _elastiCacheReplicationGroupAutoMinorVersionUpgrade = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-automaticfailoverenabled
+ecrgAutomaticFailoverEnabled :: Lens' ElastiCacheReplicationGroup (Maybe (Val Bool'))
+ecrgAutomaticFailoverEnabled = lens _elastiCacheReplicationGroupAutomaticFailoverEnabled (\s a -> s { _elastiCacheReplicationGroupAutomaticFailoverEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-cachenodetype
+ecrgCacheNodeType :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
+ecrgCacheNodeType = lens _elastiCacheReplicationGroupCacheNodeType (\s a -> s { _elastiCacheReplicationGroupCacheNodeType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-cacheparametergroupname
+ecrgCacheParameterGroupName :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
+ecrgCacheParameterGroupName = lens _elastiCacheReplicationGroupCacheParameterGroupName (\s a -> s { _elastiCacheReplicationGroupCacheParameterGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-cachesecuritygroupnames
+ecrgCacheSecurityGroupNames :: Lens' ElastiCacheReplicationGroup (Maybe [Val Text])
+ecrgCacheSecurityGroupNames = lens _elastiCacheReplicationGroupCacheSecurityGroupNames (\s a -> s { _elastiCacheReplicationGroupCacheSecurityGroupNames = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-cachesubnetgroupname
+ecrgCacheSubnetGroupName :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
+ecrgCacheSubnetGroupName = lens _elastiCacheReplicationGroupCacheSubnetGroupName (\s a -> s { _elastiCacheReplicationGroupCacheSubnetGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-engine
+ecrgEngine :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
+ecrgEngine = lens _elastiCacheReplicationGroupEngine (\s a -> s { _elastiCacheReplicationGroupEngine = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-engineversion
+ecrgEngineVersion :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
+ecrgEngineVersion = lens _elastiCacheReplicationGroupEngineVersion (\s a -> s { _elastiCacheReplicationGroupEngineVersion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-nodegroupconfiguration
+ecrgNodeGroupConfiguration :: Lens' ElastiCacheReplicationGroup (Maybe [ElastiCacheReplicationGroupNodeGroupConfiguration])
+ecrgNodeGroupConfiguration = lens _elastiCacheReplicationGroupNodeGroupConfiguration (\s a -> s { _elastiCacheReplicationGroupNodeGroupConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-notificationtopicarn
+ecrgNotificationTopicArn :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
+ecrgNotificationTopicArn = lens _elastiCacheReplicationGroupNotificationTopicArn (\s a -> s { _elastiCacheReplicationGroupNotificationTopicArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-numcacheclusters
+ecrgNumCacheClusters :: Lens' ElastiCacheReplicationGroup (Maybe (Val Integer'))
+ecrgNumCacheClusters = lens _elastiCacheReplicationGroupNumCacheClusters (\s a -> s { _elastiCacheReplicationGroupNumCacheClusters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-numnodegroups
+ecrgNumNodeGroups :: Lens' ElastiCacheReplicationGroup (Maybe (Val Integer'))
+ecrgNumNodeGroups = lens _elastiCacheReplicationGroupNumNodeGroups (\s a -> s { _elastiCacheReplicationGroupNumNodeGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-port
+ecrgPort :: Lens' ElastiCacheReplicationGroup (Maybe (Val Integer'))
+ecrgPort = lens _elastiCacheReplicationGroupPort (\s a -> s { _elastiCacheReplicationGroupPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-preferredcacheclusterazs
+ecrgPreferredCacheClusterAZs :: Lens' ElastiCacheReplicationGroup (Maybe [Val Text])
+ecrgPreferredCacheClusterAZs = lens _elastiCacheReplicationGroupPreferredCacheClusterAZs (\s a -> s { _elastiCacheReplicationGroupPreferredCacheClusterAZs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-preferredmaintenancewindow
+ecrgPreferredMaintenanceWindow :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
+ecrgPreferredMaintenanceWindow = lens _elastiCacheReplicationGroupPreferredMaintenanceWindow (\s a -> s { _elastiCacheReplicationGroupPreferredMaintenanceWindow = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-primaryclusterid
+ecrgPrimaryClusterId :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
+ecrgPrimaryClusterId = lens _elastiCacheReplicationGroupPrimaryClusterId (\s a -> s { _elastiCacheReplicationGroupPrimaryClusterId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-replicaspernodegroup
+ecrgReplicasPerNodeGroup :: Lens' ElastiCacheReplicationGroup (Maybe (Val Integer'))
+ecrgReplicasPerNodeGroup = lens _elastiCacheReplicationGroupReplicasPerNodeGroup (\s a -> s { _elastiCacheReplicationGroupReplicasPerNodeGroup = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-replicationgroupdescription
+ecrgReplicationGroupDescription :: Lens' ElastiCacheReplicationGroup (Val Text)
+ecrgReplicationGroupDescription = lens _elastiCacheReplicationGroupReplicationGroupDescription (\s a -> s { _elastiCacheReplicationGroupReplicationGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-replicationgroupid
+ecrgReplicationGroupId :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
+ecrgReplicationGroupId = lens _elastiCacheReplicationGroupReplicationGroupId (\s a -> s { _elastiCacheReplicationGroupReplicationGroupId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-securitygroupids
+ecrgSecurityGroupIds :: Lens' ElastiCacheReplicationGroup (Maybe [Val Text])
+ecrgSecurityGroupIds = lens _elastiCacheReplicationGroupSecurityGroupIds (\s a -> s { _elastiCacheReplicationGroupSecurityGroupIds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshotarns
+ecrgSnapshotArns :: Lens' ElastiCacheReplicationGroup (Maybe [Val Text])
+ecrgSnapshotArns = lens _elastiCacheReplicationGroupSnapshotArns (\s a -> s { _elastiCacheReplicationGroupSnapshotArns = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshotname
+ecrgSnapshotName :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
+ecrgSnapshotName = lens _elastiCacheReplicationGroupSnapshotName (\s a -> s { _elastiCacheReplicationGroupSnapshotName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshotretentionlimit
+ecrgSnapshotRetentionLimit :: Lens' ElastiCacheReplicationGroup (Maybe (Val Integer'))
+ecrgSnapshotRetentionLimit = lens _elastiCacheReplicationGroupSnapshotRetentionLimit (\s a -> s { _elastiCacheReplicationGroupSnapshotRetentionLimit = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshotwindow
+ecrgSnapshotWindow :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
+ecrgSnapshotWindow = lens _elastiCacheReplicationGroupSnapshotWindow (\s a -> s { _elastiCacheReplicationGroupSnapshotWindow = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshottingclusterid
+ecrgSnapshottingClusterId :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
+ecrgSnapshottingClusterId = lens _elastiCacheReplicationGroupSnapshottingClusterId (\s a -> s { _elastiCacheReplicationGroupSnapshottingClusterId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-tags
+ecrgTags :: Lens' ElastiCacheReplicationGroup (Maybe [Tag])
+ecrgTags = lens _elastiCacheReplicationGroupTags (\s a -> s { _elastiCacheReplicationGroupTags = a })
diff --git a/library-gen/Stratosphere/Resources/ElastiCacheSecurityGroup.hs b/library-gen/Stratosphere/Resources/ElastiCacheSecurityGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ElastiCacheSecurityGroup.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-security-group.html
+
+module Stratosphere.Resources.ElastiCacheSecurityGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ElastiCacheSecurityGroup. See
+-- | 'elastiCacheSecurityGroup' for a more convenient constructor.
+data ElastiCacheSecurityGroup =
+  ElastiCacheSecurityGroup
+  { _elastiCacheSecurityGroupDescription :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ElastiCacheSecurityGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+instance FromJSON ElastiCacheSecurityGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+-- | Constructor for 'ElastiCacheSecurityGroup' containing required fields as
+-- | arguments.
+elastiCacheSecurityGroup
+  :: Val Text -- ^ 'ecsegDescription'
+  -> ElastiCacheSecurityGroup
+elastiCacheSecurityGroup descriptionarg =
+  ElastiCacheSecurityGroup
+  { _elastiCacheSecurityGroupDescription = descriptionarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-security-group.html#cfn-elasticache-securitygroup-description
+ecsegDescription :: Lens' ElastiCacheSecurityGroup (Val Text)
+ecsegDescription = lens _elastiCacheSecurityGroupDescription (\s a -> s { _elastiCacheSecurityGroupDescription = a })
diff --git a/library-gen/Stratosphere/Resources/ElastiCacheSecurityGroupIngress.hs b/library-gen/Stratosphere/Resources/ElastiCacheSecurityGroupIngress.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ElastiCacheSecurityGroupIngress.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-security-group-ingress.html
+
+module Stratosphere.Resources.ElastiCacheSecurityGroupIngress where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ElastiCacheSecurityGroupIngress. See
+-- | 'elastiCacheSecurityGroupIngress' for a more convenient constructor.
+data ElastiCacheSecurityGroupIngress =
+  ElastiCacheSecurityGroupIngress
+  { _elastiCacheSecurityGroupIngressCacheSecurityGroupName :: Val Text
+  , _elastiCacheSecurityGroupIngressEC2SecurityGroupName :: Val Text
+  , _elastiCacheSecurityGroupIngressEC2SecurityGroupOwnerId :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ElastiCacheSecurityGroupIngress where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+instance FromJSON ElastiCacheSecurityGroupIngress where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 32, omitNothingFields = True }
+
+-- | Constructor for 'ElastiCacheSecurityGroupIngress' containing required
+-- | fields as arguments.
+elastiCacheSecurityGroupIngress
+  :: Val Text -- ^ 'ecsgiCacheSecurityGroupName'
+  -> Val Text -- ^ 'ecsgiEC2SecurityGroupName'
+  -> ElastiCacheSecurityGroupIngress
+elastiCacheSecurityGroupIngress cacheSecurityGroupNamearg eC2SecurityGroupNamearg =
+  ElastiCacheSecurityGroupIngress
+  { _elastiCacheSecurityGroupIngressCacheSecurityGroupName = cacheSecurityGroupNamearg
+  , _elastiCacheSecurityGroupIngressEC2SecurityGroupName = eC2SecurityGroupNamearg
+  , _elastiCacheSecurityGroupIngressEC2SecurityGroupOwnerId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-security-group-ingress.html#cfn-elasticache-securitygroupingress-cachesecuritygroupname
+ecsgiCacheSecurityGroupName :: Lens' ElastiCacheSecurityGroupIngress (Val Text)
+ecsgiCacheSecurityGroupName = lens _elastiCacheSecurityGroupIngressCacheSecurityGroupName (\s a -> s { _elastiCacheSecurityGroupIngressCacheSecurityGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-security-group-ingress.html#cfn-elasticache-securitygroupingress-ec2securitygroupname
+ecsgiEC2SecurityGroupName :: Lens' ElastiCacheSecurityGroupIngress (Val Text)
+ecsgiEC2SecurityGroupName = lens _elastiCacheSecurityGroupIngressEC2SecurityGroupName (\s a -> s { _elastiCacheSecurityGroupIngressEC2SecurityGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-security-group-ingress.html#cfn-elasticache-securitygroupingress-ec2securitygroupownerid
+ecsgiEC2SecurityGroupOwnerId :: Lens' ElastiCacheSecurityGroupIngress (Maybe (Val Text))
+ecsgiEC2SecurityGroupOwnerId = lens _elastiCacheSecurityGroupIngressEC2SecurityGroupOwnerId (\s a -> s { _elastiCacheSecurityGroupIngressEC2SecurityGroupOwnerId = a })
diff --git a/library-gen/Stratosphere/Resources/ElastiCacheSubnetGroup.hs b/library-gen/Stratosphere/Resources/ElastiCacheSubnetGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ElastiCacheSubnetGroup.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-subnetgroup.html
+
+module Stratosphere.Resources.ElastiCacheSubnetGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ElastiCacheSubnetGroup. See
+-- | 'elastiCacheSubnetGroup' for a more convenient constructor.
+data ElastiCacheSubnetGroup =
+  ElastiCacheSubnetGroup
+  { _elastiCacheSubnetGroupCacheSubnetGroupName :: Maybe (Val Text)
+  , _elastiCacheSubnetGroupDescription :: Val Text
+  , _elastiCacheSubnetGroupSubnetIds :: [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON ElastiCacheSubnetGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+instance FromJSON ElastiCacheSubnetGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+-- | Constructor for 'ElastiCacheSubnetGroup' containing required fields as
+-- | arguments.
+elastiCacheSubnetGroup
+  :: Val Text -- ^ 'ecsugDescription'
+  -> [Val Text] -- ^ 'ecsugSubnetIds'
+  -> ElastiCacheSubnetGroup
+elastiCacheSubnetGroup descriptionarg subnetIdsarg =
+  ElastiCacheSubnetGroup
+  { _elastiCacheSubnetGroupCacheSubnetGroupName = Nothing
+  , _elastiCacheSubnetGroupDescription = descriptionarg
+  , _elastiCacheSubnetGroupSubnetIds = subnetIdsarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-subnetgroup.html#cfn-elasticache-subnetgroup-cachesubnetgroupname
+ecsugCacheSubnetGroupName :: Lens' ElastiCacheSubnetGroup (Maybe (Val Text))
+ecsugCacheSubnetGroupName = lens _elastiCacheSubnetGroupCacheSubnetGroupName (\s a -> s { _elastiCacheSubnetGroupCacheSubnetGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-subnetgroup.html#cfn-elasticache-subnetgroup-description
+ecsugDescription :: Lens' ElastiCacheSubnetGroup (Val Text)
+ecsugDescription = lens _elastiCacheSubnetGroupDescription (\s a -> s { _elastiCacheSubnetGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-subnetgroup.html#cfn-elasticache-subnetgroup-subnetids
+ecsugSubnetIds :: Lens' ElastiCacheSubnetGroup [Val Text]
+ecsugSubnetIds = lens _elastiCacheSubnetGroupSubnetIds (\s a -> s { _elastiCacheSubnetGroupSubnetIds = a })
diff --git a/library-gen/Stratosphere/Resources/ElasticBeanstalkApplication.hs b/library-gen/Stratosphere/Resources/ElasticBeanstalkApplication.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ElasticBeanstalkApplication.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk.html
+
+module Stratosphere.Resources.ElasticBeanstalkApplication where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ElasticBeanstalkApplication. See
+-- | 'elasticBeanstalkApplication' for a more convenient constructor.
+data ElasticBeanstalkApplication =
+  ElasticBeanstalkApplication
+  { _elasticBeanstalkApplicationApplicationName :: Maybe (Val Text)
+  , _elasticBeanstalkApplicationDescription :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticBeanstalkApplication where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON ElasticBeanstalkApplication where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'ElasticBeanstalkApplication' containing required fields
+-- | as arguments.
+elasticBeanstalkApplication
+  :: ElasticBeanstalkApplication
+elasticBeanstalkApplication  =
+  ElasticBeanstalkApplication
+  { _elasticBeanstalkApplicationApplicationName = Nothing
+  , _elasticBeanstalkApplicationDescription = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk.html#cfn-elasticbeanstalk-application-name
+ebaApplicationName :: Lens' ElasticBeanstalkApplication (Maybe (Val Text))
+ebaApplicationName = lens _elasticBeanstalkApplicationApplicationName (\s a -> s { _elasticBeanstalkApplicationApplicationName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk.html#cfn-elasticbeanstalk-application-description
+ebaDescription :: Lens' ElasticBeanstalkApplication (Maybe (Val Text))
+ebaDescription = lens _elasticBeanstalkApplicationDescription (\s a -> s { _elasticBeanstalkApplicationDescription = a })
diff --git a/library-gen/Stratosphere/Resources/ElasticBeanstalkApplicationVersion.hs b/library-gen/Stratosphere/Resources/ElasticBeanstalkApplicationVersion.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ElasticBeanstalkApplicationVersion.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-version.html
+
+module Stratosphere.Resources.ElasticBeanstalkApplicationVersion where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ElasticBeanstalkApplicationVersionSourceBundle
+
+-- | Full data type definition for ElasticBeanstalkApplicationVersion. See
+-- | 'elasticBeanstalkApplicationVersion' for a more convenient constructor.
+data ElasticBeanstalkApplicationVersion =
+  ElasticBeanstalkApplicationVersion
+  { _elasticBeanstalkApplicationVersionApplicationName :: Val Text
+  , _elasticBeanstalkApplicationVersionDescription :: Maybe (Val Text)
+  , _elasticBeanstalkApplicationVersionSourceBundle :: ElasticBeanstalkApplicationVersionSourceBundle
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticBeanstalkApplicationVersion where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+instance FromJSON ElasticBeanstalkApplicationVersion where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+-- | Constructor for 'ElasticBeanstalkApplicationVersion' containing required
+-- | fields as arguments.
+elasticBeanstalkApplicationVersion
+  :: Val Text -- ^ 'ebavApplicationName'
+  -> ElasticBeanstalkApplicationVersionSourceBundle -- ^ 'ebavSourceBundle'
+  -> ElasticBeanstalkApplicationVersion
+elasticBeanstalkApplicationVersion applicationNamearg sourceBundlearg =
+  ElasticBeanstalkApplicationVersion
+  { _elasticBeanstalkApplicationVersionApplicationName = applicationNamearg
+  , _elasticBeanstalkApplicationVersionDescription = Nothing
+  , _elasticBeanstalkApplicationVersionSourceBundle = sourceBundlearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-version.html#cfn-elasticbeanstalk-applicationversion-applicationname
+ebavApplicationName :: Lens' ElasticBeanstalkApplicationVersion (Val Text)
+ebavApplicationName = lens _elasticBeanstalkApplicationVersionApplicationName (\s a -> s { _elasticBeanstalkApplicationVersionApplicationName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-version.html#cfn-elasticbeanstalk-applicationversion-description
+ebavDescription :: Lens' ElasticBeanstalkApplicationVersion (Maybe (Val Text))
+ebavDescription = lens _elasticBeanstalkApplicationVersionDescription (\s a -> s { _elasticBeanstalkApplicationVersionDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-version.html#cfn-elasticbeanstalk-applicationversion-sourcebundle
+ebavSourceBundle :: Lens' ElasticBeanstalkApplicationVersion ElasticBeanstalkApplicationVersionSourceBundle
+ebavSourceBundle = lens _elasticBeanstalkApplicationVersionSourceBundle (\s a -> s { _elasticBeanstalkApplicationVersionSourceBundle = a })
diff --git a/library-gen/Stratosphere/Resources/ElasticBeanstalkConfigurationTemplate.hs b/library-gen/Stratosphere/Resources/ElasticBeanstalkConfigurationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ElasticBeanstalkConfigurationTemplate.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-beanstalk-configurationtemplate.html
+
+module Stratosphere.Resources.ElasticBeanstalkConfigurationTemplate where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting
+import Stratosphere.ResourceProperties.ElasticBeanstalkConfigurationTemplateSourceConfiguration
+
+-- | Full data type definition for ElasticBeanstalkConfigurationTemplate. See
+-- | 'elasticBeanstalkConfigurationTemplate' for a more convenient
+-- | constructor.
+data ElasticBeanstalkConfigurationTemplate =
+  ElasticBeanstalkConfigurationTemplate
+  { _elasticBeanstalkConfigurationTemplateApplicationName :: Val Text
+  , _elasticBeanstalkConfigurationTemplateDescription :: Maybe (Val Text)
+  , _elasticBeanstalkConfigurationTemplateEnvironmentId :: Maybe (Val Text)
+  , _elasticBeanstalkConfigurationTemplateOptionSettings :: Maybe [ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting]
+  , _elasticBeanstalkConfigurationTemplateSolutionStackName :: Maybe (Val Text)
+  , _elasticBeanstalkConfigurationTemplateSourceConfiguration :: Maybe ElasticBeanstalkConfigurationTemplateSourceConfiguration
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticBeanstalkConfigurationTemplate where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+
+instance FromJSON ElasticBeanstalkConfigurationTemplate where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+
+-- | Constructor for 'ElasticBeanstalkConfigurationTemplate' containing
+-- | required fields as arguments.
+elasticBeanstalkConfigurationTemplate
+  :: Val Text -- ^ 'ebctApplicationName'
+  -> ElasticBeanstalkConfigurationTemplate
+elasticBeanstalkConfigurationTemplate applicationNamearg =
+  ElasticBeanstalkConfigurationTemplate
+  { _elasticBeanstalkConfigurationTemplateApplicationName = applicationNamearg
+  , _elasticBeanstalkConfigurationTemplateDescription = Nothing
+  , _elasticBeanstalkConfigurationTemplateEnvironmentId = Nothing
+  , _elasticBeanstalkConfigurationTemplateOptionSettings = Nothing
+  , _elasticBeanstalkConfigurationTemplateSolutionStackName = Nothing
+  , _elasticBeanstalkConfigurationTemplateSourceConfiguration = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-beanstalk-configurationtemplate.html#cfn-elasticbeanstalk-configurationtemplate-applicationname
+ebctApplicationName :: Lens' ElasticBeanstalkConfigurationTemplate (Val Text)
+ebctApplicationName = lens _elasticBeanstalkConfigurationTemplateApplicationName (\s a -> s { _elasticBeanstalkConfigurationTemplateApplicationName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-beanstalk-configurationtemplate.html#cfn-elasticbeanstalk-configurationtemplate-description
+ebctDescription :: Lens' ElasticBeanstalkConfigurationTemplate (Maybe (Val Text))
+ebctDescription = lens _elasticBeanstalkConfigurationTemplateDescription (\s a -> s { _elasticBeanstalkConfigurationTemplateDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-beanstalk-configurationtemplate.html#cfn-elasticbeanstalk-configurationtemplate-environmentid
+ebctEnvironmentId :: Lens' ElasticBeanstalkConfigurationTemplate (Maybe (Val Text))
+ebctEnvironmentId = lens _elasticBeanstalkConfigurationTemplateEnvironmentId (\s a -> s { _elasticBeanstalkConfigurationTemplateEnvironmentId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-beanstalk-configurationtemplate.html#cfn-elasticbeanstalk-configurationtemplate-optionsettings
+ebctOptionSettings :: Lens' ElasticBeanstalkConfigurationTemplate (Maybe [ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting])
+ebctOptionSettings = lens _elasticBeanstalkConfigurationTemplateOptionSettings (\s a -> s { _elasticBeanstalkConfigurationTemplateOptionSettings = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-beanstalk-configurationtemplate.html#cfn-elasticbeanstalk-configurationtemplate-solutionstackname
+ebctSolutionStackName :: Lens' ElasticBeanstalkConfigurationTemplate (Maybe (Val Text))
+ebctSolutionStackName = lens _elasticBeanstalkConfigurationTemplateSolutionStackName (\s a -> s { _elasticBeanstalkConfigurationTemplateSolutionStackName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-beanstalk-configurationtemplate.html#cfn-elasticbeanstalk-configurationtemplate-sourceconfiguration
+ebctSourceConfiguration :: Lens' ElasticBeanstalkConfigurationTemplate (Maybe ElasticBeanstalkConfigurationTemplateSourceConfiguration)
+ebctSourceConfiguration = lens _elasticBeanstalkConfigurationTemplateSourceConfiguration (\s a -> s { _elasticBeanstalkConfigurationTemplateSourceConfiguration = a })
diff --git a/library-gen/Stratosphere/Resources/ElasticBeanstalkEnvironment.hs b/library-gen/Stratosphere/Resources/ElasticBeanstalkEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ElasticBeanstalkEnvironment.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html
+
+module Stratosphere.Resources.ElasticBeanstalkEnvironment where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ElasticBeanstalkEnvironmentOptionSettings
+import Stratosphere.ResourceProperties.ElasticBeanstalkEnvironmentTier
+
+-- | Full data type definition for ElasticBeanstalkEnvironment. See
+-- | 'elasticBeanstalkEnvironment' for a more convenient constructor.
+data ElasticBeanstalkEnvironment =
+  ElasticBeanstalkEnvironment
+  { _elasticBeanstalkEnvironmentApplicationName :: Val Text
+  , _elasticBeanstalkEnvironmentCNAMEPrefix :: Maybe (Val Text)
+  , _elasticBeanstalkEnvironmentDescription :: Maybe (Val Text)
+  , _elasticBeanstalkEnvironmentEnvironmentName :: Maybe (Val Text)
+  , _elasticBeanstalkEnvironmentOptionSettings :: Maybe [ElasticBeanstalkEnvironmentOptionSettings]
+  , _elasticBeanstalkEnvironmentSolutionStackName :: Maybe (Val Text)
+  , _elasticBeanstalkEnvironmentTemplateName :: Maybe (Val Text)
+  , _elasticBeanstalkEnvironmentTier :: Maybe ElasticBeanstalkEnvironmentTier
+  , _elasticBeanstalkEnvironmentVersionLabel :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticBeanstalkEnvironment where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON ElasticBeanstalkEnvironment where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'ElasticBeanstalkEnvironment' containing required fields
+-- | as arguments.
+elasticBeanstalkEnvironment
+  :: Val Text -- ^ 'ebeApplicationName'
+  -> ElasticBeanstalkEnvironment
+elasticBeanstalkEnvironment applicationNamearg =
+  ElasticBeanstalkEnvironment
+  { _elasticBeanstalkEnvironmentApplicationName = applicationNamearg
+  , _elasticBeanstalkEnvironmentCNAMEPrefix = Nothing
+  , _elasticBeanstalkEnvironmentDescription = Nothing
+  , _elasticBeanstalkEnvironmentEnvironmentName = Nothing
+  , _elasticBeanstalkEnvironmentOptionSettings = Nothing
+  , _elasticBeanstalkEnvironmentSolutionStackName = Nothing
+  , _elasticBeanstalkEnvironmentTemplateName = Nothing
+  , _elasticBeanstalkEnvironmentTier = Nothing
+  , _elasticBeanstalkEnvironmentVersionLabel = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html#cfn-beanstalk-environment-applicationname
+ebeApplicationName :: Lens' ElasticBeanstalkEnvironment (Val Text)
+ebeApplicationName = lens _elasticBeanstalkEnvironmentApplicationName (\s a -> s { _elasticBeanstalkEnvironmentApplicationName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html#cfn-beanstalk-environment-cnameprefix
+ebeCNAMEPrefix :: Lens' ElasticBeanstalkEnvironment (Maybe (Val Text))
+ebeCNAMEPrefix = lens _elasticBeanstalkEnvironmentCNAMEPrefix (\s a -> s { _elasticBeanstalkEnvironmentCNAMEPrefix = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html#cfn-beanstalk-environment-description
+ebeDescription :: Lens' ElasticBeanstalkEnvironment (Maybe (Val Text))
+ebeDescription = lens _elasticBeanstalkEnvironmentDescription (\s a -> s { _elasticBeanstalkEnvironmentDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html#cfn-beanstalk-environment-name
+ebeEnvironmentName :: Lens' ElasticBeanstalkEnvironment (Maybe (Val Text))
+ebeEnvironmentName = lens _elasticBeanstalkEnvironmentEnvironmentName (\s a -> s { _elasticBeanstalkEnvironmentEnvironmentName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html#cfn-beanstalk-environment-optionsettings
+ebeOptionSettings :: Lens' ElasticBeanstalkEnvironment (Maybe [ElasticBeanstalkEnvironmentOptionSettings])
+ebeOptionSettings = lens _elasticBeanstalkEnvironmentOptionSettings (\s a -> s { _elasticBeanstalkEnvironmentOptionSettings = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html#cfn-beanstalk-environment-solutionstackname
+ebeSolutionStackName :: Lens' ElasticBeanstalkEnvironment (Maybe (Val Text))
+ebeSolutionStackName = lens _elasticBeanstalkEnvironmentSolutionStackName (\s a -> s { _elasticBeanstalkEnvironmentSolutionStackName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html#cfn-beanstalk-environment-templatename
+ebeTemplateName :: Lens' ElasticBeanstalkEnvironment (Maybe (Val Text))
+ebeTemplateName = lens _elasticBeanstalkEnvironmentTemplateName (\s a -> s { _elasticBeanstalkEnvironmentTemplateName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html#cfn-beanstalk-environment-tier
+ebeTier :: Lens' ElasticBeanstalkEnvironment (Maybe ElasticBeanstalkEnvironmentTier)
+ebeTier = lens _elasticBeanstalkEnvironmentTier (\s a -> s { _elasticBeanstalkEnvironmentTier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html#cfn-beanstalk-environment-versionlabel
+ebeVersionLabel :: Lens' ElasticBeanstalkEnvironment (Maybe (Val Text))
+ebeVersionLabel = lens _elasticBeanstalkEnvironmentVersionLabel (\s a -> s { _elasticBeanstalkEnvironmentVersionLabel = a })
diff --git a/library-gen/Stratosphere/Resources/ElasticLoadBalancingLoadBalancer.hs b/library-gen/Stratosphere/Resources/ElasticLoadBalancingLoadBalancer.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ElasticLoadBalancingLoadBalancer.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html
+
+module Stratosphere.Resources.ElasticLoadBalancingLoadBalancer where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerAccessLoggingPolicy
+import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy
+import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy
+import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerConnectionSettings
+import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerHealthCheck
+import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy
+import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerListeners
+import Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerPolicies
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for ElasticLoadBalancingLoadBalancer. See
+-- | 'elasticLoadBalancingLoadBalancer' for a more convenient constructor.
+data ElasticLoadBalancingLoadBalancer =
+  ElasticLoadBalancingLoadBalancer
+  { _elasticLoadBalancingLoadBalancerAccessLoggingPolicy :: Maybe ElasticLoadBalancingLoadBalancerAccessLoggingPolicy
+  , _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicy :: Maybe [ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy]
+  , _elasticLoadBalancingLoadBalancerAvailabilityZones :: Maybe [Val Text]
+  , _elasticLoadBalancingLoadBalancerConnectionDrainingPolicy :: Maybe ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy
+  , _elasticLoadBalancingLoadBalancerConnectionSettings :: Maybe ElasticLoadBalancingLoadBalancerConnectionSettings
+  , _elasticLoadBalancingLoadBalancerCrossZone :: Maybe (Val Bool')
+  , _elasticLoadBalancingLoadBalancerHealthCheck :: Maybe ElasticLoadBalancingLoadBalancerHealthCheck
+  , _elasticLoadBalancingLoadBalancerInstances :: Maybe [Val Text]
+  , _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicy :: Maybe [ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy]
+  , _elasticLoadBalancingLoadBalancerListeners :: [ElasticLoadBalancingLoadBalancerListeners]
+  , _elasticLoadBalancingLoadBalancerLoadBalancerName :: Maybe (Val Text)
+  , _elasticLoadBalancingLoadBalancerPolicies :: Maybe [ElasticLoadBalancingLoadBalancerPolicies]
+  , _elasticLoadBalancingLoadBalancerScheme :: Maybe (Val Text)
+  , _elasticLoadBalancingLoadBalancerSecurityGroups :: Maybe [Val Text]
+  , _elasticLoadBalancingLoadBalancerSubnets :: Maybe [Val Text]
+  , _elasticLoadBalancingLoadBalancerTags :: Maybe [Tag]
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingLoadBalancer where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingLoadBalancer where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 33, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingLoadBalancer' containing required
+-- | fields as arguments.
+elasticLoadBalancingLoadBalancer
+  :: [ElasticLoadBalancingLoadBalancerListeners] -- ^ 'elblbListeners'
+  -> ElasticLoadBalancingLoadBalancer
+elasticLoadBalancingLoadBalancer listenersarg =
+  ElasticLoadBalancingLoadBalancer
+  { _elasticLoadBalancingLoadBalancerAccessLoggingPolicy = Nothing
+  , _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicy = Nothing
+  , _elasticLoadBalancingLoadBalancerAvailabilityZones = Nothing
+  , _elasticLoadBalancingLoadBalancerConnectionDrainingPolicy = Nothing
+  , _elasticLoadBalancingLoadBalancerConnectionSettings = Nothing
+  , _elasticLoadBalancingLoadBalancerCrossZone = Nothing
+  , _elasticLoadBalancingLoadBalancerHealthCheck = Nothing
+  , _elasticLoadBalancingLoadBalancerInstances = Nothing
+  , _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicy = Nothing
+  , _elasticLoadBalancingLoadBalancerListeners = listenersarg
+  , _elasticLoadBalancingLoadBalancerLoadBalancerName = Nothing
+  , _elasticLoadBalancingLoadBalancerPolicies = Nothing
+  , _elasticLoadBalancingLoadBalancerScheme = Nothing
+  , _elasticLoadBalancingLoadBalancerSecurityGroups = Nothing
+  , _elasticLoadBalancingLoadBalancerSubnets = Nothing
+  , _elasticLoadBalancingLoadBalancerTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html#cfn-ec2-elb-accessloggingpolicy
+elblbAccessLoggingPolicy :: Lens' ElasticLoadBalancingLoadBalancer (Maybe ElasticLoadBalancingLoadBalancerAccessLoggingPolicy)
+elblbAccessLoggingPolicy = lens _elasticLoadBalancingLoadBalancerAccessLoggingPolicy (\s a -> s { _elasticLoadBalancingLoadBalancerAccessLoggingPolicy = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html#cfn-ec2-elb-appcookiestickinesspolicy
+elblbAppCookieStickinessPolicy :: Lens' ElasticLoadBalancingLoadBalancer (Maybe [ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy])
+elblbAppCookieStickinessPolicy = lens _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicy (\s a -> s { _elasticLoadBalancingLoadBalancerAppCookieStickinessPolicy = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html#cfn-ec2-elb-availabilityzones
+elblbAvailabilityZones :: Lens' ElasticLoadBalancingLoadBalancer (Maybe [Val Text])
+elblbAvailabilityZones = lens _elasticLoadBalancingLoadBalancerAvailabilityZones (\s a -> s { _elasticLoadBalancingLoadBalancerAvailabilityZones = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html#cfn-ec2-elb-connectiondrainingpolicy
+elblbConnectionDrainingPolicy :: Lens' ElasticLoadBalancingLoadBalancer (Maybe ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy)
+elblbConnectionDrainingPolicy = lens _elasticLoadBalancingLoadBalancerConnectionDrainingPolicy (\s a -> s { _elasticLoadBalancingLoadBalancerConnectionDrainingPolicy = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html#cfn-ec2-elb-connectionsettings
+elblbConnectionSettings :: Lens' ElasticLoadBalancingLoadBalancer (Maybe ElasticLoadBalancingLoadBalancerConnectionSettings)
+elblbConnectionSettings = lens _elasticLoadBalancingLoadBalancerConnectionSettings (\s a -> s { _elasticLoadBalancingLoadBalancerConnectionSettings = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html#cfn-ec2-elb-crosszone
+elblbCrossZone :: Lens' ElasticLoadBalancingLoadBalancer (Maybe (Val Bool'))
+elblbCrossZone = lens _elasticLoadBalancingLoadBalancerCrossZone (\s a -> s { _elasticLoadBalancingLoadBalancerCrossZone = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html#cfn-ec2-elb-healthcheck
+elblbHealthCheck :: Lens' ElasticLoadBalancingLoadBalancer (Maybe ElasticLoadBalancingLoadBalancerHealthCheck)
+elblbHealthCheck = lens _elasticLoadBalancingLoadBalancerHealthCheck (\s a -> s { _elasticLoadBalancingLoadBalancerHealthCheck = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html#cfn-ec2-elb-instances
+elblbInstances :: Lens' ElasticLoadBalancingLoadBalancer (Maybe [Val Text])
+elblbInstances = lens _elasticLoadBalancingLoadBalancerInstances (\s a -> s { _elasticLoadBalancingLoadBalancerInstances = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html#cfn-ec2-elb-lbcookiestickinesspolicy
+elblbLBCookieStickinessPolicy :: Lens' ElasticLoadBalancingLoadBalancer (Maybe [ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy])
+elblbLBCookieStickinessPolicy = lens _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicy (\s a -> s { _elasticLoadBalancingLoadBalancerLBCookieStickinessPolicy = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html#cfn-ec2-elb-listeners
+elblbListeners :: Lens' ElasticLoadBalancingLoadBalancer [ElasticLoadBalancingLoadBalancerListeners]
+elblbListeners = lens _elasticLoadBalancingLoadBalancerListeners (\s a -> s { _elasticLoadBalancingLoadBalancerListeners = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html#cfn-ec2-elb-elbname
+elblbLoadBalancerName :: Lens' ElasticLoadBalancingLoadBalancer (Maybe (Val Text))
+elblbLoadBalancerName = lens _elasticLoadBalancingLoadBalancerLoadBalancerName (\s a -> s { _elasticLoadBalancingLoadBalancerLoadBalancerName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html#cfn-ec2-elb-policies
+elblbPolicies :: Lens' ElasticLoadBalancingLoadBalancer (Maybe [ElasticLoadBalancingLoadBalancerPolicies])
+elblbPolicies = lens _elasticLoadBalancingLoadBalancerPolicies (\s a -> s { _elasticLoadBalancingLoadBalancerPolicies = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html#cfn-ec2-elb-scheme
+elblbScheme :: Lens' ElasticLoadBalancingLoadBalancer (Maybe (Val Text))
+elblbScheme = lens _elasticLoadBalancingLoadBalancerScheme (\s a -> s { _elasticLoadBalancingLoadBalancerScheme = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html#cfn-ec2-elb-securitygroups
+elblbSecurityGroups :: Lens' ElasticLoadBalancingLoadBalancer (Maybe [Val Text])
+elblbSecurityGroups = lens _elasticLoadBalancingLoadBalancerSecurityGroups (\s a -> s { _elasticLoadBalancingLoadBalancerSecurityGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html#cfn-ec2-elb-subnets
+elblbSubnets :: Lens' ElasticLoadBalancingLoadBalancer (Maybe [Val Text])
+elblbSubnets = lens _elasticLoadBalancingLoadBalancerSubnets (\s a -> s { _elasticLoadBalancingLoadBalancerSubnets = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html#cfn-elasticloadbalancing-loadbalancer-tags
+elblbTags :: Lens' ElasticLoadBalancingLoadBalancer (Maybe [Tag])
+elblbTags = lens _elasticLoadBalancingLoadBalancerTags (\s a -> s { _elasticLoadBalancingLoadBalancerTags = a })
diff --git a/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2Listener.hs b/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2Listener.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2Listener.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html
+
+module Stratosphere.Resources.ElasticLoadBalancingV2Listener where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerCertificate
+import Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerAction
+
+-- | Full data type definition for ElasticLoadBalancingV2Listener. See
+-- | 'elasticLoadBalancingV2Listener' for a more convenient constructor.
+data ElasticLoadBalancingV2Listener =
+  ElasticLoadBalancingV2Listener
+  { _elasticLoadBalancingV2ListenerCertificates :: Maybe [ElasticLoadBalancingV2ListenerCertificate]
+  , _elasticLoadBalancingV2ListenerDefaultActions :: [ElasticLoadBalancingV2ListenerAction]
+  , _elasticLoadBalancingV2ListenerLoadBalancerArn :: Val Text
+  , _elasticLoadBalancingV2ListenerPort :: Val Integer'
+  , _elasticLoadBalancingV2ListenerProtocol :: Val Text
+  , _elasticLoadBalancingV2ListenerSslPolicy :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingV2Listener where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingV2Listener where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 31, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingV2Listener' containing required
+-- | fields as arguments.
+elasticLoadBalancingV2Listener
+  :: [ElasticLoadBalancingV2ListenerAction] -- ^ 'elbvlDefaultActions'
+  -> Val Text -- ^ 'elbvlLoadBalancerArn'
+  -> Val Integer' -- ^ 'elbvlPort'
+  -> Val Text -- ^ 'elbvlProtocol'
+  -> ElasticLoadBalancingV2Listener
+elasticLoadBalancingV2Listener defaultActionsarg loadBalancerArnarg portarg protocolarg =
+  ElasticLoadBalancingV2Listener
+  { _elasticLoadBalancingV2ListenerCertificates = Nothing
+  , _elasticLoadBalancingV2ListenerDefaultActions = defaultActionsarg
+  , _elasticLoadBalancingV2ListenerLoadBalancerArn = loadBalancerArnarg
+  , _elasticLoadBalancingV2ListenerPort = portarg
+  , _elasticLoadBalancingV2ListenerProtocol = protocolarg
+  , _elasticLoadBalancingV2ListenerSslPolicy = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-certificates
+elbvlCertificates :: Lens' ElasticLoadBalancingV2Listener (Maybe [ElasticLoadBalancingV2ListenerCertificate])
+elbvlCertificates = lens _elasticLoadBalancingV2ListenerCertificates (\s a -> s { _elasticLoadBalancingV2ListenerCertificates = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-defaultactions
+elbvlDefaultActions :: Lens' ElasticLoadBalancingV2Listener [ElasticLoadBalancingV2ListenerAction]
+elbvlDefaultActions = lens _elasticLoadBalancingV2ListenerDefaultActions (\s a -> s { _elasticLoadBalancingV2ListenerDefaultActions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-loadbalancerarn
+elbvlLoadBalancerArn :: Lens' ElasticLoadBalancingV2Listener (Val Text)
+elbvlLoadBalancerArn = lens _elasticLoadBalancingV2ListenerLoadBalancerArn (\s a -> s { _elasticLoadBalancingV2ListenerLoadBalancerArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-port
+elbvlPort :: Lens' ElasticLoadBalancingV2Listener (Val Integer')
+elbvlPort = lens _elasticLoadBalancingV2ListenerPort (\s a -> s { _elasticLoadBalancingV2ListenerPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-protocol
+elbvlProtocol :: Lens' ElasticLoadBalancingV2Listener (Val Text)
+elbvlProtocol = lens _elasticLoadBalancingV2ListenerProtocol (\s a -> s { _elasticLoadBalancingV2ListenerProtocol = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-sslpolicy
+elbvlSslPolicy :: Lens' ElasticLoadBalancingV2Listener (Maybe (Val Text))
+elbvlSslPolicy = lens _elasticLoadBalancingV2ListenerSslPolicy (\s a -> s { _elasticLoadBalancingV2ListenerSslPolicy = a })
diff --git a/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2ListenerRule.hs b/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2ListenerRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2ListenerRule.hs
@@ -0,0 +1,64 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html
+
+module Stratosphere.Resources.ElasticLoadBalancingV2ListenerRule where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerRuleAction
+import Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerRuleRuleCondition
+
+-- | Full data type definition for ElasticLoadBalancingV2ListenerRule. See
+-- | 'elasticLoadBalancingV2ListenerRule' for a more convenient constructor.
+data ElasticLoadBalancingV2ListenerRule =
+  ElasticLoadBalancingV2ListenerRule
+  { _elasticLoadBalancingV2ListenerRuleActions :: [ElasticLoadBalancingV2ListenerRuleAction]
+  , _elasticLoadBalancingV2ListenerRuleConditions :: [ElasticLoadBalancingV2ListenerRuleRuleCondition]
+  , _elasticLoadBalancingV2ListenerRuleListenerArn :: Val Text
+  , _elasticLoadBalancingV2ListenerRulePriority :: Val Integer'
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingV2ListenerRule where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingV2ListenerRule where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingV2ListenerRule' containing required
+-- | fields as arguments.
+elasticLoadBalancingV2ListenerRule
+  :: [ElasticLoadBalancingV2ListenerRuleAction] -- ^ 'elbvlrActions'
+  -> [ElasticLoadBalancingV2ListenerRuleRuleCondition] -- ^ 'elbvlrConditions'
+  -> Val Text -- ^ 'elbvlrListenerArn'
+  -> Val Integer' -- ^ 'elbvlrPriority'
+  -> ElasticLoadBalancingV2ListenerRule
+elasticLoadBalancingV2ListenerRule actionsarg conditionsarg listenerArnarg priorityarg =
+  ElasticLoadBalancingV2ListenerRule
+  { _elasticLoadBalancingV2ListenerRuleActions = actionsarg
+  , _elasticLoadBalancingV2ListenerRuleConditions = conditionsarg
+  , _elasticLoadBalancingV2ListenerRuleListenerArn = listenerArnarg
+  , _elasticLoadBalancingV2ListenerRulePriority = priorityarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html#cfn-elasticloadbalancingv2-listenerrule-actions
+elbvlrActions :: Lens' ElasticLoadBalancingV2ListenerRule [ElasticLoadBalancingV2ListenerRuleAction]
+elbvlrActions = lens _elasticLoadBalancingV2ListenerRuleActions (\s a -> s { _elasticLoadBalancingV2ListenerRuleActions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html#cfn-elasticloadbalancingv2-listenerrule-conditions
+elbvlrConditions :: Lens' ElasticLoadBalancingV2ListenerRule [ElasticLoadBalancingV2ListenerRuleRuleCondition]
+elbvlrConditions = lens _elasticLoadBalancingV2ListenerRuleConditions (\s a -> s { _elasticLoadBalancingV2ListenerRuleConditions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html#cfn-elasticloadbalancingv2-listenerrule-listenerarn
+elbvlrListenerArn :: Lens' ElasticLoadBalancingV2ListenerRule (Val Text)
+elbvlrListenerArn = lens _elasticLoadBalancingV2ListenerRuleListenerArn (\s a -> s { _elasticLoadBalancingV2ListenerRuleListenerArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html#cfn-elasticloadbalancingv2-listenerrule-priority
+elbvlrPriority :: Lens' ElasticLoadBalancingV2ListenerRule (Val Integer')
+elbvlrPriority = lens _elasticLoadBalancingV2ListenerRulePriority (\s a -> s { _elasticLoadBalancingV2ListenerRulePriority = a })
diff --git a/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2LoadBalancer.hs b/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2LoadBalancer.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2LoadBalancer.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html
+
+module Stratosphere.Resources.ElasticLoadBalancingV2LoadBalancer where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for ElasticLoadBalancingV2LoadBalancer. See
+-- | 'elasticLoadBalancingV2LoadBalancer' for a more convenient constructor.
+data ElasticLoadBalancingV2LoadBalancer =
+  ElasticLoadBalancingV2LoadBalancer
+  { _elasticLoadBalancingV2LoadBalancerIpAddressType :: Maybe (Val Text)
+  , _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributes :: Maybe [ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute]
+  , _elasticLoadBalancingV2LoadBalancerName :: Maybe (Val Text)
+  , _elasticLoadBalancingV2LoadBalancerScheme :: Maybe (Val Text)
+  , _elasticLoadBalancingV2LoadBalancerSecurityGroups :: Maybe [Val Text]
+  , _elasticLoadBalancingV2LoadBalancerSubnets :: Maybe [Val Text]
+  , _elasticLoadBalancingV2LoadBalancerTags :: Maybe [Tag]
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingV2LoadBalancer where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingV2LoadBalancer where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 35, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingV2LoadBalancer' containing required
+-- | fields as arguments.
+elasticLoadBalancingV2LoadBalancer
+  :: ElasticLoadBalancingV2LoadBalancer
+elasticLoadBalancingV2LoadBalancer  =
+  ElasticLoadBalancingV2LoadBalancer
+  { _elasticLoadBalancingV2LoadBalancerIpAddressType = Nothing
+  , _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributes = Nothing
+  , _elasticLoadBalancingV2LoadBalancerName = Nothing
+  , _elasticLoadBalancingV2LoadBalancerScheme = Nothing
+  , _elasticLoadBalancingV2LoadBalancerSecurityGroups = Nothing
+  , _elasticLoadBalancingV2LoadBalancerSubnets = Nothing
+  , _elasticLoadBalancingV2LoadBalancerTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-ipaddresstype
+elbvlbIpAddressType :: Lens' ElasticLoadBalancingV2LoadBalancer (Maybe (Val Text))
+elbvlbIpAddressType = lens _elasticLoadBalancingV2LoadBalancerIpAddressType (\s a -> s { _elasticLoadBalancingV2LoadBalancerIpAddressType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-loadbalancerattributes
+elbvlbLoadBalancerAttributes :: Lens' ElasticLoadBalancingV2LoadBalancer (Maybe [ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute])
+elbvlbLoadBalancerAttributes = lens _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributes (\s a -> s { _elasticLoadBalancingV2LoadBalancerLoadBalancerAttributes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-name
+elbvlbName :: Lens' ElasticLoadBalancingV2LoadBalancer (Maybe (Val Text))
+elbvlbName = lens _elasticLoadBalancingV2LoadBalancerName (\s a -> s { _elasticLoadBalancingV2LoadBalancerName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-scheme
+elbvlbScheme :: Lens' ElasticLoadBalancingV2LoadBalancer (Maybe (Val Text))
+elbvlbScheme = lens _elasticLoadBalancingV2LoadBalancerScheme (\s a -> s { _elasticLoadBalancingV2LoadBalancerScheme = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-securitygroups
+elbvlbSecurityGroups :: Lens' ElasticLoadBalancingV2LoadBalancer (Maybe [Val Text])
+elbvlbSecurityGroups = lens _elasticLoadBalancingV2LoadBalancerSecurityGroups (\s a -> s { _elasticLoadBalancingV2LoadBalancerSecurityGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-subnets
+elbvlbSubnets :: Lens' ElasticLoadBalancingV2LoadBalancer (Maybe [Val Text])
+elbvlbSubnets = lens _elasticLoadBalancingV2LoadBalancerSubnets (\s a -> s { _elasticLoadBalancingV2LoadBalancerSubnets = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-tags
+elbvlbTags :: Lens' ElasticLoadBalancingV2LoadBalancer (Maybe [Tag])
+elbvlbTags = lens _elasticLoadBalancingV2LoadBalancerTags (\s a -> s { _elasticLoadBalancingV2LoadBalancerTags = a })
diff --git a/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2TargetGroup.hs b/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2TargetGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ElasticLoadBalancingV2TargetGroup.hs
@@ -0,0 +1,131 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html
+
+module Stratosphere.Resources.ElasticLoadBalancingV2TargetGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ElasticLoadBalancingV2TargetGroupMatcher
+import Stratosphere.ResourceProperties.Tag
+import Stratosphere.ResourceProperties.ElasticLoadBalancingV2TargetGroupTargetGroupAttribute
+import Stratosphere.ResourceProperties.ElasticLoadBalancingV2TargetGroupTargetDescription
+
+-- | Full data type definition for ElasticLoadBalancingV2TargetGroup. See
+-- | 'elasticLoadBalancingV2TargetGroup' for a more convenient constructor.
+data ElasticLoadBalancingV2TargetGroup =
+  ElasticLoadBalancingV2TargetGroup
+  { _elasticLoadBalancingV2TargetGroupHealthCheckIntervalSeconds :: Maybe (Val Integer')
+  , _elasticLoadBalancingV2TargetGroupHealthCheckPath :: Maybe (Val Text)
+  , _elasticLoadBalancingV2TargetGroupHealthCheckPort :: Maybe (Val Text)
+  , _elasticLoadBalancingV2TargetGroupHealthCheckProtocol :: Maybe (Val Text)
+  , _elasticLoadBalancingV2TargetGroupHealthCheckTimeoutSeconds :: Maybe (Val Integer')
+  , _elasticLoadBalancingV2TargetGroupHealthyThresholdCount :: Maybe (Val Integer')
+  , _elasticLoadBalancingV2TargetGroupMatcher :: Maybe ElasticLoadBalancingV2TargetGroupMatcher
+  , _elasticLoadBalancingV2TargetGroupName :: Maybe (Val Text)
+  , _elasticLoadBalancingV2TargetGroupPort :: Val Integer'
+  , _elasticLoadBalancingV2TargetGroupProtocol :: Val Text
+  , _elasticLoadBalancingV2TargetGroupTags :: Maybe [Tag]
+  , _elasticLoadBalancingV2TargetGroupTargetGroupAttributes :: Maybe [ElasticLoadBalancingV2TargetGroupTargetGroupAttribute]
+  , _elasticLoadBalancingV2TargetGroupTargets :: Maybe [ElasticLoadBalancingV2TargetGroupTargetDescription]
+  , _elasticLoadBalancingV2TargetGroupUnhealthyThresholdCount :: Maybe (Val Integer')
+  , _elasticLoadBalancingV2TargetGroupVpcId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticLoadBalancingV2TargetGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+instance FromJSON ElasticLoadBalancingV2TargetGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 34, omitNothingFields = True }
+
+-- | Constructor for 'ElasticLoadBalancingV2TargetGroup' containing required
+-- | fields as arguments.
+elasticLoadBalancingV2TargetGroup
+  :: Val Integer' -- ^ 'elbvtgPort'
+  -> Val Text -- ^ 'elbvtgProtocol'
+  -> Val Text -- ^ 'elbvtgVpcId'
+  -> ElasticLoadBalancingV2TargetGroup
+elasticLoadBalancingV2TargetGroup portarg protocolarg vpcIdarg =
+  ElasticLoadBalancingV2TargetGroup
+  { _elasticLoadBalancingV2TargetGroupHealthCheckIntervalSeconds = Nothing
+  , _elasticLoadBalancingV2TargetGroupHealthCheckPath = Nothing
+  , _elasticLoadBalancingV2TargetGroupHealthCheckPort = Nothing
+  , _elasticLoadBalancingV2TargetGroupHealthCheckProtocol = Nothing
+  , _elasticLoadBalancingV2TargetGroupHealthCheckTimeoutSeconds = Nothing
+  , _elasticLoadBalancingV2TargetGroupHealthyThresholdCount = Nothing
+  , _elasticLoadBalancingV2TargetGroupMatcher = Nothing
+  , _elasticLoadBalancingV2TargetGroupName = Nothing
+  , _elasticLoadBalancingV2TargetGroupPort = portarg
+  , _elasticLoadBalancingV2TargetGroupProtocol = protocolarg
+  , _elasticLoadBalancingV2TargetGroupTags = Nothing
+  , _elasticLoadBalancingV2TargetGroupTargetGroupAttributes = Nothing
+  , _elasticLoadBalancingV2TargetGroupTargets = Nothing
+  , _elasticLoadBalancingV2TargetGroupUnhealthyThresholdCount = Nothing
+  , _elasticLoadBalancingV2TargetGroupVpcId = vpcIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-healthcheckintervalseconds
+elbvtgHealthCheckIntervalSeconds :: Lens' ElasticLoadBalancingV2TargetGroup (Maybe (Val Integer'))
+elbvtgHealthCheckIntervalSeconds = lens _elasticLoadBalancingV2TargetGroupHealthCheckIntervalSeconds (\s a -> s { _elasticLoadBalancingV2TargetGroupHealthCheckIntervalSeconds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-healthcheckpath
+elbvtgHealthCheckPath :: Lens' ElasticLoadBalancingV2TargetGroup (Maybe (Val Text))
+elbvtgHealthCheckPath = lens _elasticLoadBalancingV2TargetGroupHealthCheckPath (\s a -> s { _elasticLoadBalancingV2TargetGroupHealthCheckPath = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-healthcheckport
+elbvtgHealthCheckPort :: Lens' ElasticLoadBalancingV2TargetGroup (Maybe (Val Text))
+elbvtgHealthCheckPort = lens _elasticLoadBalancingV2TargetGroupHealthCheckPort (\s a -> s { _elasticLoadBalancingV2TargetGroupHealthCheckPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-healthcheckprotocol
+elbvtgHealthCheckProtocol :: Lens' ElasticLoadBalancingV2TargetGroup (Maybe (Val Text))
+elbvtgHealthCheckProtocol = lens _elasticLoadBalancingV2TargetGroupHealthCheckProtocol (\s a -> s { _elasticLoadBalancingV2TargetGroupHealthCheckProtocol = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-healthchecktimeoutseconds
+elbvtgHealthCheckTimeoutSeconds :: Lens' ElasticLoadBalancingV2TargetGroup (Maybe (Val Integer'))
+elbvtgHealthCheckTimeoutSeconds = lens _elasticLoadBalancingV2TargetGroupHealthCheckTimeoutSeconds (\s a -> s { _elasticLoadBalancingV2TargetGroupHealthCheckTimeoutSeconds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-healthythresholdcount
+elbvtgHealthyThresholdCount :: Lens' ElasticLoadBalancingV2TargetGroup (Maybe (Val Integer'))
+elbvtgHealthyThresholdCount = lens _elasticLoadBalancingV2TargetGroupHealthyThresholdCount (\s a -> s { _elasticLoadBalancingV2TargetGroupHealthyThresholdCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-matcher
+elbvtgMatcher :: Lens' ElasticLoadBalancingV2TargetGroup (Maybe ElasticLoadBalancingV2TargetGroupMatcher)
+elbvtgMatcher = lens _elasticLoadBalancingV2TargetGroupMatcher (\s a -> s { _elasticLoadBalancingV2TargetGroupMatcher = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-name
+elbvtgName :: Lens' ElasticLoadBalancingV2TargetGroup (Maybe (Val Text))
+elbvtgName = lens _elasticLoadBalancingV2TargetGroupName (\s a -> s { _elasticLoadBalancingV2TargetGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-port
+elbvtgPort :: Lens' ElasticLoadBalancingV2TargetGroup (Val Integer')
+elbvtgPort = lens _elasticLoadBalancingV2TargetGroupPort (\s a -> s { _elasticLoadBalancingV2TargetGroupPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-protocol
+elbvtgProtocol :: Lens' ElasticLoadBalancingV2TargetGroup (Val Text)
+elbvtgProtocol = lens _elasticLoadBalancingV2TargetGroupProtocol (\s a -> s { _elasticLoadBalancingV2TargetGroupProtocol = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-tags
+elbvtgTags :: Lens' ElasticLoadBalancingV2TargetGroup (Maybe [Tag])
+elbvtgTags = lens _elasticLoadBalancingV2TargetGroupTags (\s a -> s { _elasticLoadBalancingV2TargetGroupTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-targetgroupattributes
+elbvtgTargetGroupAttributes :: Lens' ElasticLoadBalancingV2TargetGroup (Maybe [ElasticLoadBalancingV2TargetGroupTargetGroupAttribute])
+elbvtgTargetGroupAttributes = lens _elasticLoadBalancingV2TargetGroupTargetGroupAttributes (\s a -> s { _elasticLoadBalancingV2TargetGroupTargetGroupAttributes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-targets
+elbvtgTargets :: Lens' ElasticLoadBalancingV2TargetGroup (Maybe [ElasticLoadBalancingV2TargetGroupTargetDescription])
+elbvtgTargets = lens _elasticLoadBalancingV2TargetGroupTargets (\s a -> s { _elasticLoadBalancingV2TargetGroupTargets = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-unhealthythresholdcount
+elbvtgUnhealthyThresholdCount :: Lens' ElasticLoadBalancingV2TargetGroup (Maybe (Val Integer'))
+elbvtgUnhealthyThresholdCount = lens _elasticLoadBalancingV2TargetGroupUnhealthyThresholdCount (\s a -> s { _elasticLoadBalancingV2TargetGroupUnhealthyThresholdCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-vpcid
+elbvtgVpcId :: Lens' ElasticLoadBalancingV2TargetGroup (Val Text)
+elbvtgVpcId = lens _elasticLoadBalancingV2TargetGroupVpcId (\s a -> s { _elasticLoadBalancingV2TargetGroupVpcId = a })
diff --git a/library-gen/Stratosphere/Resources/ElasticsearchDomain.hs b/library-gen/Stratosphere/Resources/ElasticsearchDomain.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ElasticsearchDomain.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html
+
+module Stratosphere.Resources.ElasticsearchDomain where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.ElasticsearchDomainEBSOptions
+import Stratosphere.ResourceProperties.ElasticsearchDomainElasticsearchClusterConfig
+import Stratosphere.ResourceProperties.ElasticsearchDomainSnapshotOptions
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for ElasticsearchDomain. See
+-- | 'elasticsearchDomain' for a more convenient constructor.
+data ElasticsearchDomain =
+  ElasticsearchDomain
+  { _elasticsearchDomainAccessPolicies :: Maybe Object
+  , _elasticsearchDomainAdvancedOptions :: Maybe Object
+  , _elasticsearchDomainDomainName :: Maybe (Val Text)
+  , _elasticsearchDomainEBSOptions :: Maybe ElasticsearchDomainEBSOptions
+  , _elasticsearchDomainElasticsearchClusterConfig :: Maybe ElasticsearchDomainElasticsearchClusterConfig
+  , _elasticsearchDomainElasticsearchVersion :: Maybe (Val Text)
+  , _elasticsearchDomainSnapshotOptions :: Maybe ElasticsearchDomainSnapshotOptions
+  , _elasticsearchDomainTags :: Maybe [Tag]
+  } deriving (Show, Generic)
+
+instance ToJSON ElasticsearchDomain where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+instance FromJSON ElasticsearchDomain where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+-- | Constructor for 'ElasticsearchDomain' containing required fields as
+-- | arguments.
+elasticsearchDomain
+  :: ElasticsearchDomain
+elasticsearchDomain  =
+  ElasticsearchDomain
+  { _elasticsearchDomainAccessPolicies = Nothing
+  , _elasticsearchDomainAdvancedOptions = Nothing
+  , _elasticsearchDomainDomainName = Nothing
+  , _elasticsearchDomainEBSOptions = Nothing
+  , _elasticsearchDomainElasticsearchClusterConfig = Nothing
+  , _elasticsearchDomainElasticsearchVersion = Nothing
+  , _elasticsearchDomainSnapshotOptions = Nothing
+  , _elasticsearchDomainTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-accesspolicies
+edAccessPolicies :: Lens' ElasticsearchDomain (Maybe Object)
+edAccessPolicies = lens _elasticsearchDomainAccessPolicies (\s a -> s { _elasticsearchDomainAccessPolicies = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-advancedoptions
+edAdvancedOptions :: Lens' ElasticsearchDomain (Maybe Object)
+edAdvancedOptions = lens _elasticsearchDomainAdvancedOptions (\s a -> s { _elasticsearchDomainAdvancedOptions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-domainname
+edDomainName :: Lens' ElasticsearchDomain (Maybe (Val Text))
+edDomainName = lens _elasticsearchDomainDomainName (\s a -> s { _elasticsearchDomainDomainName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-ebsoptions
+edEBSOptions :: Lens' ElasticsearchDomain (Maybe ElasticsearchDomainEBSOptions)
+edEBSOptions = lens _elasticsearchDomainEBSOptions (\s a -> s { _elasticsearchDomainEBSOptions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-elasticsearchclusterconfig
+edElasticsearchClusterConfig :: Lens' ElasticsearchDomain (Maybe ElasticsearchDomainElasticsearchClusterConfig)
+edElasticsearchClusterConfig = lens _elasticsearchDomainElasticsearchClusterConfig (\s a -> s { _elasticsearchDomainElasticsearchClusterConfig = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-elasticsearchversion
+edElasticsearchVersion :: Lens' ElasticsearchDomain (Maybe (Val Text))
+edElasticsearchVersion = lens _elasticsearchDomainElasticsearchVersion (\s a -> s { _elasticsearchDomainElasticsearchVersion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-snapshotoptions
+edSnapshotOptions :: Lens' ElasticsearchDomain (Maybe ElasticsearchDomainSnapshotOptions)
+edSnapshotOptions = lens _elasticsearchDomainSnapshotOptions (\s a -> s { _elasticsearchDomainSnapshotOptions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-tags
+edTags :: Lens' ElasticsearchDomain (Maybe [Tag])
+edTags = lens _elasticsearchDomainTags (\s a -> s { _elasticsearchDomainTags = a })
diff --git a/library-gen/Stratosphere/Resources/EventsRule.hs b/library-gen/Stratosphere/Resources/EventsRule.hs
--- a/library-gen/Stratosphere/Resources/EventsRule.hs
+++ b/library-gen/Stratosphere/Resources/EventsRule.hs
@@ -1,10 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::Events::Rule resource creates a rule that matches incoming
--- Amazon CloudWatch Events (CloudWatch Events) events and routes them to one
--- or more targets for processing. For more information, see Using CloudWatch
--- Events in the Amazon CloudWatch User Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html
 
 module Stratosphere.Resources.EventsRule where
 
@@ -16,9 +13,10 @@
 
 import Stratosphere.Values
 import Stratosphere.Types
+import Stratosphere.ResourceProperties.EventsRuleTarget
 
 -- | Full data type definition for EventsRule. See 'eventsRule' for a more
--- convenient constructor.
+-- | convenient constructor.
 data EventsRule =
   EventsRule
   { _eventsRuleDescription :: Maybe (Val Text)
@@ -26,8 +24,8 @@
   , _eventsRuleName :: Maybe (Val Text)
   , _eventsRuleRoleArn :: Maybe (Val Text)
   , _eventsRuleScheduleExpression :: Maybe (Val Text)
-  , _eventsRuleState :: Maybe EnabledState
-  , _eventsRuleTargets :: Maybe [Object]
+  , _eventsRuleState :: Maybe (Val EnabledState)
+  , _eventsRuleTargets :: Maybe [EventsRuleTarget]
   } deriving (Show, Generic)
 
 instance ToJSON EventsRule where
@@ -50,46 +48,30 @@
   , _eventsRuleTargets = Nothing
   }
 
--- | A description of the rule's purpose.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html#cfn-events-rule-description
 erDescription :: Lens' EventsRule (Maybe (Val Text))
 erDescription = lens _eventsRuleDescription (\s a -> s { _eventsRuleDescription = a })
 
--- | Describes which events CloudWatch Events routes to the specified target.
--- These routed events are matched events. For more information, see Events
--- and Event Patterns in the Amazon CloudWatch User Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html#cfn-events-rule-eventpattern
 erEventPattern :: Lens' EventsRule (Maybe Object)
 erEventPattern = lens _eventsRuleEventPattern (\s a -> s { _eventsRuleEventPattern = a })
 
--- | A name for the rule. If you don't specify a name, AWS CloudFormation
--- generates a unique physical ID and uses that ID for the rule name. For more
--- information, see Name Type. Important If you specify a name, you cannot do
--- updates that require this resource to be replaced. You can still do updates
--- that require no or some interruption. If you must replace the resource,
--- specify a new name.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html#cfn-events-rule-name
 erName :: Lens' EventsRule (Maybe (Val Text))
 erName = lens _eventsRuleName (\s a -> s { _eventsRuleName = a })
 
--- | The Amazon Resource Name (ARN) of the AWS Identity and Access Management
--- (IAM) role that grants CloudWatch Events permission to make calls to target
--- services, such as AWS Lambda (Lambda) or Amazon Kinesis streams.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html#cfn-events-rule-rolearn
 erRoleArn :: Lens' EventsRule (Maybe (Val Text))
 erRoleArn = lens _eventsRuleRoleArn (\s a -> s { _eventsRuleRoleArn = a })
 
--- | The schedule or rate (frequency) that determines when CloudWatch Events
--- runs the rule. For more information, see Schedule Expression Syntax for
--- Rules in the Amazon CloudWatch User Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html#cfn-events-rule-scheduleexpression
 erScheduleExpression :: Lens' EventsRule (Maybe (Val Text))
 erScheduleExpression = lens _eventsRuleScheduleExpression (\s a -> s { _eventsRuleScheduleExpression = a })
 
--- | Indicates whether the rule is enabled. For valid values, see the State
--- parameter for the PutRule action in the Amazon CloudWatch Events API
--- Reference.
-erState :: Lens' EventsRule (Maybe EnabledState)
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html#cfn-events-rule-state
+erState :: Lens' EventsRule (Maybe (Val EnabledState))
 erState = lens _eventsRuleState (\s a -> s { _eventsRuleState = a })
 
--- | The resources, such as Lambda functions or Amazon Kinesis streams, that
--- CloudWatch Events routes events to and invokes when the rule is triggered.
--- For information about valid targets, see the PutTargets action in the
--- Amazon CloudWatch Events API Reference.
-erTargets :: Lens' EventsRule (Maybe [Object])
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html#cfn-events-rule-targets
+erTargets :: Lens' EventsRule (Maybe [EventsRuleTarget])
 erTargets = lens _eventsRuleTargets (\s a -> s { _eventsRuleTargets = a })
diff --git a/library-gen/Stratosphere/Resources/GameLiftAlias.hs b/library-gen/Stratosphere/Resources/GameLiftAlias.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/GameLiftAlias.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-alias.html
+
+module Stratosphere.Resources.GameLiftAlias where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.GameLiftAliasRoutingStrategy
+
+-- | Full data type definition for GameLiftAlias. See 'gameLiftAlias' for a
+-- | more convenient constructor.
+data GameLiftAlias =
+  GameLiftAlias
+  { _gameLiftAliasDescription :: Maybe (Val Text)
+  , _gameLiftAliasName :: Val Text
+  , _gameLiftAliasRoutingStrategy :: GameLiftAliasRoutingStrategy
+  } deriving (Show, Generic)
+
+instance ToJSON GameLiftAlias where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+instance FromJSON GameLiftAlias where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+-- | Constructor for 'GameLiftAlias' containing required fields as arguments.
+gameLiftAlias
+  :: Val Text -- ^ 'glaName'
+  -> GameLiftAliasRoutingStrategy -- ^ 'glaRoutingStrategy'
+  -> GameLiftAlias
+gameLiftAlias namearg routingStrategyarg =
+  GameLiftAlias
+  { _gameLiftAliasDescription = Nothing
+  , _gameLiftAliasName = namearg
+  , _gameLiftAliasRoutingStrategy = routingStrategyarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-alias.html#cfn-gamelift-alias-description
+glaDescription :: Lens' GameLiftAlias (Maybe (Val Text))
+glaDescription = lens _gameLiftAliasDescription (\s a -> s { _gameLiftAliasDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-alias.html#cfn-gamelift-alias-name
+glaName :: Lens' GameLiftAlias (Val Text)
+glaName = lens _gameLiftAliasName (\s a -> s { _gameLiftAliasName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-alias.html#cfn-gamelift-alias-routingstrategy
+glaRoutingStrategy :: Lens' GameLiftAlias GameLiftAliasRoutingStrategy
+glaRoutingStrategy = lens _gameLiftAliasRoutingStrategy (\s a -> s { _gameLiftAliasRoutingStrategy = a })
diff --git a/library-gen/Stratosphere/Resources/GameLiftBuild.hs b/library-gen/Stratosphere/Resources/GameLiftBuild.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/GameLiftBuild.hs
@@ -0,0 +1,52 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-build.html
+
+module Stratosphere.Resources.GameLiftBuild where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.GameLiftBuildS3Location
+
+-- | Full data type definition for GameLiftBuild. See 'gameLiftBuild' for a
+-- | more convenient constructor.
+data GameLiftBuild =
+  GameLiftBuild
+  { _gameLiftBuildName :: Maybe (Val Text)
+  , _gameLiftBuildStorageLocation :: Maybe GameLiftBuildS3Location
+  , _gameLiftBuildVersion :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON GameLiftBuild where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+instance FromJSON GameLiftBuild where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+-- | Constructor for 'GameLiftBuild' containing required fields as arguments.
+gameLiftBuild
+  :: GameLiftBuild
+gameLiftBuild  =
+  GameLiftBuild
+  { _gameLiftBuildName = Nothing
+  , _gameLiftBuildStorageLocation = Nothing
+  , _gameLiftBuildVersion = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-build.html#cfn-gamelift-build-name
+glbName :: Lens' GameLiftBuild (Maybe (Val Text))
+glbName = lens _gameLiftBuildName (\s a -> s { _gameLiftBuildName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-build.html#cfn-gamelift-build-storagelocation
+glbStorageLocation :: Lens' GameLiftBuild (Maybe GameLiftBuildS3Location)
+glbStorageLocation = lens _gameLiftBuildStorageLocation (\s a -> s { _gameLiftBuildStorageLocation = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-build.html#cfn-gamelift-build-version
+glbVersion :: Lens' GameLiftBuild (Maybe (Val Text))
+glbVersion = lens _gameLiftBuildVersion (\s a -> s { _gameLiftBuildVersion = a })
diff --git a/library-gen/Stratosphere/Resources/GameLiftFleet.hs b/library-gen/Stratosphere/Resources/GameLiftFleet.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/GameLiftFleet.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html
+
+module Stratosphere.Resources.GameLiftFleet where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.GameLiftFleetIpPermission
+
+-- | Full data type definition for GameLiftFleet. See 'gameLiftFleet' for a
+-- | more convenient constructor.
+data GameLiftFleet =
+  GameLiftFleet
+  { _gameLiftFleetBuildId :: Val Text
+  , _gameLiftFleetDescription :: Maybe (Val Text)
+  , _gameLiftFleetDesiredEC2Instances :: Val Integer'
+  , _gameLiftFleetEC2InboundPermissions :: Maybe [GameLiftFleetIpPermission]
+  , _gameLiftFleetEC2InstanceType :: Val Text
+  , _gameLiftFleetLogPaths :: Maybe [Val Text]
+  , _gameLiftFleetMaxSize :: Maybe (Val Integer')
+  , _gameLiftFleetMinSize :: Maybe (Val Integer')
+  , _gameLiftFleetName :: Val Text
+  , _gameLiftFleetServerLaunchParameters :: Maybe (Val Text)
+  , _gameLiftFleetServerLaunchPath :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON GameLiftFleet where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+instance FromJSON GameLiftFleet where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+-- | Constructor for 'GameLiftFleet' containing required fields as arguments.
+gameLiftFleet
+  :: Val Text -- ^ 'glfBuildId'
+  -> Val Integer' -- ^ 'glfDesiredEC2Instances'
+  -> Val Text -- ^ 'glfEC2InstanceType'
+  -> Val Text -- ^ 'glfName'
+  -> Val Text -- ^ 'glfServerLaunchPath'
+  -> GameLiftFleet
+gameLiftFleet buildIdarg desiredEC2Instancesarg eC2InstanceTypearg namearg serverLaunchPatharg =
+  GameLiftFleet
+  { _gameLiftFleetBuildId = buildIdarg
+  , _gameLiftFleetDescription = Nothing
+  , _gameLiftFleetDesiredEC2Instances = desiredEC2Instancesarg
+  , _gameLiftFleetEC2InboundPermissions = Nothing
+  , _gameLiftFleetEC2InstanceType = eC2InstanceTypearg
+  , _gameLiftFleetLogPaths = Nothing
+  , _gameLiftFleetMaxSize = Nothing
+  , _gameLiftFleetMinSize = Nothing
+  , _gameLiftFleetName = namearg
+  , _gameLiftFleetServerLaunchParameters = Nothing
+  , _gameLiftFleetServerLaunchPath = serverLaunchPatharg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-buildid
+glfBuildId :: Lens' GameLiftFleet (Val Text)
+glfBuildId = lens _gameLiftFleetBuildId (\s a -> s { _gameLiftFleetBuildId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-description
+glfDescription :: Lens' GameLiftFleet (Maybe (Val Text))
+glfDescription = lens _gameLiftFleetDescription (\s a -> s { _gameLiftFleetDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-desiredec2instances
+glfDesiredEC2Instances :: Lens' GameLiftFleet (Val Integer')
+glfDesiredEC2Instances = lens _gameLiftFleetDesiredEC2Instances (\s a -> s { _gameLiftFleetDesiredEC2Instances = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-ec2inboundpermissions
+glfEC2InboundPermissions :: Lens' GameLiftFleet (Maybe [GameLiftFleetIpPermission])
+glfEC2InboundPermissions = lens _gameLiftFleetEC2InboundPermissions (\s a -> s { _gameLiftFleetEC2InboundPermissions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-ec2instancetype
+glfEC2InstanceType :: Lens' GameLiftFleet (Val Text)
+glfEC2InstanceType = lens _gameLiftFleetEC2InstanceType (\s a -> s { _gameLiftFleetEC2InstanceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-logpaths
+glfLogPaths :: Lens' GameLiftFleet (Maybe [Val Text])
+glfLogPaths = lens _gameLiftFleetLogPaths (\s a -> s { _gameLiftFleetLogPaths = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-maxsize
+glfMaxSize :: Lens' GameLiftFleet (Maybe (Val Integer'))
+glfMaxSize = lens _gameLiftFleetMaxSize (\s a -> s { _gameLiftFleetMaxSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-minsize
+glfMinSize :: Lens' GameLiftFleet (Maybe (Val Integer'))
+glfMinSize = lens _gameLiftFleetMinSize (\s a -> s { _gameLiftFleetMinSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-name
+glfName :: Lens' GameLiftFleet (Val Text)
+glfName = lens _gameLiftFleetName (\s a -> s { _gameLiftFleetName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-serverlaunchparameters
+glfServerLaunchParameters :: Lens' GameLiftFleet (Maybe (Val Text))
+glfServerLaunchParameters = lens _gameLiftFleetServerLaunchParameters (\s a -> s { _gameLiftFleetServerLaunchParameters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-serverlaunchpath
+glfServerLaunchPath :: Lens' GameLiftFleet (Val Text)
+glfServerLaunchPath = lens _gameLiftFleetServerLaunchPath (\s a -> s { _gameLiftFleetServerLaunchPath = a })
diff --git a/library-gen/Stratosphere/Resources/Group.hs b/library-gen/Stratosphere/Resources/Group.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/Group.hs
+++ /dev/null
@@ -1,65 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::IAM::Group type creates an Identity and Access Management (IAM)
--- group. This type supports updates. For more information about updating
--- stacks, see AWS CloudFormation Stacks Updates.
-
-module Stratosphere.Resources.Group where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.IAMPolicies
-
--- | Full data type definition for Group. See 'group' for a more convenient
--- constructor.
-data Group =
-  Group
-  { _groupGroupName :: Maybe (Val Text)
-  , _groupManagedPolicyArns :: Maybe [Val Text]
-  , _groupPath :: Maybe (Val Text)
-  , _groupPolicies :: Maybe [IAMPolicies]
-  } deriving (Show, Generic)
-
-instance ToJSON Group where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 6, omitNothingFields = True }
-
-instance FromJSON Group where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 6, omitNothingFields = True }
-
--- | Constructor for 'Group' containing required fields as arguments.
-group
-  :: Group
-group  =
-  Group
-  { _groupGroupName = Nothing
-  , _groupManagedPolicyArns = Nothing
-  , _groupPath = Nothing
-  , _groupPolicies = Nothing
-  }
-
--- | A name for the IAM group. For valid values, see the GroupName parameter
--- for the CreateGroup action in the IAM API Reference. If you don't specify a
--- name, AWS CloudFormation generates a unique physical ID and uses that ID
--- for the group name.
-gGroupName :: Lens' Group (Maybe (Val Text))
-gGroupName = lens _groupGroupName (\s a -> s { _groupGroupName = a })
-
--- | One or more managed policy ARNs to attach to this group.
-gManagedPolicyArns :: Lens' Group (Maybe [Val Text])
-gManagedPolicyArns = lens _groupManagedPolicyArns (\s a -> s { _groupManagedPolicyArns = a })
-
--- | The path to the group. For more information about paths, see Identifiers
--- for IAM Entities in Using IAM.
-gPath :: Lens' Group (Maybe (Val Text))
-gPath = lens _groupPath (\s a -> s { _groupPath = a })
-
--- | The policies to associate with this group. For information about
--- policies, see Overview of Policies in Using IAM.
-gPolicies :: Lens' Group (Maybe [IAMPolicies])
-gPolicies = lens _groupPolicies (\s a -> s { _groupPolicies = a })
diff --git a/library-gen/Stratosphere/Resources/IAMAccessKey.hs b/library-gen/Stratosphere/Resources/IAMAccessKey.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/IAMAccessKey.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html
+
+module Stratosphere.Resources.IAMAccessKey where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IAMAccessKey. See 'iamAccessKey' for a more
+-- | convenient constructor.
+data IAMAccessKey =
+  IAMAccessKey
+  { _iAMAccessKeySerial :: Maybe (Val Integer')
+  , _iAMAccessKeyStatus :: Maybe (Val Text)
+  , _iAMAccessKeyUserName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IAMAccessKey where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+
+instance FromJSON IAMAccessKey where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+
+-- | Constructor for 'IAMAccessKey' containing required fields as arguments.
+iamAccessKey
+  :: Val Text -- ^ 'iamakUserName'
+  -> IAMAccessKey
+iamAccessKey userNamearg =
+  IAMAccessKey
+  { _iAMAccessKeySerial = Nothing
+  , _iAMAccessKeyStatus = Nothing
+  , _iAMAccessKeyUserName = userNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html#cfn-iam-accesskey-serial
+iamakSerial :: Lens' IAMAccessKey (Maybe (Val Integer'))
+iamakSerial = lens _iAMAccessKeySerial (\s a -> s { _iAMAccessKeySerial = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html#cfn-iam-accesskey-status
+iamakStatus :: Lens' IAMAccessKey (Maybe (Val Text))
+iamakStatus = lens _iAMAccessKeyStatus (\s a -> s { _iAMAccessKeyStatus = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html#cfn-iam-accesskey-username
+iamakUserName :: Lens' IAMAccessKey (Val Text)
+iamakUserName = lens _iAMAccessKeyUserName (\s a -> s { _iAMAccessKeyUserName = a })
diff --git a/library-gen/Stratosphere/Resources/IAMGroup.hs b/library-gen/Stratosphere/Resources/IAMGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/IAMGroup.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html
+
+module Stratosphere.Resources.IAMGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.IAMGroupPolicy
+
+-- | Full data type definition for IAMGroup. See 'iamGroup' for a more
+-- | convenient constructor.
+data IAMGroup =
+  IAMGroup
+  { _iAMGroupGroupName :: Maybe (Val Text)
+  , _iAMGroupManagedPolicyArns :: Maybe [Val Text]
+  , _iAMGroupPath :: Maybe (Val Text)
+  , _iAMGroupPolicies :: Maybe [IAMGroupPolicy]
+  } deriving (Show, Generic)
+
+instance ToJSON IAMGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+
+instance FromJSON IAMGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+
+-- | Constructor for 'IAMGroup' containing required fields as arguments.
+iamGroup
+  :: IAMGroup
+iamGroup  =
+  IAMGroup
+  { _iAMGroupGroupName = Nothing
+  , _iAMGroupManagedPolicyArns = Nothing
+  , _iAMGroupPath = Nothing
+  , _iAMGroupPolicies = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html#cfn-iam-group-groupname
+iamgGroupName :: Lens' IAMGroup (Maybe (Val Text))
+iamgGroupName = lens _iAMGroupGroupName (\s a -> s { _iAMGroupGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html#cfn-iam-group-managepolicyarns
+iamgManagedPolicyArns :: Lens' IAMGroup (Maybe [Val Text])
+iamgManagedPolicyArns = lens _iAMGroupManagedPolicyArns (\s a -> s { _iAMGroupManagedPolicyArns = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html#cfn-iam-group-path
+iamgPath :: Lens' IAMGroup (Maybe (Val Text))
+iamgPath = lens _iAMGroupPath (\s a -> s { _iAMGroupPath = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html#cfn-iam-group-policies
+iamgPolicies :: Lens' IAMGroup (Maybe [IAMGroupPolicy])
+iamgPolicies = lens _iAMGroupPolicies (\s a -> s { _iAMGroupPolicies = a })
diff --git a/library-gen/Stratosphere/Resources/IAMInstanceProfile.hs b/library-gen/Stratosphere/Resources/IAMInstanceProfile.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/IAMInstanceProfile.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html
+
+module Stratosphere.Resources.IAMInstanceProfile where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IAMInstanceProfile. See
+-- | 'iamInstanceProfile' for a more convenient constructor.
+data IAMInstanceProfile =
+  IAMInstanceProfile
+  { _iAMInstanceProfilePath :: Val Text
+  , _iAMInstanceProfileRoles :: [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON IAMInstanceProfile where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+instance FromJSON IAMInstanceProfile where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+-- | Constructor for 'IAMInstanceProfile' containing required fields as
+-- | arguments.
+iamInstanceProfile
+  :: Val Text -- ^ 'iamipPath'
+  -> [Val Text] -- ^ 'iamipRoles'
+  -> IAMInstanceProfile
+iamInstanceProfile patharg rolesarg =
+  IAMInstanceProfile
+  { _iAMInstanceProfilePath = patharg
+  , _iAMInstanceProfileRoles = rolesarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html#cfn-iam-instanceprofile-path
+iamipPath :: Lens' IAMInstanceProfile (Val Text)
+iamipPath = lens _iAMInstanceProfilePath (\s a -> s { _iAMInstanceProfilePath = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html#cfn-iam-instanceprofile-roles
+iamipRoles :: Lens' IAMInstanceProfile [Val Text]
+iamipRoles = lens _iAMInstanceProfileRoles (\s a -> s { _iAMInstanceProfileRoles = a })
diff --git a/library-gen/Stratosphere/Resources/IAMManagedPolicy.hs b/library-gen/Stratosphere/Resources/IAMManagedPolicy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/IAMManagedPolicy.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html
+
+module Stratosphere.Resources.IAMManagedPolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IAMManagedPolicy. See 'iamManagedPolicy'
+-- | for a more convenient constructor.
+data IAMManagedPolicy =
+  IAMManagedPolicy
+  { _iAMManagedPolicyDescription :: Maybe (Val Text)
+  , _iAMManagedPolicyGroups :: Maybe [Val Text]
+  , _iAMManagedPolicyPath :: Maybe (Val Text)
+  , _iAMManagedPolicyPolicyDocument :: Maybe Object
+  , _iAMManagedPolicyRoles :: Maybe [Val Text]
+  , _iAMManagedPolicyUsers :: Maybe [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON IAMManagedPolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+instance FromJSON IAMManagedPolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+-- | Constructor for 'IAMManagedPolicy' containing required fields as
+-- | arguments.
+iamManagedPolicy
+  :: IAMManagedPolicy
+iamManagedPolicy  =
+  IAMManagedPolicy
+  { _iAMManagedPolicyDescription = Nothing
+  , _iAMManagedPolicyGroups = Nothing
+  , _iAMManagedPolicyPath = Nothing
+  , _iAMManagedPolicyPolicyDocument = Nothing
+  , _iAMManagedPolicyRoles = Nothing
+  , _iAMManagedPolicyUsers = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html#cfn-iam-managedpolicy-description
+iammpDescription :: Lens' IAMManagedPolicy (Maybe (Val Text))
+iammpDescription = lens _iAMManagedPolicyDescription (\s a -> s { _iAMManagedPolicyDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html#cfn-iam-managedpolicy-groups
+iammpGroups :: Lens' IAMManagedPolicy (Maybe [Val Text])
+iammpGroups = lens _iAMManagedPolicyGroups (\s a -> s { _iAMManagedPolicyGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html#cfn-ec2-dhcpoptions-path
+iammpPath :: Lens' IAMManagedPolicy (Maybe (Val Text))
+iammpPath = lens _iAMManagedPolicyPath (\s a -> s { _iAMManagedPolicyPath = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html#cfn-iam-managedpolicy-policydocument
+iammpPolicyDocument :: Lens' IAMManagedPolicy (Maybe Object)
+iammpPolicyDocument = lens _iAMManagedPolicyPolicyDocument (\s a -> s { _iAMManagedPolicyPolicyDocument = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html#cfn-iam-managedpolicy-roles
+iammpRoles :: Lens' IAMManagedPolicy (Maybe [Val Text])
+iammpRoles = lens _iAMManagedPolicyRoles (\s a -> s { _iAMManagedPolicyRoles = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html#cfn-iam-managedpolicy-users
+iammpUsers :: Lens' IAMManagedPolicy (Maybe [Val Text])
+iammpUsers = lens _iAMManagedPolicyUsers (\s a -> s { _iAMManagedPolicyUsers = a })
diff --git a/library-gen/Stratosphere/Resources/IAMPolicy.hs b/library-gen/Stratosphere/Resources/IAMPolicy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/IAMPolicy.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html
+
+module Stratosphere.Resources.IAMPolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IAMPolicy. See 'iamPolicy' for a more
+-- | convenient constructor.
+data IAMPolicy =
+  IAMPolicy
+  { _iAMPolicyGroups :: Maybe [Val Text]
+  , _iAMPolicyPolicyDocument :: Object
+  , _iAMPolicyPolicyName :: Val Text
+  , _iAMPolicyRoles :: Maybe [Val Text]
+  , _iAMPolicyUsers :: Maybe [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON IAMPolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+
+instance FromJSON IAMPolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+
+-- | Constructor for 'IAMPolicy' containing required fields as arguments.
+iamPolicy
+  :: Object -- ^ 'iampPolicyDocument'
+  -> Val Text -- ^ 'iampPolicyName'
+  -> IAMPolicy
+iamPolicy policyDocumentarg policyNamearg =
+  IAMPolicy
+  { _iAMPolicyGroups = Nothing
+  , _iAMPolicyPolicyDocument = policyDocumentarg
+  , _iAMPolicyPolicyName = policyNamearg
+  , _iAMPolicyRoles = Nothing
+  , _iAMPolicyUsers = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html#cfn-iam-policy-groups
+iampGroups :: Lens' IAMPolicy (Maybe [Val Text])
+iampGroups = lens _iAMPolicyGroups (\s a -> s { _iAMPolicyGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html#cfn-iam-policy-policydocument
+iampPolicyDocument :: Lens' IAMPolicy Object
+iampPolicyDocument = lens _iAMPolicyPolicyDocument (\s a -> s { _iAMPolicyPolicyDocument = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html#cfn-iam-policy-policyname
+iampPolicyName :: Lens' IAMPolicy (Val Text)
+iampPolicyName = lens _iAMPolicyPolicyName (\s a -> s { _iAMPolicyPolicyName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html#cfn-iam-policy-roles
+iampRoles :: Lens' IAMPolicy (Maybe [Val Text])
+iampRoles = lens _iAMPolicyRoles (\s a -> s { _iAMPolicyRoles = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html#cfn-iam-policy-users
+iampUsers :: Lens' IAMPolicy (Maybe [Val Text])
+iampUsers = lens _iAMPolicyUsers (\s a -> s { _iAMPolicyUsers = a })
diff --git a/library-gen/Stratosphere/Resources/IAMRole.hs b/library-gen/Stratosphere/Resources/IAMRole.hs
--- a/library-gen/Stratosphere/Resources/IAMRole.hs
+++ b/library-gen/Stratosphere/Resources/IAMRole.hs
@@ -1,11 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | Creates an AWS Identity and Access Management (IAM) role. An IAM role can
--- be used to enable applications running on an Amazon EC2 instance to
--- securely access your AWS resources. For more information about IAM roles,
--- see Working with Roles in the AWS Identity and Access Management User
--- Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html
 
 module Stratosphere.Resources.IAMRole where
 
@@ -16,16 +12,16 @@
 import GHC.Generics
 
 import Stratosphere.Values
-import Stratosphere.ResourceProperties.IAMPolicies
+import Stratosphere.ResourceProperties.IAMRolePolicy
 
 -- | Full data type definition for IAMRole. See 'iamRole' for a more
--- convenient constructor.
+-- | convenient constructor.
 data IAMRole =
   IAMRole
   { _iAMRoleAssumeRolePolicyDocument :: Object
   , _iAMRoleManagedPolicyArns :: Maybe [Val Text]
   , _iAMRolePath :: Maybe (Val Text)
-  , _iAMRolePolicies :: Maybe [IAMPolicies]
+  , _iAMRolePolicies :: Maybe [IAMRolePolicy]
   , _iAMRoleRoleName :: Maybe (Val Text)
   } deriving (Show, Generic)
 
@@ -48,38 +44,22 @@
   , _iAMRoleRoleName = Nothing
   }
 
--- | The IAM assume role policy that is associated with this role.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#cfn-iam-role-assumerolepolicydocument
 iamrAssumeRolePolicyDocument :: Lens' IAMRole Object
 iamrAssumeRolePolicyDocument = lens _iAMRoleAssumeRolePolicyDocument (\s a -> s { _iAMRoleAssumeRolePolicyDocument = a })
 
--- | One or more managed policy ARNs to attach to this role.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#cfn-iam-role-managepolicyarns
 iamrManagedPolicyArns :: Lens' IAMRole (Maybe [Val Text])
 iamrManagedPolicyArns = lens _iAMRoleManagedPolicyArns (\s a -> s { _iAMRoleManagedPolicyArns = a })
 
--- | The path associated with this role. For information about IAM paths, see
--- Friendly Names and Paths in IAM User Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#cfn-iam-role-path
 iamrPath :: Lens' IAMRole (Maybe (Val Text))
 iamrPath = lens _iAMRolePath (\s a -> s { _iAMRolePath = a })
 
--- | The policies to associate with this role. Policies can also be specified
--- externally. For sample templates that demonstrates both embedded and
--- external policies, see Template Examples. If you specify multiple polices,
--- specify unique values for the policy name. If you don't, updates to the IAM
--- role will fail. Note If an external policy (such as AWS::IAM::Policy or
--- AWS::IAM::ManagedPolicy) has a Ref to a role and if a resource (such as
--- AWS::ECS::Service) also has a Ref to the same role, add a DependsOn
--- attribute to the resource so that the resource depends on the external
--- policy. This dependency ensures that the role's policy is available
--- throughout the resource's lifecycle. For example, when you delete a stack
--- with an AWS::ECS::Service resource, the DependsOn attribute ensures that
--- the AWS::ECS::Service resource can complete its deletion before its role's
--- policy is deleted.
-iamrPolicies :: Lens' IAMRole (Maybe [IAMPolicies])
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#cfn-iam-role-policies
+iamrPolicies :: Lens' IAMRole (Maybe [IAMRolePolicy])
 iamrPolicies = lens _iAMRolePolicies (\s a -> s { _iAMRolePolicies = a })
 
--- | A name for the IAM role. For valid values, see the RoleName parameter for
--- the CreateRole action in the IAM API Reference. If you don't specify a
--- name, AWS CloudFormation generates a unique physical ID and uses that ID
--- for the role name.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#cfn-iam-role-rolename
 iamrRoleName :: Lens' IAMRole (Maybe (Val Text))
 iamrRoleName = lens _iAMRoleRoleName (\s a -> s { _iAMRoleRoleName = a })
diff --git a/library-gen/Stratosphere/Resources/IAMUser.hs b/library-gen/Stratosphere/Resources/IAMUser.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/IAMUser.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html
+
+module Stratosphere.Resources.IAMUser where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.IAMUserLoginProfile
+import Stratosphere.ResourceProperties.IAMUserPolicy
+
+-- | Full data type definition for IAMUser. See 'iamUser' for a more
+-- | convenient constructor.
+data IAMUser =
+  IAMUser
+  { _iAMUserGroups :: Maybe [Val Text]
+  , _iAMUserLoginProfile :: Maybe IAMUserLoginProfile
+  , _iAMUserManagedPolicyArns :: Maybe [Val Text]
+  , _iAMUserPath :: Maybe (Val Text)
+  , _iAMUserPolicies :: Maybe [IAMUserPolicy]
+  , _iAMUserUserName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON IAMUser where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+
+instance FromJSON IAMUser where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+
+-- | Constructor for 'IAMUser' containing required fields as arguments.
+iamUser
+  :: IAMUser
+iamUser  =
+  IAMUser
+  { _iAMUserGroups = Nothing
+  , _iAMUserLoginProfile = Nothing
+  , _iAMUserManagedPolicyArns = Nothing
+  , _iAMUserPath = Nothing
+  , _iAMUserPolicies = Nothing
+  , _iAMUserUserName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html#cfn-iam-user-groups
+iamuGroups :: Lens' IAMUser (Maybe [Val Text])
+iamuGroups = lens _iAMUserGroups (\s a -> s { _iAMUserGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html#cfn-iam-user-loginprofile
+iamuLoginProfile :: Lens' IAMUser (Maybe IAMUserLoginProfile)
+iamuLoginProfile = lens _iAMUserLoginProfile (\s a -> s { _iAMUserLoginProfile = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html#cfn-iam-user-managepolicyarns
+iamuManagedPolicyArns :: Lens' IAMUser (Maybe [Val Text])
+iamuManagedPolicyArns = lens _iAMUserManagedPolicyArns (\s a -> s { _iAMUserManagedPolicyArns = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html#cfn-iam-user-path
+iamuPath :: Lens' IAMUser (Maybe (Val Text))
+iamuPath = lens _iAMUserPath (\s a -> s { _iAMUserPath = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html#cfn-iam-user-policies
+iamuPolicies :: Lens' IAMUser (Maybe [IAMUserPolicy])
+iamuPolicies = lens _iAMUserPolicies (\s a -> s { _iAMUserPolicies = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html#cfn-iam-user-username
+iamuUserName :: Lens' IAMUser (Maybe (Val Text))
+iamuUserName = lens _iAMUserUserName (\s a -> s { _iAMUserUserName = a })
diff --git a/library-gen/Stratosphere/Resources/IAMUserToGroupAddition.hs b/library-gen/Stratosphere/Resources/IAMUserToGroupAddition.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/IAMUserToGroupAddition.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html
+
+module Stratosphere.Resources.IAMUserToGroupAddition where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IAMUserToGroupAddition. See
+-- | 'iamUserToGroupAddition' for a more convenient constructor.
+data IAMUserToGroupAddition =
+  IAMUserToGroupAddition
+  { _iAMUserToGroupAdditionGroupName :: Val Text
+  , _iAMUserToGroupAdditionUsers :: [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON IAMUserToGroupAddition where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+instance FromJSON IAMUserToGroupAddition where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+-- | Constructor for 'IAMUserToGroupAddition' containing required fields as
+-- | arguments.
+iamUserToGroupAddition
+  :: Val Text -- ^ 'iamutgaGroupName'
+  -> [Val Text] -- ^ 'iamutgaUsers'
+  -> IAMUserToGroupAddition
+iamUserToGroupAddition groupNamearg usersarg =
+  IAMUserToGroupAddition
+  { _iAMUserToGroupAdditionGroupName = groupNamearg
+  , _iAMUserToGroupAdditionUsers = usersarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html#cfn-iam-addusertogroup-groupname
+iamutgaGroupName :: Lens' IAMUserToGroupAddition (Val Text)
+iamutgaGroupName = lens _iAMUserToGroupAdditionGroupName (\s a -> s { _iAMUserToGroupAdditionGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html#cfn-iam-addusertogroup-users
+iamutgaUsers :: Lens' IAMUserToGroupAddition [Val Text]
+iamutgaUsers = lens _iAMUserToGroupAdditionUsers (\s a -> s { _iAMUserToGroupAdditionUsers = a })
diff --git a/library-gen/Stratosphere/Resources/InstanceProfile.hs b/library-gen/Stratosphere/Resources/InstanceProfile.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/InstanceProfile.hs
+++ /dev/null
@@ -1,54 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Creates an AWS Identity and Access Management (IAM) Instance Profile that
--- can be used with IAM Roles for EC2 Instances. For more information about
--- IAM roles, see Working with Roles in the AWS Identity and Access Management
--- User Guide.
-
-module Stratosphere.Resources.InstanceProfile where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for InstanceProfile. See 'instanceProfile' for
--- a more convenient constructor.
-data InstanceProfile =
-  InstanceProfile
-  { _instanceProfilePath :: Val Text
-  , _instanceProfileRoles :: [Val Text]
-  } deriving (Show, Generic)
-
-instance ToJSON InstanceProfile where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
-
-instance FromJSON InstanceProfile where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
-
--- | Constructor for 'InstanceProfile' containing required fields as
--- arguments.
-instanceProfile
-  :: Val Text -- ^ 'ipPath'
-  -> [Val Text] -- ^ 'ipRoles'
-  -> InstanceProfile
-instanceProfile patharg rolesarg =
-  InstanceProfile
-  { _instanceProfilePath = patharg
-  , _instanceProfileRoles = rolesarg
-  }
-
--- | The path associated with this IAM instance profile. For information about
--- IAM paths, see Friendly Names and Paths in the AWS Identity and Access
--- Management User Guide.
-ipPath :: Lens' InstanceProfile (Val Text)
-ipPath = lens _instanceProfilePath (\s a -> s { _instanceProfilePath = a })
-
--- | The roles associated with this IAM instance profile.
-ipRoles :: Lens' InstanceProfile [Val Text]
-ipRoles = lens _instanceProfileRoles (\s a -> s { _instanceProfileRoles = a })
diff --git a/library-gen/Stratosphere/Resources/InternetGateway.hs b/library-gen/Stratosphere/Resources/InternetGateway.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/InternetGateway.hs
+++ /dev/null
@@ -1,42 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Creates a new Internet gateway in your AWS account. After creating the
--- Internet gateway, you then attach it to a VPC.
-
-module Stratosphere.Resources.InternetGateway where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.ResourceTag
-
--- | Full data type definition for InternetGateway. See 'internetGateway' for
--- a more convenient constructor.
-data InternetGateway =
-  InternetGateway
-  { _internetGatewayTags :: Maybe [ResourceTag]
-  } deriving (Show, Generic)
-
-instance ToJSON InternetGateway where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
-
-instance FromJSON InternetGateway where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
-
--- | Constructor for 'InternetGateway' containing required fields as
--- arguments.
-internetGateway
-  :: InternetGateway
-internetGateway  =
-  InternetGateway
-  { _internetGatewayTags = Nothing
-  }
-
--- | An arbitrary set of tags (key–value pairs) for this resource.
-igTags :: Lens' InternetGateway (Maybe [ResourceTag])
-igTags = lens _internetGatewayTags (\s a -> s { _internetGatewayTags = a })
diff --git a/library-gen/Stratosphere/Resources/IoTCertificate.hs b/library-gen/Stratosphere/Resources/IoTCertificate.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/IoTCertificate.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-certificate.html
+
+module Stratosphere.Resources.IoTCertificate where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IoTCertificate. See 'ioTCertificate' for a
+-- | more convenient constructor.
+data IoTCertificate =
+  IoTCertificate
+  { _ioTCertificateCertificateSigningRequest :: Val Text
+  , _ioTCertificateStatus :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IoTCertificate where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+instance FromJSON IoTCertificate where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+-- | Constructor for 'IoTCertificate' containing required fields as arguments.
+ioTCertificate
+  :: Val Text -- ^ 'itcCertificateSigningRequest'
+  -> Val Text -- ^ 'itcStatus'
+  -> IoTCertificate
+ioTCertificate certificateSigningRequestarg statusarg =
+  IoTCertificate
+  { _ioTCertificateCertificateSigningRequest = certificateSigningRequestarg
+  , _ioTCertificateStatus = statusarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-certificate.html#cfn-iot-certificate-certificatesigningrequest
+itcCertificateSigningRequest :: Lens' IoTCertificate (Val Text)
+itcCertificateSigningRequest = lens _ioTCertificateCertificateSigningRequest (\s a -> s { _ioTCertificateCertificateSigningRequest = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-certificate.html#cfn-iot-certificate-status
+itcStatus :: Lens' IoTCertificate (Val Text)
+itcStatus = lens _ioTCertificateStatus (\s a -> s { _ioTCertificateStatus = a })
diff --git a/library-gen/Stratosphere/Resources/IoTPolicy.hs b/library-gen/Stratosphere/Resources/IoTPolicy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/IoTPolicy.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-policy.html
+
+module Stratosphere.Resources.IoTPolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IoTPolicy. See 'ioTPolicy' for a more
+-- | convenient constructor.
+data IoTPolicy =
+  IoTPolicy
+  { _ioTPolicyPolicyDocument :: Object
+  , _ioTPolicyPolicyName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON IoTPolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+
+instance FromJSON IoTPolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+
+-- | Constructor for 'IoTPolicy' containing required fields as arguments.
+ioTPolicy
+  :: Object -- ^ 'itpPolicyDocument'
+  -> IoTPolicy
+ioTPolicy policyDocumentarg =
+  IoTPolicy
+  { _ioTPolicyPolicyDocument = policyDocumentarg
+  , _ioTPolicyPolicyName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-policy.html#cfn-iot-policy-policydocument
+itpPolicyDocument :: Lens' IoTPolicy Object
+itpPolicyDocument = lens _ioTPolicyPolicyDocument (\s a -> s { _ioTPolicyPolicyDocument = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-policy.html#cfn-iot-policy-policyname
+itpPolicyName :: Lens' IoTPolicy (Maybe (Val Text))
+itpPolicyName = lens _ioTPolicyPolicyName (\s a -> s { _ioTPolicyPolicyName = a })
diff --git a/library-gen/Stratosphere/Resources/IoTPolicyPrincipalAttachment.hs b/library-gen/Stratosphere/Resources/IoTPolicyPrincipalAttachment.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/IoTPolicyPrincipalAttachment.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-policyprincipalattachment.html
+
+module Stratosphere.Resources.IoTPolicyPrincipalAttachment where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IoTPolicyPrincipalAttachment. See
+-- | 'ioTPolicyPrincipalAttachment' for a more convenient constructor.
+data IoTPolicyPrincipalAttachment =
+  IoTPolicyPrincipalAttachment
+  { _ioTPolicyPrincipalAttachmentPolicyName :: Val Text
+  , _ioTPolicyPrincipalAttachmentPrincipal :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IoTPolicyPrincipalAttachment where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+instance FromJSON IoTPolicyPrincipalAttachment where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+-- | Constructor for 'IoTPolicyPrincipalAttachment' containing required fields
+-- | as arguments.
+ioTPolicyPrincipalAttachment
+  :: Val Text -- ^ 'itppaPolicyName'
+  -> Val Text -- ^ 'itppaPrincipal'
+  -> IoTPolicyPrincipalAttachment
+ioTPolicyPrincipalAttachment policyNamearg principalarg =
+  IoTPolicyPrincipalAttachment
+  { _ioTPolicyPrincipalAttachmentPolicyName = policyNamearg
+  , _ioTPolicyPrincipalAttachmentPrincipal = principalarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-policyprincipalattachment.html#cfn-iot-policyprincipalattachment-policyname
+itppaPolicyName :: Lens' IoTPolicyPrincipalAttachment (Val Text)
+itppaPolicyName = lens _ioTPolicyPrincipalAttachmentPolicyName (\s a -> s { _ioTPolicyPrincipalAttachmentPolicyName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-policyprincipalattachment.html#cfn-iot-policyprincipalattachment-principal
+itppaPrincipal :: Lens' IoTPolicyPrincipalAttachment (Val Text)
+itppaPrincipal = lens _ioTPolicyPrincipalAttachmentPrincipal (\s a -> s { _ioTPolicyPrincipalAttachmentPrincipal = a })
diff --git a/library-gen/Stratosphere/Resources/IoTThing.hs b/library-gen/Stratosphere/Resources/IoTThing.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/IoTThing.hs
@@ -0,0 +1,46 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-thing.html
+
+module Stratosphere.Resources.IoTThing where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.IoTThingAttributePayload
+
+-- | Full data type definition for IoTThing. See 'ioTThing' for a more
+-- | convenient constructor.
+data IoTThing =
+  IoTThing
+  { _ioTThingAttributePayload :: Maybe IoTThingAttributePayload
+  , _ioTThingThingName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON IoTThing where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+
+instance FromJSON IoTThing where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+
+-- | Constructor for 'IoTThing' containing required fields as arguments.
+ioTThing
+  :: IoTThing
+ioTThing  =
+  IoTThing
+  { _ioTThingAttributePayload = Nothing
+  , _ioTThingThingName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-thing.html#cfn-iot-thing-attributepayload
+ittAttributePayload :: Lens' IoTThing (Maybe IoTThingAttributePayload)
+ittAttributePayload = lens _ioTThingAttributePayload (\s a -> s { _ioTThingAttributePayload = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-thing.html#cfn-iot-thing-thingname
+ittThingName :: Lens' IoTThing (Maybe (Val Text))
+ittThingName = lens _ioTThingThingName (\s a -> s { _ioTThingThingName = a })
diff --git a/library-gen/Stratosphere/Resources/IoTThingPrincipalAttachment.hs b/library-gen/Stratosphere/Resources/IoTThingPrincipalAttachment.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/IoTThingPrincipalAttachment.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-thingprincipalattachment.html
+
+module Stratosphere.Resources.IoTThingPrincipalAttachment where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for IoTThingPrincipalAttachment. See
+-- | 'ioTThingPrincipalAttachment' for a more convenient constructor.
+data IoTThingPrincipalAttachment =
+  IoTThingPrincipalAttachment
+  { _ioTThingPrincipalAttachmentPrincipal :: Val Text
+  , _ioTThingPrincipalAttachmentThingName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON IoTThingPrincipalAttachment where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+instance FromJSON IoTThingPrincipalAttachment where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
+
+-- | Constructor for 'IoTThingPrincipalAttachment' containing required fields
+-- | as arguments.
+ioTThingPrincipalAttachment
+  :: Val Text -- ^ 'ittpaPrincipal'
+  -> Val Text -- ^ 'ittpaThingName'
+  -> IoTThingPrincipalAttachment
+ioTThingPrincipalAttachment principalarg thingNamearg =
+  IoTThingPrincipalAttachment
+  { _ioTThingPrincipalAttachmentPrincipal = principalarg
+  , _ioTThingPrincipalAttachmentThingName = thingNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-thingprincipalattachment.html#cfn-iot-thingprincipalattachment-principal
+ittpaPrincipal :: Lens' IoTThingPrincipalAttachment (Val Text)
+ittpaPrincipal = lens _ioTThingPrincipalAttachmentPrincipal (\s a -> s { _ioTThingPrincipalAttachmentPrincipal = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-thingprincipalattachment.html#cfn-iot-thingprincipalattachment-thingname
+ittpaThingName :: Lens' IoTThingPrincipalAttachment (Val Text)
+ittpaThingName = lens _ioTThingPrincipalAttachmentThingName (\s a -> s { _ioTThingPrincipalAttachmentThingName = a })
diff --git a/library-gen/Stratosphere/Resources/IoTTopicRule.hs b/library-gen/Stratosphere/Resources/IoTTopicRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/IoTTopicRule.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-topicrule.html
+
+module Stratosphere.Resources.IoTTopicRule where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.IoTTopicRuleTopicRulePayload
+
+-- | Full data type definition for IoTTopicRule. See 'ioTTopicRule' for a more
+-- | convenient constructor.
+data IoTTopicRule =
+  IoTTopicRule
+  { _ioTTopicRuleRuleName :: Maybe (Val Text)
+  , _ioTTopicRuleTopicRulePayload :: IoTTopicRuleTopicRulePayload
+  } deriving (Show, Generic)
+
+instance ToJSON IoTTopicRule where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+
+instance FromJSON IoTTopicRule where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+
+-- | Constructor for 'IoTTopicRule' containing required fields as arguments.
+ioTTopicRule
+  :: IoTTopicRuleTopicRulePayload -- ^ 'ittrTopicRulePayload'
+  -> IoTTopicRule
+ioTTopicRule topicRulePayloadarg =
+  IoTTopicRule
+  { _ioTTopicRuleRuleName = Nothing
+  , _ioTTopicRuleTopicRulePayload = topicRulePayloadarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-topicrule.html#cfn-iot-topicrule-rulename
+ittrRuleName :: Lens' IoTTopicRule (Maybe (Val Text))
+ittrRuleName = lens _ioTTopicRuleRuleName (\s a -> s { _ioTTopicRuleRuleName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-topicrule.html#cfn-iot-topicrule-topicrulepayload
+ittrTopicRulePayload :: Lens' IoTTopicRule IoTTopicRuleTopicRulePayload
+ittrTopicRulePayload = lens _ioTTopicRuleTopicRulePayload (\s a -> s { _ioTTopicRuleTopicRulePayload = a })
diff --git a/library-gen/Stratosphere/Resources/KMSAlias.hs b/library-gen/Stratosphere/Resources/KMSAlias.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/KMSAlias.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-alias.html
+
+module Stratosphere.Resources.KMSAlias where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for KMSAlias. See 'kmsAlias' for a more
+-- | convenient constructor.
+data KMSAlias =
+  KMSAlias
+  { _kMSAliasAliasName :: Val Text
+  , _kMSAliasTargetKeyId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON KMSAlias where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+
+instance FromJSON KMSAlias where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+
+-- | Constructor for 'KMSAlias' containing required fields as arguments.
+kmsAlias
+  :: Val Text -- ^ 'kmsaAliasName'
+  -> Val Text -- ^ 'kmsaTargetKeyId'
+  -> KMSAlias
+kmsAlias aliasNamearg targetKeyIdarg =
+  KMSAlias
+  { _kMSAliasAliasName = aliasNamearg
+  , _kMSAliasTargetKeyId = targetKeyIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-alias.html#cfn-kms-alias-aliasname
+kmsaAliasName :: Lens' KMSAlias (Val Text)
+kmsaAliasName = lens _kMSAliasAliasName (\s a -> s { _kMSAliasAliasName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-alias.html#cfn-kms-alias-targetkeyid
+kmsaTargetKeyId :: Lens' KMSAlias (Val Text)
+kmsaTargetKeyId = lens _kMSAliasTargetKeyId (\s a -> s { _kMSAliasTargetKeyId = a })
diff --git a/library-gen/Stratosphere/Resources/KMSKey.hs b/library-gen/Stratosphere/Resources/KMSKey.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/KMSKey.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html
+
+module Stratosphere.Resources.KMSKey where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for KMSKey. See 'kmsKey' for a more convenient
+-- | constructor.
+data KMSKey =
+  KMSKey
+  { _kMSKeyDescription :: Maybe (Val Text)
+  , _kMSKeyEnableKeyRotation :: Maybe (Val Bool')
+  , _kMSKeyEnabled :: Maybe (Val Bool')
+  , _kMSKeyKeyPolicy :: Object
+  , _kMSKeyKeyUsage :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON KMSKey where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
+
+instance FromJSON KMSKey where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
+
+-- | Constructor for 'KMSKey' containing required fields as arguments.
+kmsKey
+  :: Object -- ^ 'kmskKeyPolicy'
+  -> KMSKey
+kmsKey keyPolicyarg =
+  KMSKey
+  { _kMSKeyDescription = Nothing
+  , _kMSKeyEnableKeyRotation = Nothing
+  , _kMSKeyEnabled = Nothing
+  , _kMSKeyKeyPolicy = keyPolicyarg
+  , _kMSKeyKeyUsage = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html#cfn-kms-key-description
+kmskDescription :: Lens' KMSKey (Maybe (Val Text))
+kmskDescription = lens _kMSKeyDescription (\s a -> s { _kMSKeyDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html#cfn-kms-key-enablekeyrotation
+kmskEnableKeyRotation :: Lens' KMSKey (Maybe (Val Bool'))
+kmskEnableKeyRotation = lens _kMSKeyEnableKeyRotation (\s a -> s { _kMSKeyEnableKeyRotation = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html#cfn-kms-key-enabled
+kmskEnabled :: Lens' KMSKey (Maybe (Val Bool'))
+kmskEnabled = lens _kMSKeyEnabled (\s a -> s { _kMSKeyEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html#cfn-kms-key-keypolicy
+kmskKeyPolicy :: Lens' KMSKey Object
+kmskKeyPolicy = lens _kMSKeyKeyPolicy (\s a -> s { _kMSKeyKeyPolicy = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html#cfn-kms-key-keyusage
+kmskKeyUsage :: Lens' KMSKey (Maybe (Val Text))
+kmskKeyUsage = lens _kMSKeyKeyUsage (\s a -> s { _kMSKeyKeyUsage = a })
diff --git a/library-gen/Stratosphere/Resources/KinesisFirehoseDeliveryStream.hs b/library-gen/Stratosphere/Resources/KinesisFirehoseDeliveryStream.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/KinesisFirehoseDeliveryStream.hs
@@ -0,0 +1,61 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html
+
+module Stratosphere.Resources.KinesisFirehoseDeliveryStream where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamS3DestinationConfiguration
+
+-- | Full data type definition for KinesisFirehoseDeliveryStream. See
+-- | 'kinesisFirehoseDeliveryStream' for a more convenient constructor.
+data KinesisFirehoseDeliveryStream =
+  KinesisFirehoseDeliveryStream
+  { _kinesisFirehoseDeliveryStreamDeliveryStreamName :: Maybe (Val Text)
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration :: Maybe KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration
+  , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration :: Maybe KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration
+  , _kinesisFirehoseDeliveryStreamS3DestinationConfiguration :: Maybe KinesisFirehoseDeliveryStreamS3DestinationConfiguration
+  } deriving (Show, Generic)
+
+instance ToJSON KinesisFirehoseDeliveryStream where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+instance FromJSON KinesisFirehoseDeliveryStream where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+-- | Constructor for 'KinesisFirehoseDeliveryStream' containing required
+-- | fields as arguments.
+kinesisFirehoseDeliveryStream
+  :: KinesisFirehoseDeliveryStream
+kinesisFirehoseDeliveryStream  =
+  KinesisFirehoseDeliveryStream
+  { _kinesisFirehoseDeliveryStreamDeliveryStreamName = Nothing
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration = Nothing
+  , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration = Nothing
+  , _kinesisFirehoseDeliveryStreamS3DestinationConfiguration = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#cfn-kinesisfirehose-deliverstream-deliverystreamname
+kfdsDeliveryStreamName :: Lens' KinesisFirehoseDeliveryStream (Maybe (Val Text))
+kfdsDeliveryStreamName = lens _kinesisFirehoseDeliveryStreamDeliveryStreamName (\s a -> s { _kinesisFirehoseDeliveryStreamDeliveryStreamName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#cfn-kinesisfirehose-deliverstream-elasticsearchdestinationconfiguration
+kfdsElasticsearchDestinationConfiguration :: Lens' KinesisFirehoseDeliveryStream (Maybe KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration)
+kfdsElasticsearchDestinationConfiguration = lens _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#cfn-kinesisfirehose-deliverystream-redshiftdestinationconfiguration
+kfdsRedshiftDestinationConfiguration :: Lens' KinesisFirehoseDeliveryStream (Maybe KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration)
+kfdsRedshiftDestinationConfiguration = lens _kinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration (\s a -> s { _kinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#cfn-kinesisfirehose-deliverystream-s3destinationconfiguration
+kfdsS3DestinationConfiguration :: Lens' KinesisFirehoseDeliveryStream (Maybe KinesisFirehoseDeliveryStreamS3DestinationConfiguration)
+kfdsS3DestinationConfiguration = lens _kinesisFirehoseDeliveryStreamS3DestinationConfiguration (\s a -> s { _kinesisFirehoseDeliveryStreamS3DestinationConfiguration = a })
diff --git a/library-gen/Stratosphere/Resources/KinesisStream.hs b/library-gen/Stratosphere/Resources/KinesisStream.hs
--- a/library-gen/Stratosphere/Resources/KinesisStream.hs
+++ b/library-gen/Stratosphere/Resources/KinesisStream.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | Creates an Amazon Kinesis stream that captures and transports data
--- records that are emitted from data sources. For information about creating
--- streams, see CreateStream in the Amazon Kinesis API Reference.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-stream.html
 
 module Stratosphere.Resources.KinesisStream where
 
@@ -14,15 +12,15 @@
 import GHC.Generics
 
 import Stratosphere.Values
-import Stratosphere.ResourceProperties.ResourceTag
+import Stratosphere.ResourceProperties.Tag
 
 -- | Full data type definition for KinesisStream. See 'kinesisStream' for a
--- more convenient constructor.
+-- | more convenient constructor.
 data KinesisStream =
   KinesisStream
   { _kinesisStreamName :: Maybe (Val Text)
   , _kinesisStreamShardCount :: Val Integer'
-  , _kinesisStreamTags :: Maybe [ResourceTag]
+  , _kinesisStreamTags :: Maybe [Tag]
   } deriving (Show, Generic)
 
 instance ToJSON KinesisStream where
@@ -42,21 +40,14 @@
   , _kinesisStreamTags = Nothing
   }
 
--- | The name of the Amazon Kinesis stream. If you don't specify a name, AWS
--- CloudFormation generates a unique physical ID and uses that ID for the
--- stream name. For more information, see Name Type. Important If you specify
--- a name, you cannot do updates that require this resource to be replaced.
--- You can still do updates that require no or some interruption. If you must
--- replace the resource, specify a new name.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-stream.html#cfn-kinesis-stream-name
 ksName :: Lens' KinesisStream (Maybe (Val Text))
 ksName = lens _kinesisStreamName (\s a -> s { _kinesisStreamName = a })
 
--- | The number of shards that the stream uses. For greater provisioned
--- throughput, increase the number of shards.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-stream.html#cfn-kinesis-stream-shardcount
 ksShardCount :: Lens' KinesisStream (Val Integer')
 ksShardCount = lens _kinesisStreamShardCount (\s a -> s { _kinesisStreamShardCount = a })
 
--- | An arbitrary set of tags (key–value pairs) to associate with the Amazon
--- Kinesis stream.
-ksTags :: Lens' KinesisStream (Maybe [ResourceTag])
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-stream.html#cfn-kinesis-stream-tags
+ksTags :: Lens' KinesisStream (Maybe [Tag])
 ksTags = lens _kinesisStreamTags (\s a -> s { _kinesisStreamTags = a })
diff --git a/library-gen/Stratosphere/Resources/LambdaAlias.hs b/library-gen/Stratosphere/Resources/LambdaAlias.hs
--- a/library-gen/Stratosphere/Resources/LambdaAlias.hs
+++ b/library-gen/Stratosphere/Resources/LambdaAlias.hs
@@ -1,13 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::Lambda::Alias resource creates an alias that points to the
--- version of an AWS Lambda (Lambda) function that you specify. Use aliases
--- when you want to control which version of your function other services or
--- applications invoke. Those services or applications can use your function's
--- alias so that they don't need to be updated whenever you release a new
--- version of your function. For more information, see Introduction to AWS
--- Lambda Aliases in the AWS Lambda Developer Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-alias.html
 
 module Stratosphere.Resources.LambdaAlias where
 
@@ -21,7 +15,7 @@
 
 
 -- | Full data type definition for LambdaAlias. See 'lambdaAlias' for a more
--- convenient constructor.
+-- | convenient constructor.
 data LambdaAlias =
   LambdaAlias
   { _lambdaAliasDescription :: Maybe (Val Text)
@@ -50,21 +44,18 @@
   , _lambdaAliasName = namearg
   }
 
--- | Information about the alias, such as its purpose or the Lambda function
--- that is associated with it.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-alias.html#cfn-lambda-alias-description
 laDescription :: Lens' LambdaAlias (Maybe (Val Text))
 laDescription = lens _lambdaAliasDescription (\s a -> s { _lambdaAliasDescription = a })
 
--- | The Lambda function that you want to associate with this alias. You can
--- specify the function's name or its Amazon Resource Name (ARN).
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-alias.html#cfn-lambda-alias-functionname
 laFunctionName :: Lens' LambdaAlias (Val Text)
 laFunctionName = lens _lambdaAliasFunctionName (\s a -> s { _lambdaAliasFunctionName = a })
 
--- | The version of the Lambda function that you want to associate with this
--- alias.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-alias.html#cfn-lambda-alias-functionversion
 laFunctionVersion :: Lens' LambdaAlias (Val Text)
 laFunctionVersion = lens _lambdaAliasFunctionVersion (\s a -> s { _lambdaAliasFunctionVersion = a })
 
--- | A name for the alias.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-alias.html#cfn-lambda-alias-name
 laName :: Lens' LambdaAlias (Val Text)
 laName = lens _lambdaAliasName (\s a -> s { _lambdaAliasName = a })
diff --git a/library-gen/Stratosphere/Resources/LambdaEventSourceMapping.hs b/library-gen/Stratosphere/Resources/LambdaEventSourceMapping.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/LambdaEventSourceMapping.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html
+
+module Stratosphere.Resources.LambdaEventSourceMapping where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for LambdaEventSourceMapping. See
+-- | 'lambdaEventSourceMapping' for a more convenient constructor.
+data LambdaEventSourceMapping =
+  LambdaEventSourceMapping
+  { _lambdaEventSourceMappingBatchSize :: Maybe (Val Integer')
+  , _lambdaEventSourceMappingEnabled :: Maybe (Val Bool')
+  , _lambdaEventSourceMappingEventSourceArn :: Val Text
+  , _lambdaEventSourceMappingFunctionName :: Val Text
+  , _lambdaEventSourceMappingStartingPosition :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON LambdaEventSourceMapping where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+instance FromJSON LambdaEventSourceMapping where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+-- | Constructor for 'LambdaEventSourceMapping' containing required fields as
+-- | arguments.
+lambdaEventSourceMapping
+  :: Val Text -- ^ 'lesmEventSourceArn'
+  -> Val Text -- ^ 'lesmFunctionName'
+  -> Val Text -- ^ 'lesmStartingPosition'
+  -> LambdaEventSourceMapping
+lambdaEventSourceMapping eventSourceArnarg functionNamearg startingPositionarg =
+  LambdaEventSourceMapping
+  { _lambdaEventSourceMappingBatchSize = Nothing
+  , _lambdaEventSourceMappingEnabled = Nothing
+  , _lambdaEventSourceMappingEventSourceArn = eventSourceArnarg
+  , _lambdaEventSourceMappingFunctionName = functionNamearg
+  , _lambdaEventSourceMappingStartingPosition = startingPositionarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html#cfn-lambda-eventsourcemapping-batchsize
+lesmBatchSize :: Lens' LambdaEventSourceMapping (Maybe (Val Integer'))
+lesmBatchSize = lens _lambdaEventSourceMappingBatchSize (\s a -> s { _lambdaEventSourceMappingBatchSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html#cfn-lambda-eventsourcemapping-enabled
+lesmEnabled :: Lens' LambdaEventSourceMapping (Maybe (Val Bool'))
+lesmEnabled = lens _lambdaEventSourceMappingEnabled (\s a -> s { _lambdaEventSourceMappingEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html#cfn-lambda-eventsourcemapping-eventsourcearn
+lesmEventSourceArn :: Lens' LambdaEventSourceMapping (Val Text)
+lesmEventSourceArn = lens _lambdaEventSourceMappingEventSourceArn (\s a -> s { _lambdaEventSourceMappingEventSourceArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html#cfn-lambda-eventsourcemapping-functionname
+lesmFunctionName :: Lens' LambdaEventSourceMapping (Val Text)
+lesmFunctionName = lens _lambdaEventSourceMappingFunctionName (\s a -> s { _lambdaEventSourceMappingFunctionName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html#cfn-lambda-eventsourcemapping-startingposition
+lesmStartingPosition :: Lens' LambdaEventSourceMapping (Val Text)
+lesmStartingPosition = lens _lambdaEventSourceMappingStartingPosition (\s a -> s { _lambdaEventSourceMappingStartingPosition = a })
diff --git a/library-gen/Stratosphere/Resources/LambdaFunction.hs b/library-gen/Stratosphere/Resources/LambdaFunction.hs
--- a/library-gen/Stratosphere/Resources/LambdaFunction.hs
+++ b/library-gen/Stratosphere/Resources/LambdaFunction.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::Lambda::Function resource creates an AWS Lambda (Lambda)
--- function that can run code in response to events. For more information, see
--- CreateFunction in the AWS Lambda Developer Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html
 
 module Stratosphere.Resources.LambdaFunction where
 
@@ -14,23 +12,26 @@
 import GHC.Generics
 
 import Stratosphere.Values
-import Stratosphere.ResourceProperties.LambdaFunctionCode
-import Stratosphere.ResourceProperties.LambdaFunctionVPCConfig
 import Stratosphere.Types
+import Stratosphere.ResourceProperties.LambdaFunctionCode
+import Stratosphere.ResourceProperties.LambdaFunctionEnvironment
+import Stratosphere.ResourceProperties.LambdaFunctionVpcConfig
 
 -- | Full data type definition for LambdaFunction. See 'lambdaFunction' for a
--- more convenient constructor.
+-- | more convenient constructor.
 data LambdaFunction =
   LambdaFunction
   { _lambdaFunctionCode :: LambdaFunctionCode
   , _lambdaFunctionDescription :: Maybe (Val Text)
+  , _lambdaFunctionEnvironment :: Maybe LambdaFunctionEnvironment
   , _lambdaFunctionFunctionName :: Maybe (Val Text)
   , _lambdaFunctionHandler :: Val Text
+  , _lambdaFunctionKmsKeyArn :: Maybe (Val Text)
   , _lambdaFunctionMemorySize :: Maybe (Val Integer')
   , _lambdaFunctionRole :: Val Text
-  , _lambdaFunctionRuntime :: Runtime
+  , _lambdaFunctionRuntime :: Val Runtime
   , _lambdaFunctionTimeout :: Maybe (Val Integer')
-  , _lambdaFunctionVpcConfig :: Maybe LambdaFunctionVPCConfig
+  , _lambdaFunctionVpcConfig :: Maybe LambdaFunctionVpcConfig
   } deriving (Show, Generic)
 
 instance ToJSON LambdaFunction where
@@ -44,14 +45,16 @@
   :: LambdaFunctionCode -- ^ 'lfCode'
   -> Val Text -- ^ 'lfHandler'
   -> Val Text -- ^ 'lfRole'
-  -> Runtime -- ^ 'lfRuntime'
+  -> Val Runtime -- ^ 'lfRuntime'
   -> LambdaFunction
 lambdaFunction codearg handlerarg rolearg runtimearg =
   LambdaFunction
   { _lambdaFunctionCode = codearg
   , _lambdaFunctionDescription = Nothing
+  , _lambdaFunctionEnvironment = Nothing
   , _lambdaFunctionFunctionName = Nothing
   , _lambdaFunctionHandler = handlerarg
+  , _lambdaFunctionKmsKeyArn = Nothing
   , _lambdaFunctionMemorySize = Nothing
   , _lambdaFunctionRole = rolearg
   , _lambdaFunctionRuntime = runtimearg
@@ -59,71 +62,46 @@
   , _lambdaFunctionVpcConfig = Nothing
   }
 
--- | The source code of your Lambda function. You can point to a file in an
--- Amazon Simple Storage Service (Amazon S3) bucket or specify your source
--- code as inline text.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-code
 lfCode :: Lens' LambdaFunction LambdaFunctionCode
 lfCode = lens _lambdaFunctionCode (\s a -> s { _lambdaFunctionCode = a })
 
--- | A description of the function.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-description
 lfDescription :: Lens' LambdaFunction (Maybe (Val Text))
 lfDescription = lens _lambdaFunctionDescription (\s a -> s { _lambdaFunctionDescription = a })
 
--- | A name for the function. If you don't specify a name, AWS CloudFormation
--- generates a unique physical ID and uses that ID for the function's name.
--- For more information, see Name Type. Important If you specify a name, you
--- cannot do updates that require this resource to be replaced. You can still
--- do updates that require no or some interruption. If you must replace the
--- resource, specify a new name.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-environment
+lfEnvironment :: Lens' LambdaFunction (Maybe LambdaFunctionEnvironment)
+lfEnvironment = lens _lambdaFunctionEnvironment (\s a -> s { _lambdaFunctionEnvironment = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-functionname
 lfFunctionName :: Lens' LambdaFunction (Maybe (Val Text))
 lfFunctionName = lens _lambdaFunctionFunctionName (\s a -> s { _lambdaFunctionFunctionName = a })
 
--- | The name of the function (within your source code) that Lambda calls to
--- start running your code. For more information, see the Handler property in
--- the AWS Lambda Developer Guide. Note If you specify your source code as
--- inline text by specifying the ZipFile property within the Code property,
--- specify index.function_name as the handler.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-handler
 lfHandler :: Lens' LambdaFunction (Val Text)
 lfHandler = lens _lambdaFunctionHandler (\s a -> s { _lambdaFunctionHandler = a })
 
--- | The amount of memory, in MB, that is allocated to your Lambda function.
--- Lambda uses this value to proportionally allocate the amount of CPU power.
--- For more information, see Resource Model in the AWS Lambda Developer Guide.
--- Your function use case determines your CPU and memory requirements. For
--- example, a database operation might need less memory than an image
--- processing function. You must specify a value that is greater than or equal
--- to 128, and it must be a multiple of 64. You cannot specify a size larger
--- than 1536. The default value is 128 MB.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-kmskeyarn
+lfKmsKeyArn :: Lens' LambdaFunction (Maybe (Val Text))
+lfKmsKeyArn = lens _lambdaFunctionKmsKeyArn (\s a -> s { _lambdaFunctionKmsKeyArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-memorysize
 lfMemorySize :: Lens' LambdaFunction (Maybe (Val Integer'))
 lfMemorySize = lens _lambdaFunctionMemorySize (\s a -> s { _lambdaFunctionMemorySize = a })
 
--- | The Amazon Resource Name (ARN) of the AWS Identity and Access Management
--- (IAM) execution role that Lambda assumes when it runs your code to access
--- AWS services.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-role
 lfRole :: Lens' LambdaFunction (Val Text)
 lfRole = lens _lambdaFunctionRole (\s a -> s { _lambdaFunctionRole = a })
 
--- | The runtime environment for the Lambda function that you are uploading.
--- For valid values, see the Runtime property in the AWS Lambda Developer
--- Guide.
-lfRuntime :: Lens' LambdaFunction Runtime
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-runtime
+lfRuntime :: Lens' LambdaFunction (Val Runtime)
 lfRuntime = lens _lambdaFunctionRuntime (\s a -> s { _lambdaFunctionRuntime = a })
 
--- | The function execution time (in seconds) after which Lambda terminates
--- the function. Because the execution time affects cost, set this value based
--- on the function's expected execution time. By default, Timeout is set to 3
--- seconds.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-timeout
 lfTimeout :: Lens' LambdaFunction (Maybe (Val Integer'))
 lfTimeout = lens _lambdaFunctionTimeout (\s a -> s { _lambdaFunctionTimeout = a })
 
--- | If the Lambda function requires access to resources in a VPC, specify a
--- VPC configuration that Lambda uses to set up an elastic network interface
--- (ENI). The ENI enables your function to connect to other resources in your
--- VPC, but it doesn't provide public Internet access. If your function
--- requires Internet access (for example, to access AWS services that don't
--- have VPC endpoints), configure a Network Address Translation (NAT) instance
--- inside your VPC or use an Amazon Virtual Private Cloud (Amazon VPC) NAT
--- gateway. For more information, see NAT Gateways in the Amazon VPC User
--- Guide.
-lfVpcConfig :: Lens' LambdaFunction (Maybe LambdaFunctionVPCConfig)
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-vpcconfig
+lfVpcConfig :: Lens' LambdaFunction (Maybe LambdaFunctionVpcConfig)
 lfVpcConfig = lens _lambdaFunctionVpcConfig (\s a -> s { _lambdaFunctionVpcConfig = a })
diff --git a/library-gen/Stratosphere/Resources/LambdaPermission.hs b/library-gen/Stratosphere/Resources/LambdaPermission.hs
--- a/library-gen/Stratosphere/Resources/LambdaPermission.hs
+++ b/library-gen/Stratosphere/Resources/LambdaPermission.hs
@@ -1,11 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::Lambda::Permission resource associates a policy statement with a
--- specific AWS Lambda (Lambda) function's access policy. The function policy
--- grants a specific AWS service or application permission to invoke the
--- function. For more information, see AddPermission in the AWS Lambda
--- Developer Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html
 
 module Stratosphere.Resources.LambdaPermission where
 
@@ -19,7 +15,7 @@
 
 
 -- | Full data type definition for LambdaPermission. See 'lambdaPermission'
--- for a more convenient constructor.
+-- | for a more convenient constructor.
 data LambdaPermission =
   LambdaPermission
   { _lambdaPermissionAction :: Val Text
@@ -36,7 +32,7 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
 
 -- | Constructor for 'LambdaPermission' containing required fields as
--- arguments.
+-- | arguments.
 lambdaPermission
   :: Val Text -- ^ 'lpAction'
   -> Val Text -- ^ 'lpFunctionName'
@@ -51,46 +47,22 @@
   , _lambdaPermissionSourceArn = Nothing
   }
 
--- | The Lambda actions that you want to allow in this statement. For example,
--- you can specify lambda:CreateFunction to specify a certain action, or use a
--- wildcard (lambda:*) to grant permission to all Lambda actions. For a list
--- of actions, see Actions and Condition Context Keys for AWS Lambda in the
--- IAM User Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html#cfn-lambda-permission-action
 lpAction :: Lens' LambdaPermission (Val Text)
 lpAction = lens _lambdaPermissionAction (\s a -> s { _lambdaPermissionAction = a })
 
--- | The name (physical ID) or Amazon Resource Name (ARN) of the Lambda
--- function that you want to associate with this statement. Lambda adds this
--- statement to the function's access policy.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html#cfn-lambda-permission-functionname
 lpFunctionName :: Lens' LambdaPermission (Val Text)
 lpFunctionName = lens _lambdaPermissionFunctionName (\s a -> s { _lambdaPermissionFunctionName = a })
 
--- | The entity for which you are granting permission to invoke the Lambda
--- function. This entity can be any valid AWS service principal, such as
--- s3.amazonaws.com or sns.amazonaws.com, or, if you are granting
--- cross-account permission, an AWS account ID. For example, you might want to
--- allow a custom application in another AWS account to push events to Lambda
--- by invoking your function.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html#cfn-lambda-permission-principal
 lpPrincipal :: Lens' LambdaPermission (Val Text)
 lpPrincipal = lens _lambdaPermissionPrincipal (\s a -> s { _lambdaPermissionPrincipal = a })
 
--- | The AWS account ID (without hyphens) of the source owner. For example, if
--- you specify an S3 bucket in the SourceArn property, this value is the
--- bucket owner's account ID. You can use this property to ensure that all
--- source principals are owned by a specific account. Important This property
--- is not supported by all event sources. For more information, see the
--- SourceAccount parameter for the AddPermission action in the AWS Lambda
--- Developer Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html#cfn-lambda-permission-sourceaccount
 lpSourceAccount :: Lens' LambdaPermission (Maybe (Val Text))
 lpSourceAccount = lens _lambdaPermissionSourceAccount (\s a -> s { _lambdaPermissionSourceAccount = a })
 
--- | The ARN of a resource that is invoking your function. When granting
--- Amazon Simple Storage Service (Amazon S3) permission to invoke your
--- function, specify this property with the bucket ARN as its value. This
--- ensures that events generated only from the specified bucket, not just any
--- bucket from any AWS account that creates a mapping to your function, can
--- invoke the function. Important This property is not supported by all event
--- sources. For more information, see the SourceArn parameter for the
--- AddPermission action in the AWS Lambda Developer Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html#cfn-lambda-permission-sourcearn
 lpSourceArn :: Lens' LambdaPermission (Maybe (Val Text))
 lpSourceArn = lens _lambdaPermissionSourceArn (\s a -> s { _lambdaPermissionSourceArn = a })
diff --git a/library-gen/Stratosphere/Resources/LambdaVersion.hs b/library-gen/Stratosphere/Resources/LambdaVersion.hs
--- a/library-gen/Stratosphere/Resources/LambdaVersion.hs
+++ b/library-gen/Stratosphere/Resources/LambdaVersion.hs
@@ -1,11 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::Lambda::Version resource publishes a specified version of an AWS
--- Lambda (Lambda) function. When publishing a new version of your function,
--- Lambda copies the latest version of your function. For more information,
--- see Introduction to AWS Lambda Versioning in the AWS Lambda Developer
--- Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-version.html
 
 module Stratosphere.Resources.LambdaVersion where
 
@@ -19,7 +15,7 @@
 
 
 -- | Full data type definition for LambdaVersion. See 'lambdaVersion' for a
--- more convenient constructor.
+-- | more convenient constructor.
 data LambdaVersion =
   LambdaVersion
   { _lambdaVersionCodeSha256 :: Maybe (Val Text)
@@ -44,20 +40,14 @@
   , _lambdaVersionFunctionName = functionNamearg
   }
 
--- | The SHA-256 hash of the deployment package that you want to publish. This
--- value must match the SHA-256 hash of the $LATEST version of the function.
--- Specify this property to validate that you are publishing the correct
--- package.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-version.html#cfn-lambda-version-codesha256
 lvCodeSha256 :: Lens' LambdaVersion (Maybe (Val Text))
 lvCodeSha256 = lens _lambdaVersionCodeSha256 (\s a -> s { _lambdaVersionCodeSha256 = a })
 
--- | A description of the version you are publishing. If you don't specify a
--- value, Lambda copies the description from the $LATEST version of the
--- function.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-version.html#cfn-lambda-version-description
 lvDescription :: Lens' LambdaVersion (Maybe (Val Text))
 lvDescription = lens _lambdaVersionDescription (\s a -> s { _lambdaVersionDescription = a })
 
--- | The Lambda function for which you want to publish a version. You can
--- specify the function's name or its Amazon Resource Name (ARN).
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-version.html#cfn-lambda-version-functionname
 lvFunctionName :: Lens' LambdaVersion (Val Text)
 lvFunctionName = lens _lambdaVersionFunctionName (\s a -> s { _lambdaVersionFunctionName = a })
diff --git a/library-gen/Stratosphere/Resources/LaunchConfiguration.hs b/library-gen/Stratosphere/Resources/LaunchConfiguration.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/LaunchConfiguration.hs
+++ /dev/null
@@ -1,194 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::AutoScaling::LaunchConfiguration type creates an Auto Scaling
--- launch configuration that can be used by an Auto Scaling group to configure
--- Amazon EC2 instances in the Auto Scaling group.
-
-module Stratosphere.Resources.LaunchConfiguration where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.AutoScalingBlockDeviceMapping
-
--- | Full data type definition for LaunchConfiguration. See
--- 'launchConfiguration' for a more convenient constructor.
-data LaunchConfiguration =
-  LaunchConfiguration
-  { _launchConfigurationAssociatePublicIpAddress :: Maybe (Val Bool')
-  , _launchConfigurationBlockDeviceMappings :: Maybe [AutoScalingBlockDeviceMapping]
-  , _launchConfigurationClassicLinkVPCId :: Maybe (Val Text)
-  , _launchConfigurationClassicLinkVPCSecurityGroups :: Maybe [Val Text]
-  , _launchConfigurationEbsOptimized :: Maybe (Val Bool')
-  , _launchConfigurationIamInstanceProfile :: Maybe (Val Text)
-  , _launchConfigurationImageId :: Val Text
-  , _launchConfigurationInstanceId :: Maybe (Val Text)
-  , _launchConfigurationInstanceMonitoring :: Maybe (Val Bool')
-  , _launchConfigurationInstanceType :: Val Text
-  , _launchConfigurationKernelId :: Maybe (Val Text)
-  , _launchConfigurationKeyName :: Maybe (Val Text)
-  , _launchConfigurationPlacementTenancy :: Maybe (Val Text)
-  , _launchConfigurationRamDiskId :: Maybe (Val Text)
-  , _launchConfigurationSecurityGroups :: Maybe [Val Text]
-  , _launchConfigurationSpotPrice :: Maybe (Val Text)
-  , _launchConfigurationUserData :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON LaunchConfiguration where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
-
-instance FromJSON LaunchConfiguration where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
-
--- | Constructor for 'LaunchConfiguration' containing required fields as
--- arguments.
-launchConfiguration
-  :: Val Text -- ^ 'lcImageId'
-  -> Val Text -- ^ 'lcInstanceType'
-  -> LaunchConfiguration
-launchConfiguration imageIdarg instanceTypearg =
-  LaunchConfiguration
-  { _launchConfigurationAssociatePublicIpAddress = Nothing
-  , _launchConfigurationBlockDeviceMappings = Nothing
-  , _launchConfigurationClassicLinkVPCId = Nothing
-  , _launchConfigurationClassicLinkVPCSecurityGroups = Nothing
-  , _launchConfigurationEbsOptimized = Nothing
-  , _launchConfigurationIamInstanceProfile = Nothing
-  , _launchConfigurationImageId = imageIdarg
-  , _launchConfigurationInstanceId = Nothing
-  , _launchConfigurationInstanceMonitoring = Nothing
-  , _launchConfigurationInstanceType = instanceTypearg
-  , _launchConfigurationKernelId = Nothing
-  , _launchConfigurationKeyName = Nothing
-  , _launchConfigurationPlacementTenancy = Nothing
-  , _launchConfigurationRamDiskId = Nothing
-  , _launchConfigurationSecurityGroups = Nothing
-  , _launchConfigurationSpotPrice = Nothing
-  , _launchConfigurationUserData = Nothing
-  }
-
--- | For Amazon EC2 instances in a VPC, indicates whether instances in the
--- Auto Scaling group receive public IP addresses. If you specify true, each
--- instance in the Auto Scaling receives a unique public IP address. Note If
--- this resource has a public IP address and is also in a VPC that is defined
--- in the same template, you must use the DependsOn attribute to declare a
--- dependency on the VPC-gateway attachment. For more information, see
--- DependsOn Attribute.
-lcAssociatePublicIpAddress :: Lens' LaunchConfiguration (Maybe (Val Bool'))
-lcAssociatePublicIpAddress = lens _launchConfigurationAssociatePublicIpAddress (\s a -> s { _launchConfigurationAssociatePublicIpAddress = a })
-
--- | Specifies how block devices are exposed to the instance. You can specify
--- virtual devices and EBS volumes.
-lcBlockDeviceMappings :: Lens' LaunchConfiguration (Maybe [AutoScalingBlockDeviceMapping])
-lcBlockDeviceMappings = lens _launchConfigurationBlockDeviceMappings (\s a -> s { _launchConfigurationBlockDeviceMappings = a })
-
--- | The ID of a ClassicLink-enabled VPC to link your EC2-Classic instances
--- to. You can specify this property only for EC2-Classic instances. For more
--- information, see ClassicLink in the Amazon Elastic Compute Cloud User
--- Guide.
-lcClassicLinkVPCId :: Lens' LaunchConfiguration (Maybe (Val Text))
-lcClassicLinkVPCId = lens _launchConfigurationClassicLinkVPCId (\s a -> s { _launchConfigurationClassicLinkVPCId = a })
-
--- | The IDs of one or more security groups for the VPC that you specified in
--- the ClassicLinkVPCId property.
-lcClassicLinkVPCSecurityGroups :: Lens' LaunchConfiguration (Maybe [Val Text])
-lcClassicLinkVPCSecurityGroups = lens _launchConfigurationClassicLinkVPCSecurityGroups (\s a -> s { _launchConfigurationClassicLinkVPCSecurityGroups = a })
-
--- | Specifies whether the launch configuration is optimized for EBS I/O. This
--- optimization provides dedicated throughput to Amazon EBS and an optimized
--- configuration stack to provide optimal EBS I/O performance. Additional fees
--- are incurred when using EBS-optimized instances. For more information about
--- fees and supported instance types, see EBS-Optimized Instances in the
--- Amazon EC2 User Guide for Linux Instances.
-lcEbsOptimized :: Lens' LaunchConfiguration (Maybe (Val Bool'))
-lcEbsOptimized = lens _launchConfigurationEbsOptimized (\s a -> s { _launchConfigurationEbsOptimized = a })
-
--- | Provides the name or the Amazon Resource Name (ARN) of the instance
--- profile associated with the IAM role for the instance. The instance profile
--- contains the IAM role.
-lcIamInstanceProfile :: Lens' LaunchConfiguration (Maybe (Val Text))
-lcIamInstanceProfile = lens _launchConfigurationIamInstanceProfile (\s a -> s { _launchConfigurationIamInstanceProfile = a })
-
--- | Provides the unique ID of the Amazon Machine Image (AMI) that was
--- assigned during registration.
-lcImageId :: Lens' LaunchConfiguration (Val Text)
-lcImageId = lens _launchConfigurationImageId (\s a -> s { _launchConfigurationImageId = a })
-
--- | The ID of the Amazon EC2 instance you want to use to create the launch
--- configuration. Use this property if you want the launch configuration to
--- use settings from an existing Amazon EC2 instance. When you use an instance
--- to create a launch configuration, all properties are derived from the
--- instance with the exception of BlockDeviceMapping and
--- AssociatePublicIpAddress. You can override any properties from the instance
--- by specifying them in the launch configuration.
-lcInstanceId :: Lens' LaunchConfiguration (Maybe (Val Text))
-lcInstanceId = lens _launchConfigurationInstanceId (\s a -> s { _launchConfigurationInstanceId = a })
-
--- | Indicates whether detailed instance monitoring is enabled for the Auto
--- Scaling group. By default, this property is set to true (enabled). When
--- detailed monitoring is enabled, Amazon CloudWatch (CloudWatch) generates
--- metrics every minute and your account is charged a fee. When you disable
--- detailed monitoring, CloudWatch generates metrics every 5 minutes. For more
--- information, see Monitor Your Auto Scaling Instances in the Auto Scaling
--- Developer Guide.
-lcInstanceMonitoring :: Lens' LaunchConfiguration (Maybe (Val Bool'))
-lcInstanceMonitoring = lens _launchConfigurationInstanceMonitoring (\s a -> s { _launchConfigurationInstanceMonitoring = a })
-
--- | Specifies the instance type of the EC2 instance.
-lcInstanceType :: Lens' LaunchConfiguration (Val Text)
-lcInstanceType = lens _launchConfigurationInstanceType (\s a -> s { _launchConfigurationInstanceType = a })
-
--- | Provides the ID of the kernel associated with the EC2 AMI.
-lcKernelId :: Lens' LaunchConfiguration (Maybe (Val Text))
-lcKernelId = lens _launchConfigurationKernelId (\s a -> s { _launchConfigurationKernelId = a })
-
--- | Provides the name of the EC2 key pair.
-lcKeyName :: Lens' LaunchConfiguration (Maybe (Val Text))
-lcKeyName = lens _launchConfigurationKeyName (\s a -> s { _launchConfigurationKeyName = a })
-
--- | The tenancy of the instance. An instance with a tenancy of dedicated runs
--- on single-tenant hardware and can only be launched in a VPC. You must set
--- the value of this parameter to dedicated if want to launch dedicated
--- instances in a shared tenancy VPC (a VPC with the instance placement
--- tenancy attribute set to default). For more information, see
--- CreateLaunchConfiguration in the Auto Scaling API Reference. If you specify
--- this property, you must specify at least one subnet in the
--- VPCZoneIdentifier property of the AWS::AutoScaling::AutoScalingGroup
--- resource.
-lcPlacementTenancy :: Lens' LaunchConfiguration (Maybe (Val Text))
-lcPlacementTenancy = lens _launchConfigurationPlacementTenancy (\s a -> s { _launchConfigurationPlacementTenancy = a })
-
--- | The ID of the RAM disk to select. Some kernels require additional drivers
--- at launch. Check the kernel requirements for information about whether you
--- need to specify a RAM disk. To find kernel requirements, refer to the AWS
--- Resource Center and search for the kernel ID.
-lcRamDiskId :: Lens' LaunchConfiguration (Maybe (Val Text))
-lcRamDiskId = lens _launchConfigurationRamDiskId (\s a -> s { _launchConfigurationRamDiskId = a })
-
--- | A list that contains the EC2 security groups to assign to the Amazon EC2
--- instances in the Auto Scaling group. The list can contain the name of
--- existing EC2 security groups or references to AWS::EC2::SecurityGroup
--- resources created in the template. If your instances are launched within
--- VPC, specify Amazon VPC security group IDs.
-lcSecurityGroups :: Lens' LaunchConfiguration (Maybe [Val Text])
-lcSecurityGroups = lens _launchConfigurationSecurityGroups (\s a -> s { _launchConfigurationSecurityGroups = a })
-
--- | The spot price for this autoscaling group. If a spot price is set, then
--- the autoscaling group will launch when the current spot price is less than
--- the amount specified in the template. When you have specified a spot price
--- for an auto scaling group, the group will only launch when the spot price
--- has been met, regardless of the setting in the autoscaling group's
--- DesiredCapacity. For more information about configuring a spot price for an
--- autoscaling group, see Using Auto Scaling to Launch Spot Instances in the
--- AutoScaling Developer Guide.
-lcSpotPrice :: Lens' LaunchConfiguration (Maybe (Val Text))
-lcSpotPrice = lens _launchConfigurationSpotPrice (\s a -> s { _launchConfigurationSpotPrice = a })
-
--- | The user data available to the launched EC2 instances.
-lcUserData :: Lens' LaunchConfiguration (Maybe (Val Text))
-lcUserData = lens _launchConfigurationUserData (\s a -> s { _launchConfigurationUserData = a })
diff --git a/library-gen/Stratosphere/Resources/LifecycleHook.hs b/library-gen/Stratosphere/Resources/LifecycleHook.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/LifecycleHook.hs
+++ /dev/null
@@ -1,97 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Use AWS::AutoScaling::LifecycleHook to control the state of an instance
--- in an Auto Scaling group after it is launched or terminated. When you use a
--- lifecycle hook, the Auto Scaling group either pauses the instance after it
--- is launched (before it is put into service) or pauses the instance as it is
--- terminated (before it is fully terminated). For more information, see
--- Examples of How to Use Lifecycle Hooks in the Auto Scaling User Guide.
-
-module Stratosphere.Resources.LifecycleHook where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for LifecycleHook. See 'lifecycleHook' for a
--- more convenient constructor.
-data LifecycleHook =
-  LifecycleHook
-  { _lifecycleHookAutoScalingGroupName :: Val Text
-  , _lifecycleHookDefaultResult :: Maybe (Val Text)
-  , _lifecycleHookHeartbeatTimeout :: Maybe (Val Integer')
-  , _lifecycleHookLifecycleTransition :: Val Text
-  , _lifecycleHookNotificationMetadata :: Maybe (Val Text)
-  , _lifecycleHookNotificationTargetARN :: Val Text
-  , _lifecycleHookRoleARN :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON LifecycleHook where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
-
-instance FromJSON LifecycleHook where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
-
--- | Constructor for 'LifecycleHook' containing required fields as arguments.
-lifecycleHook
-  :: Val Text -- ^ 'lhAutoScalingGroupName'
-  -> Val Text -- ^ 'lhLifecycleTransition'
-  -> Val Text -- ^ 'lhNotificationTargetARN'
-  -> Val Text -- ^ 'lhRoleARN'
-  -> LifecycleHook
-lifecycleHook autoScalingGroupNamearg lifecycleTransitionarg notificationTargetARNarg roleARNarg =
-  LifecycleHook
-  { _lifecycleHookAutoScalingGroupName = autoScalingGroupNamearg
-  , _lifecycleHookDefaultResult = Nothing
-  , _lifecycleHookHeartbeatTimeout = Nothing
-  , _lifecycleHookLifecycleTransition = lifecycleTransitionarg
-  , _lifecycleHookNotificationMetadata = Nothing
-  , _lifecycleHookNotificationTargetARN = notificationTargetARNarg
-  , _lifecycleHookRoleARN = roleARNarg
-  }
-
--- | The name of the Auto Scaling group for the lifecycle hook.
-lhAutoScalingGroupName :: Lens' LifecycleHook (Val Text)
-lhAutoScalingGroupName = lens _lifecycleHookAutoScalingGroupName (\s a -> s { _lifecycleHookAutoScalingGroupName = a })
-
--- | The action the Auto Scaling group takes when the lifecycle hook timeout
--- elapses or if an unexpected failure occurs.
-lhDefaultResult :: Lens' LifecycleHook (Maybe (Val Text))
-lhDefaultResult = lens _lifecycleHookDefaultResult (\s a -> s { _lifecycleHookDefaultResult = a })
-
--- | The amount of time that can elapse before the lifecycle hook times out.
--- When the lifecycle hook times out, Auto Scaling performs the action that
--- you specified in the DefaultResult property.
-lhHeartbeatTimeout :: Lens' LifecycleHook (Maybe (Val Integer'))
-lhHeartbeatTimeout = lens _lifecycleHookHeartbeatTimeout (\s a -> s { _lifecycleHookHeartbeatTimeout = a })
-
--- | The state of the Amazon EC2 instance to which you want to attach the
--- lifecycle hook.
-lhLifecycleTransition :: Lens' LifecycleHook (Val Text)
-lhLifecycleTransition = lens _lifecycleHookLifecycleTransition (\s a -> s { _lifecycleHookLifecycleTransition = a })
-
--- | Additional information that you want to include when Auto Scaling sends a
--- message to the notification target.
-lhNotificationMetadata :: Lens' LifecycleHook (Maybe (Val Text))
-lhNotificationMetadata = lens _lifecycleHookNotificationMetadata (\s a -> s { _lifecycleHookNotificationMetadata = a })
-
--- | The Amazon resource name (ARN) of the notification target that Auto
--- Scaling uses to notify you when an instance is in the transition state for
--- the lifecycle hook. You can specify an Amazon SQS queue or an Amazon SNS
--- topic. The notification message includes the following information:
--- lifecycle action token, user account ID, Auto Scaling group name, lifecycle
--- hook name, instance ID, lifecycle transition, and notification metadata.
-lhNotificationTargetARN :: Lens' LifecycleHook (Val Text)
-lhNotificationTargetARN = lens _lifecycleHookNotificationTargetARN (\s a -> s { _lifecycleHookNotificationTargetARN = a })
-
--- | The ARN of the IAM role that allows the Auto Scaling group to publish to
--- the specified notification target. The role requires permissions to Amazon
--- SNS and Amazon SQS.
-lhRoleARN :: Lens' LifecycleHook (Val Text)
-lhRoleARN = lens _lifecycleHookRoleARN (\s a -> s { _lifecycleHookRoleARN = a })
diff --git a/library-gen/Stratosphere/Resources/LoadBalancer.hs b/library-gen/Stratosphere/Resources/LoadBalancer.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/LoadBalancer.hs
+++ /dev/null
@@ -1,176 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::ElasticLoadBalancing::LoadBalancer type creates a LoadBalancer.
-
-module Stratosphere.Resources.LoadBalancer where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.AccessLoggingPolicy
-import Stratosphere.ResourceProperties.AppCookieStickinessPolicy
-import Stratosphere.ResourceProperties.ConnectionDrainingPolicy
-import Stratosphere.ResourceProperties.ConnectionSettings
-import Stratosphere.ResourceProperties.HealthCheck
-import Stratosphere.ResourceProperties.LBCookieStickinessPolicy
-import Stratosphere.ResourceProperties.ListenerProperty
-import Stratosphere.ResourceProperties.ELBPolicy
-import Stratosphere.ResourceProperties.ResourceTag
-
--- | Full data type definition for LoadBalancer. See 'loadBalancer' for a more
--- convenient constructor.
-data LoadBalancer =
-  LoadBalancer
-  { _loadBalancerAccessLoggingPolicy :: Maybe AccessLoggingPolicy
-  , _loadBalancerAppCookieStickinessPolicy :: Maybe [AppCookieStickinessPolicy]
-  , _loadBalancerAvailabilityZones :: Maybe [Val Text]
-  , _loadBalancerConnectionDrainingPolicy :: Maybe ConnectionDrainingPolicy
-  , _loadBalancerConnectionSettings :: Maybe ConnectionSettings
-  , _loadBalancerCrossZone :: Maybe (Val Bool')
-  , _loadBalancerHealthCheck :: Maybe HealthCheck
-  , _loadBalancerInstances :: Maybe [Val Text]
-  , _loadBalancerLBCookieStickinessPolicy :: Maybe [LBCookieStickinessPolicy]
-  , _loadBalancerLoadBalancerName :: Maybe (Val Text)
-  , _loadBalancerListeners :: [ListenerProperty]
-  , _loadBalancerPolicies :: Maybe [ELBPolicy]
-  , _loadBalancerScheme :: Maybe (Val Text)
-  , _loadBalancerSecurityGroups :: Maybe [Val Text]
-  , _loadBalancerSubnets :: Maybe [Val Text]
-  , _loadBalancerTags :: Maybe [ResourceTag]
-  } deriving (Show, Generic)
-
-instance ToJSON LoadBalancer where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
-
-instance FromJSON LoadBalancer where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
-
--- | Constructor for 'LoadBalancer' containing required fields as arguments.
-loadBalancer
-  :: [ListenerProperty] -- ^ 'lbListeners'
-  -> LoadBalancer
-loadBalancer listenersarg =
-  LoadBalancer
-  { _loadBalancerAccessLoggingPolicy = Nothing
-  , _loadBalancerAppCookieStickinessPolicy = Nothing
-  , _loadBalancerAvailabilityZones = Nothing
-  , _loadBalancerConnectionDrainingPolicy = Nothing
-  , _loadBalancerConnectionSettings = Nothing
-  , _loadBalancerCrossZone = Nothing
-  , _loadBalancerHealthCheck = Nothing
-  , _loadBalancerInstances = Nothing
-  , _loadBalancerLBCookieStickinessPolicy = Nothing
-  , _loadBalancerLoadBalancerName = Nothing
-  , _loadBalancerListeners = listenersarg
-  , _loadBalancerPolicies = Nothing
-  , _loadBalancerScheme = Nothing
-  , _loadBalancerSecurityGroups = Nothing
-  , _loadBalancerSubnets = Nothing
-  , _loadBalancerTags = Nothing
-  }
-
--- | Captures detailed information for all requests made to your load
--- balancer, such as the time a request was received, client’s IP address,
--- latencies, request path, and server responses.
-lbAccessLoggingPolicy :: Lens' LoadBalancer (Maybe AccessLoggingPolicy)
-lbAccessLoggingPolicy = lens _loadBalancerAccessLoggingPolicy (\s a -> s { _loadBalancerAccessLoggingPolicy = a })
-
--- | Generates one or more stickiness policies with sticky session lifetimes
--- that follow that of an application-generated cookie. These policies can be
--- associated only with HTTP/HTTPS listeners.
-lbAppCookieStickinessPolicy :: Lens' LoadBalancer (Maybe [AppCookieStickinessPolicy])
-lbAppCookieStickinessPolicy = lens _loadBalancerAppCookieStickinessPolicy (\s a -> s { _loadBalancerAppCookieStickinessPolicy = a })
-
--- | The Availability Zones in which to create the load balancer. You can
--- specify the AvailabilityZones or Subnets property, but not both. Note For
--- load balancers that are in a VPC, specify the Subnets property.
-lbAvailabilityZones :: Lens' LoadBalancer (Maybe [Val Text])
-lbAvailabilityZones = lens _loadBalancerAvailabilityZones (\s a -> s { _loadBalancerAvailabilityZones = a })
-
--- | Whether deregistered or unhealthy instances can complete all in-flight
--- requests.
-lbConnectionDrainingPolicy :: Lens' LoadBalancer (Maybe ConnectionDrainingPolicy)
-lbConnectionDrainingPolicy = lens _loadBalancerConnectionDrainingPolicy (\s a -> s { _loadBalancerConnectionDrainingPolicy = a })
-
--- | Specifies how long front-end and back-end connections of your load
--- balancer can remain idle.
-lbConnectionSettings :: Lens' LoadBalancer (Maybe ConnectionSettings)
-lbConnectionSettings = lens _loadBalancerConnectionSettings (\s a -> s { _loadBalancerConnectionSettings = a })
-
--- | Whether cross-zone load balancing is enabled for the load balancer. With
--- cross-zone load balancing, your load balancer nodes route traffic to the
--- back-end instances across all Availability Zones. By default the CrossZone
--- property is false.
-lbCrossZone :: Lens' LoadBalancer (Maybe (Val Bool'))
-lbCrossZone = lens _loadBalancerCrossZone (\s a -> s { _loadBalancerCrossZone = a })
-
--- | Application health check for the instances.
-lbHealthCheck :: Lens' LoadBalancer (Maybe HealthCheck)
-lbHealthCheck = lens _loadBalancerHealthCheck (\s a -> s { _loadBalancerHealthCheck = a })
-
--- | A list of EC2 instance IDs for the load balancer.
-lbInstances :: Lens' LoadBalancer (Maybe [Val Text])
-lbInstances = lens _loadBalancerInstances (\s a -> s { _loadBalancerInstances = a })
-
--- | Generates a stickiness policy with sticky session lifetimes controlled by
--- the lifetime of the browser (user-agent), or by a specified expiration
--- period. This policy can be associated only with HTTP/HTTPS listeners.
-lbLBCookieStickinessPolicy :: Lens' LoadBalancer (Maybe [LBCookieStickinessPolicy])
-lbLBCookieStickinessPolicy = lens _loadBalancerLBCookieStickinessPolicy (\s a -> s { _loadBalancerLBCookieStickinessPolicy = a })
-
--- | A name for the load balancer. If you don't specify a name, AWS
--- CloudFormation generates a unique physical ID and uses that ID for the load
--- balancer. The name must be unique within your set of load balancers. For
--- more information, see Name Type. Important If you specify a name, you
--- cannot do updates that require this resource to be replaced. You can still
--- do updates that require no or some interruption. If you must replace the
--- resource, specify a new name.
-lbLoadBalancerName :: Lens' LoadBalancer (Maybe (Val Text))
-lbLoadBalancerName = lens _loadBalancerLoadBalancerName (\s a -> s { _loadBalancerLoadBalancerName = a })
-
--- | One or more listeners for this load balancer. Each listener must be
--- registered for a specific port, and you cannot have more than one listener
--- for a given port. Important If you update the property values for a
--- listener specified by the Listeners property, AWS CloudFormation will
--- delete the existing listener and create a new one with the updated
--- properties. During the time that AWS CloudFormation is performing this
--- action, clients will not be able to connect to the load balancer.
-lbListeners :: Lens' LoadBalancer [ListenerProperty]
-lbListeners = lens _loadBalancerListeners (\s a -> s { _loadBalancerListeners = a })
-
--- | A list of elastic load balancing policies to apply to this elastic load
--- balancer.
-lbPolicies :: Lens' LoadBalancer (Maybe [ELBPolicy])
-lbPolicies = lens _loadBalancerPolicies (\s a -> s { _loadBalancerPolicies = a })
-
--- | For load balancers attached to an Amazon VPC, this parameter can be used
--- to specify the type of load balancer to use. Specify internal to create an
--- internal load balancer with a DNS name that resolves to private IP
--- addresses or internet-facing to create a load balancer with a publicly
--- resolvable DNS name, which resolves to public IP addresses. Note If you
--- specify internal, you must specify subnets to associate with the load
--- balancer, not Availability Zones.
-lbScheme :: Lens' LoadBalancer (Maybe (Val Text))
-lbScheme = lens _loadBalancerScheme (\s a -> s { _loadBalancerScheme = a })
-
--- |
-lbSecurityGroups :: Lens' LoadBalancer (Maybe [Val Text])
-lbSecurityGroups = lens _loadBalancerSecurityGroups (\s a -> s { _loadBalancerSecurityGroups = a })
-
--- | A list of subnet IDs in your virtual private cloud (VPC) to attach to
--- your load balancer. Do not specify multiple subnets that are in the same
--- Availability Zone. You can specify the AvailabilityZones or Subnets
--- property, but not both. For more information about using Elastic Load
--- Balancing in a VPC, see How Do I Use Elastic Load Balancing in Amazon VPC
--- in the Elastic Load Balancing Developer Guide.
-lbSubnets :: Lens' LoadBalancer (Maybe [Val Text])
-lbSubnets = lens _loadBalancerSubnets (\s a -> s { _loadBalancerSubnets = a })
-
--- | An arbitrary set of tags (key-value pairs) for this load balancer.
-lbTags :: Lens' LoadBalancer (Maybe [ResourceTag])
-lbTags = lens _loadBalancerTags (\s a -> s { _loadBalancerTags = a })
diff --git a/library-gen/Stratosphere/Resources/LogGroup.hs b/library-gen/Stratosphere/Resources/LogGroup.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/LogGroup.hs
+++ /dev/null
@@ -1,56 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::Logs::LogGroup resource creates an Amazon CloudWatch Logs log
--- group that defines common properties for log streams, such as their
--- retention and access control rules. Each log stream must belong to one log
--- group.
-
-module Stratosphere.Resources.LogGroup where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for LogGroup. See 'logGroup' for a more
--- convenient constructor.
-data LogGroup =
-  LogGroup
-  { _logGroupLogGroupName :: Maybe (Val Text)
-  , _logGroupRetentionInDays :: Maybe (Val Integer')
-  } deriving (Show, Generic)
-
-instance ToJSON LogGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
-
-instance FromJSON LogGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
-
--- | Constructor for 'LogGroup' containing required fields as arguments.
-logGroup
-  :: LogGroup
-logGroup  =
-  LogGroup
-  { _logGroupLogGroupName = Nothing
-  , _logGroupRetentionInDays = Nothing
-  }
-
--- | A name for the log group. If you don't specify a name, AWS CloudFormation
--- generates a unique physical ID and uses that ID for the table name. For
--- more information, see Name Type. Important If you specify a name, you
--- cannot do updates that require this resource to be replaced. You can still
--- do updates that require no or some interruption. If you must replace the
--- resource, specify a new name.
-lgLogGroupName :: Lens' LogGroup (Maybe (Val Text))
-lgLogGroupName = lens _logGroupLogGroupName (\s a -> s { _logGroupLogGroupName = a })
-
--- | The number of days log events are kept in CloudWatch Logs. When a log
--- event expires, CloudWatch Logs automatically deletes it. For valid values,
--- see PutRetentionPolicy in the Amazon CloudWatch Logs API Reference.
-lgRetentionInDays :: Lens' LogGroup (Maybe (Val Integer'))
-lgRetentionInDays = lens _logGroupRetentionInDays (\s a -> s { _logGroupRetentionInDays = a })
diff --git a/library-gen/Stratosphere/Resources/LogStream.hs b/library-gen/Stratosphere/Resources/LogStream.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/LogStream.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::Logs::LogStream resource creates an Amazon CloudWatch Logs log
--- stream in a log group. A log stream represents the sequence of events
--- coming from an application instance or resource that you are monitoring.
--- For more information, see Monitoring Log Files in the Amazon CloudWatch
--- Developer Guide.
-
-module Stratosphere.Resources.LogStream where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for LogStream. See 'logStream' for a more
--- convenient constructor.
-data LogStream =
-  LogStream
-  { _logStreamLogGroupName :: Val Text
-  , _logStreamLogStreamName :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON LogStream where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
-
-instance FromJSON LogStream where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
-
--- | Constructor for 'LogStream' containing required fields as arguments.
-logStream
-  :: Val Text -- ^ 'lsLogGroupName'
-  -> LogStream
-logStream logGroupNamearg =
-  LogStream
-  { _logStreamLogGroupName = logGroupNamearg
-  , _logStreamLogStreamName = Nothing
-  }
-
--- | The name of the log group where the log stream is created.
-lsLogGroupName :: Lens' LogStream (Val Text)
-lsLogGroupName = lens _logStreamLogGroupName (\s a -> s { _logStreamLogGroupName = a })
-
--- | The name of the log stream to create. The name must be unique within the
--- log group.
-lsLogStreamName :: Lens' LogStream (Maybe (Val Text))
-lsLogStreamName = lens _logStreamLogStreamName (\s a -> s { _logStreamLogStreamName = a })
diff --git a/library-gen/Stratosphere/Resources/LogsDestination.hs b/library-gen/Stratosphere/Resources/LogsDestination.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/LogsDestination.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-destination.html
+
+module Stratosphere.Resources.LogsDestination where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for LogsDestination. See 'logsDestination' for
+-- | a more convenient constructor.
+data LogsDestination =
+  LogsDestination
+  { _logsDestinationDestinationName :: Val Text
+  , _logsDestinationDestinationPolicy :: Val Text
+  , _logsDestinationRoleArn :: Val Text
+  , _logsDestinationTargetArn :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON LogsDestination where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+
+instance FromJSON LogsDestination where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+
+-- | Constructor for 'LogsDestination' containing required fields as
+-- | arguments.
+logsDestination
+  :: Val Text -- ^ 'ldDestinationName'
+  -> Val Text -- ^ 'ldDestinationPolicy'
+  -> Val Text -- ^ 'ldRoleArn'
+  -> Val Text -- ^ 'ldTargetArn'
+  -> LogsDestination
+logsDestination destinationNamearg destinationPolicyarg roleArnarg targetArnarg =
+  LogsDestination
+  { _logsDestinationDestinationName = destinationNamearg
+  , _logsDestinationDestinationPolicy = destinationPolicyarg
+  , _logsDestinationRoleArn = roleArnarg
+  , _logsDestinationTargetArn = targetArnarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-destination.html#cfn-logs-destination-destinationname
+ldDestinationName :: Lens' LogsDestination (Val Text)
+ldDestinationName = lens _logsDestinationDestinationName (\s a -> s { _logsDestinationDestinationName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-destination.html#cfn-logs-destination-destinationpolicy
+ldDestinationPolicy :: Lens' LogsDestination (Val Text)
+ldDestinationPolicy = lens _logsDestinationDestinationPolicy (\s a -> s { _logsDestinationDestinationPolicy = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-destination.html#cfn-logs-destination-rolearn
+ldRoleArn :: Lens' LogsDestination (Val Text)
+ldRoleArn = lens _logsDestinationRoleArn (\s a -> s { _logsDestinationRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-destination.html#cfn-logs-destination-targetarn
+ldTargetArn :: Lens' LogsDestination (Val Text)
+ldTargetArn = lens _logsDestinationTargetArn (\s a -> s { _logsDestinationTargetArn = a })
diff --git a/library-gen/Stratosphere/Resources/LogsLogGroup.hs b/library-gen/Stratosphere/Resources/LogsLogGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/LogsLogGroup.hs
@@ -0,0 +1,46 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html
+
+module Stratosphere.Resources.LogsLogGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for LogsLogGroup. See 'logsLogGroup' for a more
+-- | convenient constructor.
+data LogsLogGroup =
+  LogsLogGroup
+  { _logsLogGroupLogGroupName :: Maybe (Val Text)
+  , _logsLogGroupRetentionInDays :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON LogsLogGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+
+instance FromJSON LogsLogGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+
+-- | Constructor for 'LogsLogGroup' containing required fields as arguments.
+logsLogGroup
+  :: LogsLogGroup
+logsLogGroup  =
+  LogsLogGroup
+  { _logsLogGroupLogGroupName = Nothing
+  , _logsLogGroupRetentionInDays = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html#cfn-cwl-loggroup-loggroupname
+llgLogGroupName :: Lens' LogsLogGroup (Maybe (Val Text))
+llgLogGroupName = lens _logsLogGroupLogGroupName (\s a -> s { _logsLogGroupLogGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html#cfn-cwl-loggroup-retentionindays
+llgRetentionInDays :: Lens' LogsLogGroup (Maybe (Val Integer'))
+llgRetentionInDays = lens _logsLogGroupRetentionInDays (\s a -> s { _logsLogGroupRetentionInDays = a })
diff --git a/library-gen/Stratosphere/Resources/LogsLogStream.hs b/library-gen/Stratosphere/Resources/LogsLogStream.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/LogsLogStream.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-logstream.html
+
+module Stratosphere.Resources.LogsLogStream where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for LogsLogStream. See 'logsLogStream' for a
+-- | more convenient constructor.
+data LogsLogStream =
+  LogsLogStream
+  { _logsLogStreamLogGroupName :: Val Text
+  , _logsLogStreamLogStreamName :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON LogsLogStream where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+instance FromJSON LogsLogStream where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+-- | Constructor for 'LogsLogStream' containing required fields as arguments.
+logsLogStream
+  :: Val Text -- ^ 'llsLogGroupName'
+  -> LogsLogStream
+logsLogStream logGroupNamearg =
+  LogsLogStream
+  { _logsLogStreamLogGroupName = logGroupNamearg
+  , _logsLogStreamLogStreamName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-logstream.html#cfn-logs-logstream-loggroupname
+llsLogGroupName :: Lens' LogsLogStream (Val Text)
+llsLogGroupName = lens _logsLogStreamLogGroupName (\s a -> s { _logsLogStreamLogGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-logstream.html#cfn-logs-logstream-logstreamname
+llsLogStreamName :: Lens' LogsLogStream (Maybe (Val Text))
+llsLogStreamName = lens _logsLogStreamLogStreamName (\s a -> s { _logsLogStreamLogStreamName = a })
diff --git a/library-gen/Stratosphere/Resources/LogsMetricFilter.hs b/library-gen/Stratosphere/Resources/LogsMetricFilter.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/LogsMetricFilter.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-metricfilter.html
+
+module Stratosphere.Resources.LogsMetricFilter where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.LogsMetricFilterMetricTransformation
+
+-- | Full data type definition for LogsMetricFilter. See 'logsMetricFilter'
+-- | for a more convenient constructor.
+data LogsMetricFilter =
+  LogsMetricFilter
+  { _logsMetricFilterFilterPattern :: Val Text
+  , _logsMetricFilterLogGroupName :: Val Text
+  , _logsMetricFilterMetricTransformations :: [LogsMetricFilterMetricTransformation]
+  } deriving (Show, Generic)
+
+instance ToJSON LogsMetricFilter where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+instance FromJSON LogsMetricFilter where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+-- | Constructor for 'LogsMetricFilter' containing required fields as
+-- | arguments.
+logsMetricFilter
+  :: Val Text -- ^ 'lmfFilterPattern'
+  -> Val Text -- ^ 'lmfLogGroupName'
+  -> [LogsMetricFilterMetricTransformation] -- ^ 'lmfMetricTransformations'
+  -> LogsMetricFilter
+logsMetricFilter filterPatternarg logGroupNamearg metricTransformationsarg =
+  LogsMetricFilter
+  { _logsMetricFilterFilterPattern = filterPatternarg
+  , _logsMetricFilterLogGroupName = logGroupNamearg
+  , _logsMetricFilterMetricTransformations = metricTransformationsarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-metricfilter.html#cfn-cwl-metricfilter-filterpattern
+lmfFilterPattern :: Lens' LogsMetricFilter (Val Text)
+lmfFilterPattern = lens _logsMetricFilterFilterPattern (\s a -> s { _logsMetricFilterFilterPattern = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-metricfilter.html#cfn-cwl-metricfilter-loggroupname
+lmfLogGroupName :: Lens' LogsMetricFilter (Val Text)
+lmfLogGroupName = lens _logsMetricFilterLogGroupName (\s a -> s { _logsMetricFilterLogGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-metricfilter.html#cfn-cwl-metricfilter-metrictransformations
+lmfMetricTransformations :: Lens' LogsMetricFilter [LogsMetricFilterMetricTransformation]
+lmfMetricTransformations = lens _logsMetricFilterMetricTransformations (\s a -> s { _logsMetricFilterMetricTransformations = a })
diff --git a/library-gen/Stratosphere/Resources/LogsSubscriptionFilter.hs b/library-gen/Stratosphere/Resources/LogsSubscriptionFilter.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/LogsSubscriptionFilter.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-subscriptionfilter.html
+
+module Stratosphere.Resources.LogsSubscriptionFilter where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for LogsSubscriptionFilter. See
+-- | 'logsSubscriptionFilter' for a more convenient constructor.
+data LogsSubscriptionFilter =
+  LogsSubscriptionFilter
+  { _logsSubscriptionFilterDestinationArn :: Val Text
+  , _logsSubscriptionFilterFilterPattern :: Val Text
+  , _logsSubscriptionFilterLogGroupName :: Val Text
+  , _logsSubscriptionFilterRoleArn :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON LogsSubscriptionFilter where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+instance FromJSON LogsSubscriptionFilter where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 23, omitNothingFields = True }
+
+-- | Constructor for 'LogsSubscriptionFilter' containing required fields as
+-- | arguments.
+logsSubscriptionFilter
+  :: Val Text -- ^ 'lsfDestinationArn'
+  -> Val Text -- ^ 'lsfFilterPattern'
+  -> Val Text -- ^ 'lsfLogGroupName'
+  -> LogsSubscriptionFilter
+logsSubscriptionFilter destinationArnarg filterPatternarg logGroupNamearg =
+  LogsSubscriptionFilter
+  { _logsSubscriptionFilterDestinationArn = destinationArnarg
+  , _logsSubscriptionFilterFilterPattern = filterPatternarg
+  , _logsSubscriptionFilterLogGroupName = logGroupNamearg
+  , _logsSubscriptionFilterRoleArn = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-subscriptionfilter.html#cfn-cwl-subscriptionfilter-destinationarn
+lsfDestinationArn :: Lens' LogsSubscriptionFilter (Val Text)
+lsfDestinationArn = lens _logsSubscriptionFilterDestinationArn (\s a -> s { _logsSubscriptionFilterDestinationArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-subscriptionfilter.html#cfn-cwl-subscriptionfilter-filterpattern
+lsfFilterPattern :: Lens' LogsSubscriptionFilter (Val Text)
+lsfFilterPattern = lens _logsSubscriptionFilterFilterPattern (\s a -> s { _logsSubscriptionFilterFilterPattern = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-subscriptionfilter.html#cfn-cwl-subscriptionfilter-loggroupname
+lsfLogGroupName :: Lens' LogsSubscriptionFilter (Val Text)
+lsfLogGroupName = lens _logsSubscriptionFilterLogGroupName (\s a -> s { _logsSubscriptionFilterLogGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-subscriptionfilter.html#cfn-cwl-subscriptionfilter-rolearn
+lsfRoleArn :: Lens' LogsSubscriptionFilter (Maybe (Val Text))
+lsfRoleArn = lens _logsSubscriptionFilterRoleArn (\s a -> s { _logsSubscriptionFilterRoleArn = a })
diff --git a/library-gen/Stratosphere/Resources/ManagedPolicy.hs b/library-gen/Stratosphere/Resources/ManagedPolicy.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/ManagedPolicy.hs
+++ /dev/null
@@ -1,86 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | AWS::IAM::ManagedPolicy creates an AWS Identity and Access Management
--- (IAM) managed policy for your AWS account that you can use to apply
--- permissions to IAM users, groups, and roles. For more information about
--- managed policies, see Managed Policies and Inline Policies in the IAM User
--- Guide guide.
-
-module Stratosphere.Resources.ManagedPolicy where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for ManagedPolicy. See 'managedPolicy' for a
--- more convenient constructor.
-data ManagedPolicy =
-  ManagedPolicy
-  { _managedPolicyDescription :: Maybe (Val Text)
-  , _managedPolicyGroups :: Maybe [Val Text]
-  , _managedPolicyPath :: Maybe (Val Text)
-  , _managedPolicyPolicyDocument :: Object
-  , _managedPolicyRoles :: Maybe [Val Text]
-  , _managedPolicyUsers :: Maybe [Val Text]
-  } deriving (Show, Generic)
-
-instance ToJSON ManagedPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
-
-instance FromJSON ManagedPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
-
--- | Constructor for 'ManagedPolicy' containing required fields as arguments.
-managedPolicy
-  :: Object -- ^ 'mpPolicyDocument'
-  -> ManagedPolicy
-managedPolicy policyDocumentarg =
-  ManagedPolicy
-  { _managedPolicyDescription = Nothing
-  , _managedPolicyGroups = Nothing
-  , _managedPolicyPath = Nothing
-  , _managedPolicyPolicyDocument = policyDocumentarg
-  , _managedPolicyRoles = Nothing
-  , _managedPolicyUsers = Nothing
-  }
-
--- | A description of the policy. For example, you can describe the
--- permissions that are defined in the policy.
-mpDescription :: Lens' ManagedPolicy (Maybe (Val Text))
-mpDescription = lens _managedPolicyDescription (\s a -> s { _managedPolicyDescription = a })
-
--- | The names of groups to attach to this policy.
-mpGroups :: Lens' ManagedPolicy (Maybe [Val Text])
-mpGroups = lens _managedPolicyGroups (\s a -> s { _managedPolicyGroups = a })
-
--- | The path for the policy. By default, the path is /. For more information,
--- see IAM Identifiers in the IAM User Guide guide.
-mpPath :: Lens' ManagedPolicy (Maybe (Val Text))
-mpPath = lens _managedPolicyPath (\s a -> s { _managedPolicyPath = a })
-
--- | Policies that define the permissions for this managed policy. For more
--- information about policy syntax, see IAM Policy Elements Reference in IAM
--- User Guide.
-mpPolicyDocument :: Lens' ManagedPolicy Object
-mpPolicyDocument = lens _managedPolicyPolicyDocument (\s a -> s { _managedPolicyPolicyDocument = a })
-
--- | The names of roles to attach to this policy. Note If a policy has a Ref
--- to a role and if a resource (such as AWS::ECS::Service) also has a Ref to
--- the same role, add a DependsOn attribute to the resource so that the
--- resource depends on the policy. This dependency ensures that the role's
--- policy is available throughout the resource's lifecycle. For example, when
--- you delete a stack with an AWS::ECS::Service resource, the DependsOn
--- attribute ensures that the AWS::ECS::Service resource can complete its
--- deletion before its role's policy is deleted.
-mpRoles :: Lens' ManagedPolicy (Maybe [Val Text])
-mpRoles = lens _managedPolicyRoles (\s a -> s { _managedPolicyRoles = a })
-
--- | The names of users to attach to this policy.
-mpUsers :: Lens' ManagedPolicy (Maybe [Val Text])
-mpUsers = lens _managedPolicyUsers (\s a -> s { _managedPolicyUsers = a })
diff --git a/library-gen/Stratosphere/Resources/NatGateway.hs b/library-gen/Stratosphere/Resources/NatGateway.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/NatGateway.hs
+++ /dev/null
@@ -1,55 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::EC2::NatGateway resource creates a network address translation
--- (NAT) gateway in the specified public subnet. Use a NAT gateway to allow
--- instances in a private subnet to connect to the Internet or to other AWS
--- services, but prevent the Internet from initiating a connection with those
--- instances. For more information and a sample architectural diagram, see NAT
--- Gateways in the Amazon VPC User Guide.
-
-module Stratosphere.Resources.NatGateway where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for NatGateway. See 'natGateway' for a more
--- convenient constructor.
-data NatGateway =
-  NatGateway
-  { _natGatewayAllocationId :: Val Text
-  , _natGatewaySubnetId :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON NatGateway where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
-
-instance FromJSON NatGateway where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
-
--- | Constructor for 'NatGateway' containing required fields as arguments.
-natGateway
-  :: Val Text -- ^ 'ngAllocationId'
-  -> Val Text -- ^ 'ngSubnetId'
-  -> NatGateway
-natGateway allocationIdarg subnetIdarg =
-  NatGateway
-  { _natGatewayAllocationId = allocationIdarg
-  , _natGatewaySubnetId = subnetIdarg
-  }
-
--- | The allocation ID of an Elastic IP address to associate with the NAT
--- gateway. If the Elastic IP address is associated with another resource, you
--- must first disassociate it.
-ngAllocationId :: Lens' NatGateway (Val Text)
-ngAllocationId = lens _natGatewayAllocationId (\s a -> s { _natGatewayAllocationId = a })
-
--- | The public subnet in which to create the NAT gateway.
-ngSubnetId :: Lens' NatGateway (Val Text)
-ngSubnetId = lens _natGatewaySubnetId (\s a -> s { _natGatewaySubnetId = a })
diff --git a/library-gen/Stratosphere/Resources/OpsWorksApp.hs b/library-gen/Stratosphere/Resources/OpsWorksApp.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/OpsWorksApp.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-app.html
+
+module Stratosphere.Resources.OpsWorksApp where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.OpsWorksAppSource
+import Stratosphere.ResourceProperties.OpsWorksAppDataSource
+import Stratosphere.ResourceProperties.OpsWorksAppEnvironmentVariable
+import Stratosphere.ResourceProperties.OpsWorksAppSslConfiguration
+
+-- | Full data type definition for OpsWorksApp. See 'opsWorksApp' for a more
+-- | convenient constructor.
+data OpsWorksApp =
+  OpsWorksApp
+  { _opsWorksAppAppSource :: Maybe OpsWorksAppSource
+  , _opsWorksAppAttributes :: Maybe Object
+  , _opsWorksAppDataSources :: Maybe [OpsWorksAppDataSource]
+  , _opsWorksAppDescription :: Maybe (Val Text)
+  , _opsWorksAppDomains :: Maybe [Val Text]
+  , _opsWorksAppEnableSsl :: Maybe (Val Bool')
+  , _opsWorksAppEnvironment :: Maybe [OpsWorksAppEnvironmentVariable]
+  , _opsWorksAppName :: Val Text
+  , _opsWorksAppShortname :: Maybe (Val Text)
+  , _opsWorksAppSslConfiguration :: Maybe OpsWorksAppSslConfiguration
+  , _opsWorksAppStackId :: Val Text
+  , _opsWorksAppType :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksApp where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
+
+instance FromJSON OpsWorksApp where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksApp' containing required fields as arguments.
+opsWorksApp
+  :: Val Text -- ^ 'owaName'
+  -> Val Text -- ^ 'owaStackId'
+  -> Val Text -- ^ 'owaType'
+  -> OpsWorksApp
+opsWorksApp namearg stackIdarg typearg =
+  OpsWorksApp
+  { _opsWorksAppAppSource = Nothing
+  , _opsWorksAppAttributes = Nothing
+  , _opsWorksAppDataSources = Nothing
+  , _opsWorksAppDescription = Nothing
+  , _opsWorksAppDomains = Nothing
+  , _opsWorksAppEnableSsl = Nothing
+  , _opsWorksAppEnvironment = Nothing
+  , _opsWorksAppName = namearg
+  , _opsWorksAppShortname = Nothing
+  , _opsWorksAppSslConfiguration = Nothing
+  , _opsWorksAppStackId = stackIdarg
+  , _opsWorksAppType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-app.html#cfn-opsworks-app-appsource
+owaAppSource :: Lens' OpsWorksApp (Maybe OpsWorksAppSource)
+owaAppSource = lens _opsWorksAppAppSource (\s a -> s { _opsWorksAppAppSource = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-app.html#cfn-opsworks-app-attributes
+owaAttributes :: Lens' OpsWorksApp (Maybe Object)
+owaAttributes = lens _opsWorksAppAttributes (\s a -> s { _opsWorksAppAttributes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-app.html#cfn-opsworks-app-datasources
+owaDataSources :: Lens' OpsWorksApp (Maybe [OpsWorksAppDataSource])
+owaDataSources = lens _opsWorksAppDataSources (\s a -> s { _opsWorksAppDataSources = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-app.html#cfn-opsworks-app-description
+owaDescription :: Lens' OpsWorksApp (Maybe (Val Text))
+owaDescription = lens _opsWorksAppDescription (\s a -> s { _opsWorksAppDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-app.html#cfn-opsworks-app-domains
+owaDomains :: Lens' OpsWorksApp (Maybe [Val Text])
+owaDomains = lens _opsWorksAppDomains (\s a -> s { _opsWorksAppDomains = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-app.html#cfn-opsworks-app-enablessl
+owaEnableSsl :: Lens' OpsWorksApp (Maybe (Val Bool'))
+owaEnableSsl = lens _opsWorksAppEnableSsl (\s a -> s { _opsWorksAppEnableSsl = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-app.html#cfn-opsworks-app-environment
+owaEnvironment :: Lens' OpsWorksApp (Maybe [OpsWorksAppEnvironmentVariable])
+owaEnvironment = lens _opsWorksAppEnvironment (\s a -> s { _opsWorksAppEnvironment = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-app.html#cfn-opsworks-app-name
+owaName :: Lens' OpsWorksApp (Val Text)
+owaName = lens _opsWorksAppName (\s a -> s { _opsWorksAppName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-app.html#cfn-opsworks-app-shortname
+owaShortname :: Lens' OpsWorksApp (Maybe (Val Text))
+owaShortname = lens _opsWorksAppShortname (\s a -> s { _opsWorksAppShortname = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-app.html#cfn-opsworks-app-sslconfiguration
+owaSslConfiguration :: Lens' OpsWorksApp (Maybe OpsWorksAppSslConfiguration)
+owaSslConfiguration = lens _opsWorksAppSslConfiguration (\s a -> s { _opsWorksAppSslConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-app.html#cfn-opsworks-app-stackid
+owaStackId :: Lens' OpsWorksApp (Val Text)
+owaStackId = lens _opsWorksAppStackId (\s a -> s { _opsWorksAppStackId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-app.html#cfn-opsworks-app-type
+owaType :: Lens' OpsWorksApp (Val Text)
+owaType = lens _opsWorksAppType (\s a -> s { _opsWorksAppType = a })
diff --git a/library-gen/Stratosphere/Resources/OpsWorksElasticLoadBalancerAttachment.hs b/library-gen/Stratosphere/Resources/OpsWorksElasticLoadBalancerAttachment.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/OpsWorksElasticLoadBalancerAttachment.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-elbattachment.html
+
+module Stratosphere.Resources.OpsWorksElasticLoadBalancerAttachment where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksElasticLoadBalancerAttachment. See
+-- | 'opsWorksElasticLoadBalancerAttachment' for a more convenient
+-- | constructor.
+data OpsWorksElasticLoadBalancerAttachment =
+  OpsWorksElasticLoadBalancerAttachment
+  { _opsWorksElasticLoadBalancerAttachmentElasticLoadBalancerName :: Val Text
+  , _opsWorksElasticLoadBalancerAttachmentLayerId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksElasticLoadBalancerAttachment where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+
+instance FromJSON OpsWorksElasticLoadBalancerAttachment where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 38, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksElasticLoadBalancerAttachment' containing
+-- | required fields as arguments.
+opsWorksElasticLoadBalancerAttachment
+  :: Val Text -- ^ 'owelbaElasticLoadBalancerName'
+  -> Val Text -- ^ 'owelbaLayerId'
+  -> OpsWorksElasticLoadBalancerAttachment
+opsWorksElasticLoadBalancerAttachment elasticLoadBalancerNamearg layerIdarg =
+  OpsWorksElasticLoadBalancerAttachment
+  { _opsWorksElasticLoadBalancerAttachmentElasticLoadBalancerName = elasticLoadBalancerNamearg
+  , _opsWorksElasticLoadBalancerAttachmentLayerId = layerIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-elbattachment.html#cfn-opsworks-elbattachment-elbname
+owelbaElasticLoadBalancerName :: Lens' OpsWorksElasticLoadBalancerAttachment (Val Text)
+owelbaElasticLoadBalancerName = lens _opsWorksElasticLoadBalancerAttachmentElasticLoadBalancerName (\s a -> s { _opsWorksElasticLoadBalancerAttachmentElasticLoadBalancerName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-elbattachment.html#cfn-opsworks-elbattachment-layerid
+owelbaLayerId :: Lens' OpsWorksElasticLoadBalancerAttachment (Val Text)
+owelbaLayerId = lens _opsWorksElasticLoadBalancerAttachmentLayerId (\s a -> s { _opsWorksElasticLoadBalancerAttachmentLayerId = a })
diff --git a/library-gen/Stratosphere/Resources/OpsWorksInstance.hs b/library-gen/Stratosphere/Resources/OpsWorksInstance.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/OpsWorksInstance.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html
+
+module Stratosphere.Resources.OpsWorksInstance where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.OpsWorksInstanceBlockDeviceMapping
+import Stratosphere.ResourceProperties.OpsWorksInstanceTimeBasedAutoScaling
+
+-- | Full data type definition for OpsWorksInstance. See 'opsWorksInstance'
+-- | for a more convenient constructor.
+data OpsWorksInstance =
+  OpsWorksInstance
+  { _opsWorksInstanceAgentVersion :: Maybe (Val Text)
+  , _opsWorksInstanceAmiId :: Maybe (Val Text)
+  , _opsWorksInstanceArchitecture :: Maybe (Val Text)
+  , _opsWorksInstanceAutoScalingType :: Maybe (Val Text)
+  , _opsWorksInstanceAvailabilityZone :: Maybe (Val Text)
+  , _opsWorksInstanceBlockDeviceMappings :: Maybe [OpsWorksInstanceBlockDeviceMapping]
+  , _opsWorksInstanceEbsOptimized :: Maybe (Val Bool')
+  , _opsWorksInstanceElasticIps :: Maybe [Val Text]
+  , _opsWorksInstanceHostname :: Maybe (Val Text)
+  , _opsWorksInstanceInstallUpdatesOnBoot :: Maybe (Val Bool')
+  , _opsWorksInstanceInstanceType :: Val Text
+  , _opsWorksInstanceLayerIds :: [Val Text]
+  , _opsWorksInstanceOs :: Maybe (Val Text)
+  , _opsWorksInstanceRootDeviceType :: Maybe (Val Text)
+  , _opsWorksInstanceSshKeyName :: Maybe (Val Text)
+  , _opsWorksInstanceStackId :: Val Text
+  , _opsWorksInstanceSubnetId :: Maybe (Val Text)
+  , _opsWorksInstanceTenancy :: Maybe (Val Text)
+  , _opsWorksInstanceTimeBasedAutoScaling :: Maybe OpsWorksInstanceTimeBasedAutoScaling
+  , _opsWorksInstanceVirtualizationType :: Maybe (Val Text)
+  , _opsWorksInstanceVolumes :: Maybe [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksInstance where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+instance FromJSON OpsWorksInstance where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksInstance' containing required fields as
+-- | arguments.
+opsWorksInstance
+  :: Val Text -- ^ 'owiInstanceType'
+  -> [Val Text] -- ^ 'owiLayerIds'
+  -> Val Text -- ^ 'owiStackId'
+  -> OpsWorksInstance
+opsWorksInstance instanceTypearg layerIdsarg stackIdarg =
+  OpsWorksInstance
+  { _opsWorksInstanceAgentVersion = Nothing
+  , _opsWorksInstanceAmiId = Nothing
+  , _opsWorksInstanceArchitecture = Nothing
+  , _opsWorksInstanceAutoScalingType = Nothing
+  , _opsWorksInstanceAvailabilityZone = Nothing
+  , _opsWorksInstanceBlockDeviceMappings = Nothing
+  , _opsWorksInstanceEbsOptimized = Nothing
+  , _opsWorksInstanceElasticIps = Nothing
+  , _opsWorksInstanceHostname = Nothing
+  , _opsWorksInstanceInstallUpdatesOnBoot = Nothing
+  , _opsWorksInstanceInstanceType = instanceTypearg
+  , _opsWorksInstanceLayerIds = layerIdsarg
+  , _opsWorksInstanceOs = Nothing
+  , _opsWorksInstanceRootDeviceType = Nothing
+  , _opsWorksInstanceSshKeyName = Nothing
+  , _opsWorksInstanceStackId = stackIdarg
+  , _opsWorksInstanceSubnetId = Nothing
+  , _opsWorksInstanceTenancy = Nothing
+  , _opsWorksInstanceTimeBasedAutoScaling = Nothing
+  , _opsWorksInstanceVirtualizationType = Nothing
+  , _opsWorksInstanceVolumes = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-agentversion
+owiAgentVersion :: Lens' OpsWorksInstance (Maybe (Val Text))
+owiAgentVersion = lens _opsWorksInstanceAgentVersion (\s a -> s { _opsWorksInstanceAgentVersion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-amiid
+owiAmiId :: Lens' OpsWorksInstance (Maybe (Val Text))
+owiAmiId = lens _opsWorksInstanceAmiId (\s a -> s { _opsWorksInstanceAmiId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-architecture
+owiArchitecture :: Lens' OpsWorksInstance (Maybe (Val Text))
+owiArchitecture = lens _opsWorksInstanceArchitecture (\s a -> s { _opsWorksInstanceArchitecture = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-autoscalingtype
+owiAutoScalingType :: Lens' OpsWorksInstance (Maybe (Val Text))
+owiAutoScalingType = lens _opsWorksInstanceAutoScalingType (\s a -> s { _opsWorksInstanceAutoScalingType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-availabilityzone
+owiAvailabilityZone :: Lens' OpsWorksInstance (Maybe (Val Text))
+owiAvailabilityZone = lens _opsWorksInstanceAvailabilityZone (\s a -> s { _opsWorksInstanceAvailabilityZone = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-blockdevicemappings
+owiBlockDeviceMappings :: Lens' OpsWorksInstance (Maybe [OpsWorksInstanceBlockDeviceMapping])
+owiBlockDeviceMappings = lens _opsWorksInstanceBlockDeviceMappings (\s a -> s { _opsWorksInstanceBlockDeviceMappings = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-ebsoptimized
+owiEbsOptimized :: Lens' OpsWorksInstance (Maybe (Val Bool'))
+owiEbsOptimized = lens _opsWorksInstanceEbsOptimized (\s a -> s { _opsWorksInstanceEbsOptimized = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-elasticips
+owiElasticIps :: Lens' OpsWorksInstance (Maybe [Val Text])
+owiElasticIps = lens _opsWorksInstanceElasticIps (\s a -> s { _opsWorksInstanceElasticIps = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-hostname
+owiHostname :: Lens' OpsWorksInstance (Maybe (Val Text))
+owiHostname = lens _opsWorksInstanceHostname (\s a -> s { _opsWorksInstanceHostname = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-installupdatesonboot
+owiInstallUpdatesOnBoot :: Lens' OpsWorksInstance (Maybe (Val Bool'))
+owiInstallUpdatesOnBoot = lens _opsWorksInstanceInstallUpdatesOnBoot (\s a -> s { _opsWorksInstanceInstallUpdatesOnBoot = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-instancetype
+owiInstanceType :: Lens' OpsWorksInstance (Val Text)
+owiInstanceType = lens _opsWorksInstanceInstanceType (\s a -> s { _opsWorksInstanceInstanceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-layerids
+owiLayerIds :: Lens' OpsWorksInstance [Val Text]
+owiLayerIds = lens _opsWorksInstanceLayerIds (\s a -> s { _opsWorksInstanceLayerIds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-os
+owiOs :: Lens' OpsWorksInstance (Maybe (Val Text))
+owiOs = lens _opsWorksInstanceOs (\s a -> s { _opsWorksInstanceOs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-rootdevicetype
+owiRootDeviceType :: Lens' OpsWorksInstance (Maybe (Val Text))
+owiRootDeviceType = lens _opsWorksInstanceRootDeviceType (\s a -> s { _opsWorksInstanceRootDeviceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-sshkeyname
+owiSshKeyName :: Lens' OpsWorksInstance (Maybe (Val Text))
+owiSshKeyName = lens _opsWorksInstanceSshKeyName (\s a -> s { _opsWorksInstanceSshKeyName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-stackid
+owiStackId :: Lens' OpsWorksInstance (Val Text)
+owiStackId = lens _opsWorksInstanceStackId (\s a -> s { _opsWorksInstanceStackId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-subnetid
+owiSubnetId :: Lens' OpsWorksInstance (Maybe (Val Text))
+owiSubnetId = lens _opsWorksInstanceSubnetId (\s a -> s { _opsWorksInstanceSubnetId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-tenancy
+owiTenancy :: Lens' OpsWorksInstance (Maybe (Val Text))
+owiTenancy = lens _opsWorksInstanceTenancy (\s a -> s { _opsWorksInstanceTenancy = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-timebasedautoscaling
+owiTimeBasedAutoScaling :: Lens' OpsWorksInstance (Maybe OpsWorksInstanceTimeBasedAutoScaling)
+owiTimeBasedAutoScaling = lens _opsWorksInstanceTimeBasedAutoScaling (\s a -> s { _opsWorksInstanceTimeBasedAutoScaling = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-virtualizationtype
+owiVirtualizationType :: Lens' OpsWorksInstance (Maybe (Val Text))
+owiVirtualizationType = lens _opsWorksInstanceVirtualizationType (\s a -> s { _opsWorksInstanceVirtualizationType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-instance.html#cfn-opsworks-instance-volumes
+owiVolumes :: Lens' OpsWorksInstance (Maybe [Val Text])
+owiVolumes = lens _opsWorksInstanceVolumes (\s a -> s { _opsWorksInstanceVolumes = a })
diff --git a/library-gen/Stratosphere/Resources/OpsWorksLayer.hs b/library-gen/Stratosphere/Resources/OpsWorksLayer.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/OpsWorksLayer.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html
+
+module Stratosphere.Resources.OpsWorksLayer where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.OpsWorksLayerRecipes
+import Stratosphere.ResourceProperties.OpsWorksLayerLifecycleEventConfiguration
+import Stratosphere.ResourceProperties.OpsWorksLayerLoadBasedAutoScaling
+import Stratosphere.ResourceProperties.OpsWorksLayerVolumeConfiguration
+
+-- | Full data type definition for OpsWorksLayer. See 'opsWorksLayer' for a
+-- | more convenient constructor.
+data OpsWorksLayer =
+  OpsWorksLayer
+  { _opsWorksLayerAttributes :: Maybe Object
+  , _opsWorksLayerAutoAssignElasticIps :: Val Bool'
+  , _opsWorksLayerAutoAssignPublicIps :: Val Bool'
+  , _opsWorksLayerCustomInstanceProfileArn :: Maybe (Val Text)
+  , _opsWorksLayerCustomJson :: Maybe Object
+  , _opsWorksLayerCustomRecipes :: Maybe OpsWorksLayerRecipes
+  , _opsWorksLayerCustomSecurityGroupIds :: Maybe [Val Text]
+  , _opsWorksLayerEnableAutoHealing :: Val Bool'
+  , _opsWorksLayerInstallUpdatesOnBoot :: Maybe (Val Bool')
+  , _opsWorksLayerLifecycleEventConfiguration :: Maybe OpsWorksLayerLifecycleEventConfiguration
+  , _opsWorksLayerLoadBasedAutoScaling :: Maybe OpsWorksLayerLoadBasedAutoScaling
+  , _opsWorksLayerName :: Val Text
+  , _opsWorksLayerPackages :: Maybe [Val Text]
+  , _opsWorksLayerShortname :: Val Text
+  , _opsWorksLayerStackId :: Val Text
+  , _opsWorksLayerType :: Val Text
+  , _opsWorksLayerUseEbsOptimizedInstances :: Maybe (Val Bool')
+  , _opsWorksLayerVolumeConfigurations :: Maybe [OpsWorksLayerVolumeConfiguration]
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksLayer where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+instance FromJSON OpsWorksLayer where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksLayer' containing required fields as arguments.
+opsWorksLayer
+  :: Val Bool' -- ^ 'owlAutoAssignElasticIps'
+  -> Val Bool' -- ^ 'owlAutoAssignPublicIps'
+  -> Val Bool' -- ^ 'owlEnableAutoHealing'
+  -> Val Text -- ^ 'owlName'
+  -> Val Text -- ^ 'owlShortname'
+  -> Val Text -- ^ 'owlStackId'
+  -> Val Text -- ^ 'owlType'
+  -> OpsWorksLayer
+opsWorksLayer autoAssignElasticIpsarg autoAssignPublicIpsarg enableAutoHealingarg namearg shortnamearg stackIdarg typearg =
+  OpsWorksLayer
+  { _opsWorksLayerAttributes = Nothing
+  , _opsWorksLayerAutoAssignElasticIps = autoAssignElasticIpsarg
+  , _opsWorksLayerAutoAssignPublicIps = autoAssignPublicIpsarg
+  , _opsWorksLayerCustomInstanceProfileArn = Nothing
+  , _opsWorksLayerCustomJson = Nothing
+  , _opsWorksLayerCustomRecipes = Nothing
+  , _opsWorksLayerCustomSecurityGroupIds = Nothing
+  , _opsWorksLayerEnableAutoHealing = enableAutoHealingarg
+  , _opsWorksLayerInstallUpdatesOnBoot = Nothing
+  , _opsWorksLayerLifecycleEventConfiguration = Nothing
+  , _opsWorksLayerLoadBasedAutoScaling = Nothing
+  , _opsWorksLayerName = namearg
+  , _opsWorksLayerPackages = Nothing
+  , _opsWorksLayerShortname = shortnamearg
+  , _opsWorksLayerStackId = stackIdarg
+  , _opsWorksLayerType = typearg
+  , _opsWorksLayerUseEbsOptimizedInstances = Nothing
+  , _opsWorksLayerVolumeConfigurations = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-attributes
+owlAttributes :: Lens' OpsWorksLayer (Maybe Object)
+owlAttributes = lens _opsWorksLayerAttributes (\s a -> s { _opsWorksLayerAttributes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-autoassignelasticips
+owlAutoAssignElasticIps :: Lens' OpsWorksLayer (Val Bool')
+owlAutoAssignElasticIps = lens _opsWorksLayerAutoAssignElasticIps (\s a -> s { _opsWorksLayerAutoAssignElasticIps = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-autoassignpublicips
+owlAutoAssignPublicIps :: Lens' OpsWorksLayer (Val Bool')
+owlAutoAssignPublicIps = lens _opsWorksLayerAutoAssignPublicIps (\s a -> s { _opsWorksLayerAutoAssignPublicIps = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-custominstanceprofilearn
+owlCustomInstanceProfileArn :: Lens' OpsWorksLayer (Maybe (Val Text))
+owlCustomInstanceProfileArn = lens _opsWorksLayerCustomInstanceProfileArn (\s a -> s { _opsWorksLayerCustomInstanceProfileArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-customjson
+owlCustomJson :: Lens' OpsWorksLayer (Maybe Object)
+owlCustomJson = lens _opsWorksLayerCustomJson (\s a -> s { _opsWorksLayerCustomJson = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-customrecipes
+owlCustomRecipes :: Lens' OpsWorksLayer (Maybe OpsWorksLayerRecipes)
+owlCustomRecipes = lens _opsWorksLayerCustomRecipes (\s a -> s { _opsWorksLayerCustomRecipes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-customsecuritygroupids
+owlCustomSecurityGroupIds :: Lens' OpsWorksLayer (Maybe [Val Text])
+owlCustomSecurityGroupIds = lens _opsWorksLayerCustomSecurityGroupIds (\s a -> s { _opsWorksLayerCustomSecurityGroupIds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-enableautohealing
+owlEnableAutoHealing :: Lens' OpsWorksLayer (Val Bool')
+owlEnableAutoHealing = lens _opsWorksLayerEnableAutoHealing (\s a -> s { _opsWorksLayerEnableAutoHealing = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-installupdatesonboot
+owlInstallUpdatesOnBoot :: Lens' OpsWorksLayer (Maybe (Val Bool'))
+owlInstallUpdatesOnBoot = lens _opsWorksLayerInstallUpdatesOnBoot (\s a -> s { _opsWorksLayerInstallUpdatesOnBoot = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-lifecycleeventconfiguration
+owlLifecycleEventConfiguration :: Lens' OpsWorksLayer (Maybe OpsWorksLayerLifecycleEventConfiguration)
+owlLifecycleEventConfiguration = lens _opsWorksLayerLifecycleEventConfiguration (\s a -> s { _opsWorksLayerLifecycleEventConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-loadbasedautoscaling
+owlLoadBasedAutoScaling :: Lens' OpsWorksLayer (Maybe OpsWorksLayerLoadBasedAutoScaling)
+owlLoadBasedAutoScaling = lens _opsWorksLayerLoadBasedAutoScaling (\s a -> s { _opsWorksLayerLoadBasedAutoScaling = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-name
+owlName :: Lens' OpsWorksLayer (Val Text)
+owlName = lens _opsWorksLayerName (\s a -> s { _opsWorksLayerName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-packages
+owlPackages :: Lens' OpsWorksLayer (Maybe [Val Text])
+owlPackages = lens _opsWorksLayerPackages (\s a -> s { _opsWorksLayerPackages = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-shortname
+owlShortname :: Lens' OpsWorksLayer (Val Text)
+owlShortname = lens _opsWorksLayerShortname (\s a -> s { _opsWorksLayerShortname = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-stackid
+owlStackId :: Lens' OpsWorksLayer (Val Text)
+owlStackId = lens _opsWorksLayerStackId (\s a -> s { _opsWorksLayerStackId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-type
+owlType :: Lens' OpsWorksLayer (Val Text)
+owlType = lens _opsWorksLayerType (\s a -> s { _opsWorksLayerType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-useebsoptimizedinstances
+owlUseEbsOptimizedInstances :: Lens' OpsWorksLayer (Maybe (Val Bool'))
+owlUseEbsOptimizedInstances = lens _opsWorksLayerUseEbsOptimizedInstances (\s a -> s { _opsWorksLayerUseEbsOptimizedInstances = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-layer.html#cfn-opsworks-layer-volumeconfigurations
+owlVolumeConfigurations :: Lens' OpsWorksLayer (Maybe [OpsWorksLayerVolumeConfiguration])
+owlVolumeConfigurations = lens _opsWorksLayerVolumeConfigurations (\s a -> s { _opsWorksLayerVolumeConfigurations = a })
diff --git a/library-gen/Stratosphere/Resources/OpsWorksStack.hs b/library-gen/Stratosphere/Resources/OpsWorksStack.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/OpsWorksStack.hs
@@ -0,0 +1,185 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html
+
+module Stratosphere.Resources.OpsWorksStack where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.OpsWorksStackChefConfiguration
+import Stratosphere.ResourceProperties.OpsWorksStackStackConfigurationManager
+import Stratosphere.ResourceProperties.OpsWorksStackSource
+import Stratosphere.ResourceProperties.OpsWorksStackElasticIp
+import Stratosphere.ResourceProperties.OpsWorksStackRdsDbInstance
+
+-- | Full data type definition for OpsWorksStack. See 'opsWorksStack' for a
+-- | more convenient constructor.
+data OpsWorksStack =
+  OpsWorksStack
+  { _opsWorksStackAgentVersion :: Maybe (Val Text)
+  , _opsWorksStackAttributes :: Maybe Object
+  , _opsWorksStackChefConfiguration :: Maybe OpsWorksStackChefConfiguration
+  , _opsWorksStackCloneAppIds :: Maybe [Val Text]
+  , _opsWorksStackClonePermissions :: Maybe (Val Bool')
+  , _opsWorksStackConfigurationManager :: Maybe OpsWorksStackStackConfigurationManager
+  , _opsWorksStackCustomCookbooksSource :: Maybe OpsWorksStackSource
+  , _opsWorksStackCustomJson :: Maybe Object
+  , _opsWorksStackDefaultAvailabilityZone :: Maybe (Val Text)
+  , _opsWorksStackDefaultInstanceProfileArn :: Val Text
+  , _opsWorksStackDefaultOs :: Maybe (Val Text)
+  , _opsWorksStackDefaultRootDeviceType :: Maybe (Val Text)
+  , _opsWorksStackDefaultSshKeyName :: Maybe (Val Text)
+  , _opsWorksStackDefaultSubnetId :: Maybe (Val Text)
+  , _opsWorksStackEcsClusterArn :: Maybe (Val Text)
+  , _opsWorksStackElasticIps :: Maybe [OpsWorksStackElasticIp]
+  , _opsWorksStackHostnameTheme :: Maybe (Val Text)
+  , _opsWorksStackName :: Val Text
+  , _opsWorksStackRdsDbInstances :: Maybe [OpsWorksStackRdsDbInstance]
+  , _opsWorksStackServiceRoleArn :: Val Text
+  , _opsWorksStackSourceStackId :: Maybe (Val Text)
+  , _opsWorksStackUseCustomCookbooks :: Maybe (Val Bool')
+  , _opsWorksStackUseOpsworksSecurityGroups :: Maybe (Val Bool')
+  , _opsWorksStackVpcId :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksStack where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+instance FromJSON OpsWorksStack where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksStack' containing required fields as arguments.
+opsWorksStack
+  :: Val Text -- ^ 'owsDefaultInstanceProfileArn'
+  -> Val Text -- ^ 'owsName'
+  -> Val Text -- ^ 'owsServiceRoleArn'
+  -> OpsWorksStack
+opsWorksStack defaultInstanceProfileArnarg namearg serviceRoleArnarg =
+  OpsWorksStack
+  { _opsWorksStackAgentVersion = Nothing
+  , _opsWorksStackAttributes = Nothing
+  , _opsWorksStackChefConfiguration = Nothing
+  , _opsWorksStackCloneAppIds = Nothing
+  , _opsWorksStackClonePermissions = Nothing
+  , _opsWorksStackConfigurationManager = Nothing
+  , _opsWorksStackCustomCookbooksSource = Nothing
+  , _opsWorksStackCustomJson = Nothing
+  , _opsWorksStackDefaultAvailabilityZone = Nothing
+  , _opsWorksStackDefaultInstanceProfileArn = defaultInstanceProfileArnarg
+  , _opsWorksStackDefaultOs = Nothing
+  , _opsWorksStackDefaultRootDeviceType = Nothing
+  , _opsWorksStackDefaultSshKeyName = Nothing
+  , _opsWorksStackDefaultSubnetId = Nothing
+  , _opsWorksStackEcsClusterArn = Nothing
+  , _opsWorksStackElasticIps = Nothing
+  , _opsWorksStackHostnameTheme = Nothing
+  , _opsWorksStackName = namearg
+  , _opsWorksStackRdsDbInstances = Nothing
+  , _opsWorksStackServiceRoleArn = serviceRoleArnarg
+  , _opsWorksStackSourceStackId = Nothing
+  , _opsWorksStackUseCustomCookbooks = Nothing
+  , _opsWorksStackUseOpsworksSecurityGroups = Nothing
+  , _opsWorksStackVpcId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-agentversion
+owsAgentVersion :: Lens' OpsWorksStack (Maybe (Val Text))
+owsAgentVersion = lens _opsWorksStackAgentVersion (\s a -> s { _opsWorksStackAgentVersion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-attributes
+owsAttributes :: Lens' OpsWorksStack (Maybe Object)
+owsAttributes = lens _opsWorksStackAttributes (\s a -> s { _opsWorksStackAttributes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-chefconfiguration
+owsChefConfiguration :: Lens' OpsWorksStack (Maybe OpsWorksStackChefConfiguration)
+owsChefConfiguration = lens _opsWorksStackChefConfiguration (\s a -> s { _opsWorksStackChefConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-cloneappids
+owsCloneAppIds :: Lens' OpsWorksStack (Maybe [Val Text])
+owsCloneAppIds = lens _opsWorksStackCloneAppIds (\s a -> s { _opsWorksStackCloneAppIds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-clonepermissions
+owsClonePermissions :: Lens' OpsWorksStack (Maybe (Val Bool'))
+owsClonePermissions = lens _opsWorksStackClonePermissions (\s a -> s { _opsWorksStackClonePermissions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-configmanager
+owsConfigurationManager :: Lens' OpsWorksStack (Maybe OpsWorksStackStackConfigurationManager)
+owsConfigurationManager = lens _opsWorksStackConfigurationManager (\s a -> s { _opsWorksStackConfigurationManager = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-custcookbooksource
+owsCustomCookbooksSource :: Lens' OpsWorksStack (Maybe OpsWorksStackSource)
+owsCustomCookbooksSource = lens _opsWorksStackCustomCookbooksSource (\s a -> s { _opsWorksStackCustomCookbooksSource = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-custjson
+owsCustomJson :: Lens' OpsWorksStack (Maybe Object)
+owsCustomJson = lens _opsWorksStackCustomJson (\s a -> s { _opsWorksStackCustomJson = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-defaultaz
+owsDefaultAvailabilityZone :: Lens' OpsWorksStack (Maybe (Val Text))
+owsDefaultAvailabilityZone = lens _opsWorksStackDefaultAvailabilityZone (\s a -> s { _opsWorksStackDefaultAvailabilityZone = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-defaultinstanceprof
+owsDefaultInstanceProfileArn :: Lens' OpsWorksStack (Val Text)
+owsDefaultInstanceProfileArn = lens _opsWorksStackDefaultInstanceProfileArn (\s a -> s { _opsWorksStackDefaultInstanceProfileArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-defaultos
+owsDefaultOs :: Lens' OpsWorksStack (Maybe (Val Text))
+owsDefaultOs = lens _opsWorksStackDefaultOs (\s a -> s { _opsWorksStackDefaultOs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-defaultrootdevicetype
+owsDefaultRootDeviceType :: Lens' OpsWorksStack (Maybe (Val Text))
+owsDefaultRootDeviceType = lens _opsWorksStackDefaultRootDeviceType (\s a -> s { _opsWorksStackDefaultRootDeviceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-defaultsshkeyname
+owsDefaultSshKeyName :: Lens' OpsWorksStack (Maybe (Val Text))
+owsDefaultSshKeyName = lens _opsWorksStackDefaultSshKeyName (\s a -> s { _opsWorksStackDefaultSshKeyName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#defaultsubnet
+owsDefaultSubnetId :: Lens' OpsWorksStack (Maybe (Val Text))
+owsDefaultSubnetId = lens _opsWorksStackDefaultSubnetId (\s a -> s { _opsWorksStackDefaultSubnetId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-ecsclusterarn
+owsEcsClusterArn :: Lens' OpsWorksStack (Maybe (Val Text))
+owsEcsClusterArn = lens _opsWorksStackEcsClusterArn (\s a -> s { _opsWorksStackEcsClusterArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-elasticips
+owsElasticIps :: Lens' OpsWorksStack (Maybe [OpsWorksStackElasticIp])
+owsElasticIps = lens _opsWorksStackElasticIps (\s a -> s { _opsWorksStackElasticIps = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-hostnametheme
+owsHostnameTheme :: Lens' OpsWorksStack (Maybe (Val Text))
+owsHostnameTheme = lens _opsWorksStackHostnameTheme (\s a -> s { _opsWorksStackHostnameTheme = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-name
+owsName :: Lens' OpsWorksStack (Val Text)
+owsName = lens _opsWorksStackName (\s a -> s { _opsWorksStackName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-rdsdbinstances
+owsRdsDbInstances :: Lens' OpsWorksStack (Maybe [OpsWorksStackRdsDbInstance])
+owsRdsDbInstances = lens _opsWorksStackRdsDbInstances (\s a -> s { _opsWorksStackRdsDbInstances = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-servicerolearn
+owsServiceRoleArn :: Lens' OpsWorksStack (Val Text)
+owsServiceRoleArn = lens _opsWorksStackServiceRoleArn (\s a -> s { _opsWorksStackServiceRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-sourcestackid
+owsSourceStackId :: Lens' OpsWorksStack (Maybe (Val Text))
+owsSourceStackId = lens _opsWorksStackSourceStackId (\s a -> s { _opsWorksStackSourceStackId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#usecustcookbooks
+owsUseCustomCookbooks :: Lens' OpsWorksStack (Maybe (Val Bool'))
+owsUseCustomCookbooks = lens _opsWorksStackUseCustomCookbooks (\s a -> s { _opsWorksStackUseCustomCookbooks = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-useopsworkssecuritygroups
+owsUseOpsworksSecurityGroups :: Lens' OpsWorksStack (Maybe (Val Bool'))
+owsUseOpsworksSecurityGroups = lens _opsWorksStackUseOpsworksSecurityGroups (\s a -> s { _opsWorksStackUseOpsworksSecurityGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-vpcid
+owsVpcId :: Lens' OpsWorksStack (Maybe (Val Text))
+owsVpcId = lens _opsWorksStackVpcId (\s a -> s { _opsWorksStackVpcId = a })
diff --git a/library-gen/Stratosphere/Resources/OpsWorksUserProfile.hs b/library-gen/Stratosphere/Resources/OpsWorksUserProfile.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/OpsWorksUserProfile.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-userprofile.html
+
+module Stratosphere.Resources.OpsWorksUserProfile where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksUserProfile. See
+-- | 'opsWorksUserProfile' for a more convenient constructor.
+data OpsWorksUserProfile =
+  OpsWorksUserProfile
+  { _opsWorksUserProfileAllowSelfManagement :: Maybe (Val Bool')
+  , _opsWorksUserProfileIamUserArn :: Val Text
+  , _opsWorksUserProfileSshPublicKey :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksUserProfile where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+instance FromJSON OpsWorksUserProfile where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksUserProfile' containing required fields as
+-- | arguments.
+opsWorksUserProfile
+  :: Val Text -- ^ 'owupIamUserArn'
+  -> OpsWorksUserProfile
+opsWorksUserProfile iamUserArnarg =
+  OpsWorksUserProfile
+  { _opsWorksUserProfileAllowSelfManagement = Nothing
+  , _opsWorksUserProfileIamUserArn = iamUserArnarg
+  , _opsWorksUserProfileSshPublicKey = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-userprofile.html#cfn-opsworks-userprofile-allowselfmanagement
+owupAllowSelfManagement :: Lens' OpsWorksUserProfile (Maybe (Val Bool'))
+owupAllowSelfManagement = lens _opsWorksUserProfileAllowSelfManagement (\s a -> s { _opsWorksUserProfileAllowSelfManagement = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-userprofile.html#cfn-opsworks-userprofile-iamuserarn
+owupIamUserArn :: Lens' OpsWorksUserProfile (Val Text)
+owupIamUserArn = lens _opsWorksUserProfileIamUserArn (\s a -> s { _opsWorksUserProfileIamUserArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-userprofile.html#cfn-opsworks-userprofile-sshpublickey
+owupSshPublicKey :: Lens' OpsWorksUserProfile (Maybe (Val Text))
+owupSshPublicKey = lens _opsWorksUserProfileSshPublicKey (\s a -> s { _opsWorksUserProfileSshPublicKey = a })
diff --git a/library-gen/Stratosphere/Resources/OpsWorksVolume.hs b/library-gen/Stratosphere/Resources/OpsWorksVolume.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/OpsWorksVolume.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-volume.html
+
+module Stratosphere.Resources.OpsWorksVolume where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for OpsWorksVolume. See 'opsWorksVolume' for a
+-- | more convenient constructor.
+data OpsWorksVolume =
+  OpsWorksVolume
+  { _opsWorksVolumeEc2VolumeId :: Val Text
+  , _opsWorksVolumeMountPoint :: Maybe (Val Text)
+  , _opsWorksVolumeName :: Maybe (Val Text)
+  , _opsWorksVolumeStackId :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON OpsWorksVolume where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+instance FromJSON OpsWorksVolume where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+-- | Constructor for 'OpsWorksVolume' containing required fields as arguments.
+opsWorksVolume
+  :: Val Text -- ^ 'owvEc2VolumeId'
+  -> Val Text -- ^ 'owvStackId'
+  -> OpsWorksVolume
+opsWorksVolume ec2VolumeIdarg stackIdarg =
+  OpsWorksVolume
+  { _opsWorksVolumeEc2VolumeId = ec2VolumeIdarg
+  , _opsWorksVolumeMountPoint = Nothing
+  , _opsWorksVolumeName = Nothing
+  , _opsWorksVolumeStackId = stackIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-volume.html#cfn-opsworks-volume-ec2volumeid
+owvEc2VolumeId :: Lens' OpsWorksVolume (Val Text)
+owvEc2VolumeId = lens _opsWorksVolumeEc2VolumeId (\s a -> s { _opsWorksVolumeEc2VolumeId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-volume.html#cfn-opsworks-volume-mountpoint
+owvMountPoint :: Lens' OpsWorksVolume (Maybe (Val Text))
+owvMountPoint = lens _opsWorksVolumeMountPoint (\s a -> s { _opsWorksVolumeMountPoint = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-volume.html#cfn-opsworks-volume-name
+owvName :: Lens' OpsWorksVolume (Maybe (Val Text))
+owvName = lens _opsWorksVolumeName (\s a -> s { _opsWorksVolumeName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-volume.html#cfn-opsworks-volume-stackid
+owvStackId :: Lens' OpsWorksVolume (Val Text)
+owvStackId = lens _opsWorksVolumeStackId (\s a -> s { _opsWorksVolumeStackId = a })
diff --git a/library-gen/Stratosphere/Resources/Policy.hs b/library-gen/Stratosphere/Resources/Policy.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/Policy.hs
+++ /dev/null
@@ -1,78 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::IAM::Policy resource associates an IAM policy with IAM users,
--- roles, or groups. For more information about IAM policies, see Overview of
--- IAM Policies in the IAM User Guide guide.
-
-module Stratosphere.Resources.Policy where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for Policy. See 'policy' for a more convenient
--- constructor.
-data Policy =
-  Policy
-  { _policyGroups :: Maybe [Val Text]
-  , _policyPolicyDocument :: Object
-  , _policyPolicyName :: Val Text
-  , _policyRoles :: Maybe [Val Text]
-  , _policyUsers :: Maybe [Val Text]
-  } deriving (Show, Generic)
-
-instance ToJSON Policy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
-
-instance FromJSON Policy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
-
--- | Constructor for 'Policy' containing required fields as arguments.
-policy
-  :: Object -- ^ 'pPolicyDocument'
-  -> Val Text -- ^ 'pPolicyName'
-  -> Policy
-policy policyDocumentarg policyNamearg =
-  Policy
-  { _policyGroups = Nothing
-  , _policyPolicyDocument = policyDocumentarg
-  , _policyPolicyName = policyNamearg
-  , _policyRoles = Nothing
-  , _policyUsers = Nothing
-  }
-
--- | The names of groups to which you want to add the policy.
-pGroups :: Lens' Policy (Maybe [Val Text])
-pGroups = lens _policyGroups (\s a -> s { _policyGroups = a })
-
--- | A policy document that contains permissions to add to the specified users
--- or groups.
-pPolicyDocument :: Lens' Policy Object
-pPolicyDocument = lens _policyPolicyDocument (\s a -> s { _policyPolicyDocument = a })
-
--- | The name of the policy. If you specify multiple policies for an entity,
--- specify unique names. For example, if you specify a list of policies for an
--- IAM role, each policy must have a unique name.
-pPolicyName :: Lens' Policy (Val Text)
-pPolicyName = lens _policyPolicyName (\s a -> s { _policyPolicyName = a })
-
--- | The names of AWS::IAM::Roles to attach to this policy. Note If a policy
--- has a Ref to a role and if a resource (such as AWS::ECS::Service) also has
--- a Ref to the same role, add a DependsOn attribute to the resource so that
--- the resource depends on the policy. This dependency ensures that the role's
--- policy is available throughout the resource's lifecycle. For example, when
--- you delete a stack with an AWS::ECS::Service resource, the DependsOn
--- attribute ensures that the AWS::ECS::Service resource can complete its
--- deletion before its role's policy is deleted.
-pRoles :: Lens' Policy (Maybe [Val Text])
-pRoles = lens _policyRoles (\s a -> s { _policyRoles = a })
-
--- | The names of users for whom you want to add the policy.
-pUsers :: Lens' Policy (Maybe [Val Text])
-pUsers = lens _policyUsers (\s a -> s { _policyUsers = a })
diff --git a/library-gen/Stratosphere/Resources/RDSDBCluster.hs b/library-gen/Stratosphere/Resources/RDSDBCluster.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/RDSDBCluster.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html
+
+module Stratosphere.Resources.RDSDBCluster where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for RDSDBCluster. See 'rdsdbCluster' for a more
+-- | convenient constructor.
+data RDSDBCluster =
+  RDSDBCluster
+  { _rDSDBClusterAvailabilityZones :: Maybe (Val Text)
+  , _rDSDBClusterBackupRetentionPeriod :: Maybe (Val Integer')
+  , _rDSDBClusterDBClusterParameterGroupName :: Maybe (Val Text)
+  , _rDSDBClusterDBSubnetGroupName :: Maybe (Val Text)
+  , _rDSDBClusterDatabaseName :: Maybe (Val Text)
+  , _rDSDBClusterEngine :: Val Text
+  , _rDSDBClusterEngineVersion :: Maybe (Val Text)
+  , _rDSDBClusterKmsKeyId :: Maybe (Val Text)
+  , _rDSDBClusterMasterUserPassword :: Maybe (Val Text)
+  , _rDSDBClusterMasterUsername :: Maybe (Val Text)
+  , _rDSDBClusterPort :: Maybe (Val Integer')
+  , _rDSDBClusterPreferredBackupWindow :: Maybe (Val Text)
+  , _rDSDBClusterPreferredMaintenanceWindow :: Maybe (Val Text)
+  , _rDSDBClusterSnapshotIdentifier :: Maybe (Val Text)
+  , _rDSDBClusterStorageEncrypted :: Maybe (Val Bool')
+  , _rDSDBClusterTags :: Maybe [Tag]
+  , _rDSDBClusterVpcSecurityGroupIds :: Maybe [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON RDSDBCluster where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+
+instance FromJSON RDSDBCluster where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+
+-- | Constructor for 'RDSDBCluster' containing required fields as arguments.
+rdsdbCluster
+  :: Val Text -- ^ 'rdsdbcEngine'
+  -> RDSDBCluster
+rdsdbCluster enginearg =
+  RDSDBCluster
+  { _rDSDBClusterAvailabilityZones = Nothing
+  , _rDSDBClusterBackupRetentionPeriod = Nothing
+  , _rDSDBClusterDBClusterParameterGroupName = Nothing
+  , _rDSDBClusterDBSubnetGroupName = Nothing
+  , _rDSDBClusterDatabaseName = Nothing
+  , _rDSDBClusterEngine = enginearg
+  , _rDSDBClusterEngineVersion = Nothing
+  , _rDSDBClusterKmsKeyId = Nothing
+  , _rDSDBClusterMasterUserPassword = Nothing
+  , _rDSDBClusterMasterUsername = Nothing
+  , _rDSDBClusterPort = Nothing
+  , _rDSDBClusterPreferredBackupWindow = Nothing
+  , _rDSDBClusterPreferredMaintenanceWindow = Nothing
+  , _rDSDBClusterSnapshotIdentifier = Nothing
+  , _rDSDBClusterStorageEncrypted = Nothing
+  , _rDSDBClusterTags = Nothing
+  , _rDSDBClusterVpcSecurityGroupIds = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-availabilityzones
+rdsdbcAvailabilityZones :: Lens' RDSDBCluster (Maybe (Val Text))
+rdsdbcAvailabilityZones = lens _rDSDBClusterAvailabilityZones (\s a -> s { _rDSDBClusterAvailabilityZones = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-backuprententionperiod
+rdsdbcBackupRetentionPeriod :: Lens' RDSDBCluster (Maybe (Val Integer'))
+rdsdbcBackupRetentionPeriod = lens _rDSDBClusterBackupRetentionPeriod (\s a -> s { _rDSDBClusterBackupRetentionPeriod = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-dbclusterparametergroupname
+rdsdbcDBClusterParameterGroupName :: Lens' RDSDBCluster (Maybe (Val Text))
+rdsdbcDBClusterParameterGroupName = lens _rDSDBClusterDBClusterParameterGroupName (\s a -> s { _rDSDBClusterDBClusterParameterGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-dbsubnetgroupname
+rdsdbcDBSubnetGroupName :: Lens' RDSDBCluster (Maybe (Val Text))
+rdsdbcDBSubnetGroupName = lens _rDSDBClusterDBSubnetGroupName (\s a -> s { _rDSDBClusterDBSubnetGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-databasename
+rdsdbcDatabaseName :: Lens' RDSDBCluster (Maybe (Val Text))
+rdsdbcDatabaseName = lens _rDSDBClusterDatabaseName (\s a -> s { _rDSDBClusterDatabaseName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-engine
+rdsdbcEngine :: Lens' RDSDBCluster (Val Text)
+rdsdbcEngine = lens _rDSDBClusterEngine (\s a -> s { _rDSDBClusterEngine = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-engineversion
+rdsdbcEngineVersion :: Lens' RDSDBCluster (Maybe (Val Text))
+rdsdbcEngineVersion = lens _rDSDBClusterEngineVersion (\s a -> s { _rDSDBClusterEngineVersion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-kmskeyid
+rdsdbcKmsKeyId :: Lens' RDSDBCluster (Maybe (Val Text))
+rdsdbcKmsKeyId = lens _rDSDBClusterKmsKeyId (\s a -> s { _rDSDBClusterKmsKeyId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-masteruserpassword
+rdsdbcMasterUserPassword :: Lens' RDSDBCluster (Maybe (Val Text))
+rdsdbcMasterUserPassword = lens _rDSDBClusterMasterUserPassword (\s a -> s { _rDSDBClusterMasterUserPassword = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-masterusername
+rdsdbcMasterUsername :: Lens' RDSDBCluster (Maybe (Val Text))
+rdsdbcMasterUsername = lens _rDSDBClusterMasterUsername (\s a -> s { _rDSDBClusterMasterUsername = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-port
+rdsdbcPort :: Lens' RDSDBCluster (Maybe (Val Integer'))
+rdsdbcPort = lens _rDSDBClusterPort (\s a -> s { _rDSDBClusterPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-preferredbackupwindow
+rdsdbcPreferredBackupWindow :: Lens' RDSDBCluster (Maybe (Val Text))
+rdsdbcPreferredBackupWindow = lens _rDSDBClusterPreferredBackupWindow (\s a -> s { _rDSDBClusterPreferredBackupWindow = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-preferredmaintenancewindow
+rdsdbcPreferredMaintenanceWindow :: Lens' RDSDBCluster (Maybe (Val Text))
+rdsdbcPreferredMaintenanceWindow = lens _rDSDBClusterPreferredMaintenanceWindow (\s a -> s { _rDSDBClusterPreferredMaintenanceWindow = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-snapshotidentifier
+rdsdbcSnapshotIdentifier :: Lens' RDSDBCluster (Maybe (Val Text))
+rdsdbcSnapshotIdentifier = lens _rDSDBClusterSnapshotIdentifier (\s a -> s { _rDSDBClusterSnapshotIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-storageencrypted
+rdsdbcStorageEncrypted :: Lens' RDSDBCluster (Maybe (Val Bool'))
+rdsdbcStorageEncrypted = lens _rDSDBClusterStorageEncrypted (\s a -> s { _rDSDBClusterStorageEncrypted = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-tags
+rdsdbcTags :: Lens' RDSDBCluster (Maybe [Tag])
+rdsdbcTags = lens _rDSDBClusterTags (\s a -> s { _rDSDBClusterTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-vpcsecuritygroupids
+rdsdbcVpcSecurityGroupIds :: Lens' RDSDBCluster (Maybe [Val Text])
+rdsdbcVpcSecurityGroupIds = lens _rDSDBClusterVpcSecurityGroupIds (\s a -> s { _rDSDBClusterVpcSecurityGroupIds = a })
diff --git a/library-gen/Stratosphere/Resources/RDSDBClusterParameterGroup.hs b/library-gen/Stratosphere/Resources/RDSDBClusterParameterGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/RDSDBClusterParameterGroup.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbclusterparametergroup.html
+
+module Stratosphere.Resources.RDSDBClusterParameterGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for RDSDBClusterParameterGroup. See
+-- | 'rdsdbClusterParameterGroup' for a more convenient constructor.
+data RDSDBClusterParameterGroup =
+  RDSDBClusterParameterGroup
+  { _rDSDBClusterParameterGroupDescription :: Val Text
+  , _rDSDBClusterParameterGroupFamily :: Val Text
+  , _rDSDBClusterParameterGroupParameters :: Object
+  , _rDSDBClusterParameterGroupTags :: Maybe [Tag]
+  } deriving (Show, Generic)
+
+instance ToJSON RDSDBClusterParameterGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON RDSDBClusterParameterGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'RDSDBClusterParameterGroup' containing required fields
+-- | as arguments.
+rdsdbClusterParameterGroup
+  :: Val Text -- ^ 'rdsdbcpgDescription'
+  -> Val Text -- ^ 'rdsdbcpgFamily'
+  -> Object -- ^ 'rdsdbcpgParameters'
+  -> RDSDBClusterParameterGroup
+rdsdbClusterParameterGroup descriptionarg familyarg parametersarg =
+  RDSDBClusterParameterGroup
+  { _rDSDBClusterParameterGroupDescription = descriptionarg
+  , _rDSDBClusterParameterGroupFamily = familyarg
+  , _rDSDBClusterParameterGroupParameters = parametersarg
+  , _rDSDBClusterParameterGroupTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbclusterparametergroup.html#cfn-rds-dbclusterparametergroup-description
+rdsdbcpgDescription :: Lens' RDSDBClusterParameterGroup (Val Text)
+rdsdbcpgDescription = lens _rDSDBClusterParameterGroupDescription (\s a -> s { _rDSDBClusterParameterGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbclusterparametergroup.html#cfn-rds-dbclusterparametergroup-family
+rdsdbcpgFamily :: Lens' RDSDBClusterParameterGroup (Val Text)
+rdsdbcpgFamily = lens _rDSDBClusterParameterGroupFamily (\s a -> s { _rDSDBClusterParameterGroupFamily = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbclusterparametergroup.html#cfn-rds-dbclusterparametergroup-parameters
+rdsdbcpgParameters :: Lens' RDSDBClusterParameterGroup Object
+rdsdbcpgParameters = lens _rDSDBClusterParameterGroupParameters (\s a -> s { _rDSDBClusterParameterGroupParameters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbclusterparametergroup.html#cfn-rds-dbclusterparametergroup-tags
+rdsdbcpgTags :: Lens' RDSDBClusterParameterGroup (Maybe [Tag])
+rdsdbcpgTags = lens _rDSDBClusterParameterGroupTags (\s a -> s { _rDSDBClusterParameterGroupTags = a })
diff --git a/library-gen/Stratosphere/Resources/RDSDBInstance.hs b/library-gen/Stratosphere/Resources/RDSDBInstance.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/RDSDBInstance.hs
@@ -0,0 +1,257 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html
+
+module Stratosphere.Resources.RDSDBInstance where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for RDSDBInstance. See 'rdsdbInstance' for a
+-- | more convenient constructor.
+data RDSDBInstance =
+  RDSDBInstance
+  { _rDSDBInstanceAllocatedStorage :: Maybe (Val Text)
+  , _rDSDBInstanceAllowMajorVersionUpgrade :: Maybe (Val Bool')
+  , _rDSDBInstanceAutoMinorVersionUpgrade :: Maybe (Val Bool')
+  , _rDSDBInstanceAvailabilityZone :: Maybe (Val Text)
+  , _rDSDBInstanceBackupRetentionPeriod :: Maybe (Val Text)
+  , _rDSDBInstanceCharacterSetName :: Maybe (Val Text)
+  , _rDSDBInstanceDBClusterIdentifier :: Maybe (Val Text)
+  , _rDSDBInstanceDBInstanceClass :: Val Text
+  , _rDSDBInstanceDBInstanceIdentifier :: Maybe (Val Text)
+  , _rDSDBInstanceDBName :: Maybe (Val Text)
+  , _rDSDBInstanceDBParameterGroupName :: Maybe (Val Text)
+  , _rDSDBInstanceDBSecurityGroups :: Maybe [Val Text]
+  , _rDSDBInstanceDBSnapshotIdentifier :: Maybe (Val Text)
+  , _rDSDBInstanceDBSubnetGroupName :: Maybe (Val Text)
+  , _rDSDBInstanceDomain :: Maybe (Val Text)
+  , _rDSDBInstanceDomainIAMRoleName :: Maybe (Val Text)
+  , _rDSDBInstanceEngine :: Maybe (Val Text)
+  , _rDSDBInstanceEngineVersion :: Maybe (Val Text)
+  , _rDSDBInstanceIops :: Maybe (Val Integer')
+  , _rDSDBInstanceKmsKeyId :: Maybe (Val Text)
+  , _rDSDBInstanceLicenseModel :: Maybe (Val Text)
+  , _rDSDBInstanceMasterUserPassword :: Maybe (Val Text)
+  , _rDSDBInstanceMasterUsername :: Maybe (Val Text)
+  , _rDSDBInstanceMonitoringInterval :: Maybe (Val Integer')
+  , _rDSDBInstanceMonitoringRoleArn :: Maybe (Val Text)
+  , _rDSDBInstanceMultiAZ :: Maybe (Val Bool')
+  , _rDSDBInstanceOptionGroupName :: Maybe (Val Text)
+  , _rDSDBInstancePort :: Maybe (Val Text)
+  , _rDSDBInstancePreferredBackupWindow :: Maybe (Val Text)
+  , _rDSDBInstancePreferredMaintenanceWindow :: Maybe (Val Text)
+  , _rDSDBInstancePubliclyAccessible :: Maybe (Val Bool')
+  , _rDSDBInstanceSourceDBInstanceIdentifier :: Maybe (Val Text)
+  , _rDSDBInstanceStorageEncrypted :: Maybe (Val Bool')
+  , _rDSDBInstanceStorageType :: Maybe (Val Text)
+  , _rDSDBInstanceTags :: Maybe [Tag]
+  , _rDSDBInstanceTimezone :: Maybe (Val Text)
+  , _rDSDBInstanceVPCSecurityGroups :: Maybe [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON RDSDBInstance where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+instance FromJSON RDSDBInstance where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
+
+-- | Constructor for 'RDSDBInstance' containing required fields as arguments.
+rdsdbInstance
+  :: Val Text -- ^ 'rdsdbiDBInstanceClass'
+  -> RDSDBInstance
+rdsdbInstance dBInstanceClassarg =
+  RDSDBInstance
+  { _rDSDBInstanceAllocatedStorage = Nothing
+  , _rDSDBInstanceAllowMajorVersionUpgrade = Nothing
+  , _rDSDBInstanceAutoMinorVersionUpgrade = Nothing
+  , _rDSDBInstanceAvailabilityZone = Nothing
+  , _rDSDBInstanceBackupRetentionPeriod = Nothing
+  , _rDSDBInstanceCharacterSetName = Nothing
+  , _rDSDBInstanceDBClusterIdentifier = Nothing
+  , _rDSDBInstanceDBInstanceClass = dBInstanceClassarg
+  , _rDSDBInstanceDBInstanceIdentifier = Nothing
+  , _rDSDBInstanceDBName = Nothing
+  , _rDSDBInstanceDBParameterGroupName = Nothing
+  , _rDSDBInstanceDBSecurityGroups = Nothing
+  , _rDSDBInstanceDBSnapshotIdentifier = Nothing
+  , _rDSDBInstanceDBSubnetGroupName = Nothing
+  , _rDSDBInstanceDomain = Nothing
+  , _rDSDBInstanceDomainIAMRoleName = Nothing
+  , _rDSDBInstanceEngine = Nothing
+  , _rDSDBInstanceEngineVersion = Nothing
+  , _rDSDBInstanceIops = Nothing
+  , _rDSDBInstanceKmsKeyId = Nothing
+  , _rDSDBInstanceLicenseModel = Nothing
+  , _rDSDBInstanceMasterUserPassword = Nothing
+  , _rDSDBInstanceMasterUsername = Nothing
+  , _rDSDBInstanceMonitoringInterval = Nothing
+  , _rDSDBInstanceMonitoringRoleArn = Nothing
+  , _rDSDBInstanceMultiAZ = Nothing
+  , _rDSDBInstanceOptionGroupName = Nothing
+  , _rDSDBInstancePort = Nothing
+  , _rDSDBInstancePreferredBackupWindow = Nothing
+  , _rDSDBInstancePreferredMaintenanceWindow = Nothing
+  , _rDSDBInstancePubliclyAccessible = Nothing
+  , _rDSDBInstanceSourceDBInstanceIdentifier = Nothing
+  , _rDSDBInstanceStorageEncrypted = Nothing
+  , _rDSDBInstanceStorageType = Nothing
+  , _rDSDBInstanceTags = Nothing
+  , _rDSDBInstanceTimezone = Nothing
+  , _rDSDBInstanceVPCSecurityGroups = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-allocatedstorage
+rdsdbiAllocatedStorage :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiAllocatedStorage = lens _rDSDBInstanceAllocatedStorage (\s a -> s { _rDSDBInstanceAllocatedStorage = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-allowmajorversionupgrade
+rdsdbiAllowMajorVersionUpgrade :: Lens' RDSDBInstance (Maybe (Val Bool'))
+rdsdbiAllowMajorVersionUpgrade = lens _rDSDBInstanceAllowMajorVersionUpgrade (\s a -> s { _rDSDBInstanceAllowMajorVersionUpgrade = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-autominorversionupgrade
+rdsdbiAutoMinorVersionUpgrade :: Lens' RDSDBInstance (Maybe (Val Bool'))
+rdsdbiAutoMinorVersionUpgrade = lens _rDSDBInstanceAutoMinorVersionUpgrade (\s a -> s { _rDSDBInstanceAutoMinorVersionUpgrade = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-availabilityzone
+rdsdbiAvailabilityZone :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiAvailabilityZone = lens _rDSDBInstanceAvailabilityZone (\s a -> s { _rDSDBInstanceAvailabilityZone = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-backupretentionperiod
+rdsdbiBackupRetentionPeriod :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiBackupRetentionPeriod = lens _rDSDBInstanceBackupRetentionPeriod (\s a -> s { _rDSDBInstanceBackupRetentionPeriod = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-charactersetname
+rdsdbiCharacterSetName :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiCharacterSetName = lens _rDSDBInstanceCharacterSetName (\s a -> s { _rDSDBInstanceCharacterSetName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-dbclusteridentifier
+rdsdbiDBClusterIdentifier :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiDBClusterIdentifier = lens _rDSDBInstanceDBClusterIdentifier (\s a -> s { _rDSDBInstanceDBClusterIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-dbinstanceclass
+rdsdbiDBInstanceClass :: Lens' RDSDBInstance (Val Text)
+rdsdbiDBInstanceClass = lens _rDSDBInstanceDBInstanceClass (\s a -> s { _rDSDBInstanceDBInstanceClass = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-dbinstanceidentifier
+rdsdbiDBInstanceIdentifier :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiDBInstanceIdentifier = lens _rDSDBInstanceDBInstanceIdentifier (\s a -> s { _rDSDBInstanceDBInstanceIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-dbname
+rdsdbiDBName :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiDBName = lens _rDSDBInstanceDBName (\s a -> s { _rDSDBInstanceDBName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-dbparametergroupname
+rdsdbiDBParameterGroupName :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiDBParameterGroupName = lens _rDSDBInstanceDBParameterGroupName (\s a -> s { _rDSDBInstanceDBParameterGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-dbsecuritygroups
+rdsdbiDBSecurityGroups :: Lens' RDSDBInstance (Maybe [Val Text])
+rdsdbiDBSecurityGroups = lens _rDSDBInstanceDBSecurityGroups (\s a -> s { _rDSDBInstanceDBSecurityGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-dbsnapshotidentifier
+rdsdbiDBSnapshotIdentifier :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiDBSnapshotIdentifier = lens _rDSDBInstanceDBSnapshotIdentifier (\s a -> s { _rDSDBInstanceDBSnapshotIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-dbsubnetgroupname
+rdsdbiDBSubnetGroupName :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiDBSubnetGroupName = lens _rDSDBInstanceDBSubnetGroupName (\s a -> s { _rDSDBInstanceDBSubnetGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-domain
+rdsdbiDomain :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiDomain = lens _rDSDBInstanceDomain (\s a -> s { _rDSDBInstanceDomain = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-domainiamrolename
+rdsdbiDomainIAMRoleName :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiDomainIAMRoleName = lens _rDSDBInstanceDomainIAMRoleName (\s a -> s { _rDSDBInstanceDomainIAMRoleName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-engine
+rdsdbiEngine :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiEngine = lens _rDSDBInstanceEngine (\s a -> s { _rDSDBInstanceEngine = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-engineversion
+rdsdbiEngineVersion :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiEngineVersion = lens _rDSDBInstanceEngineVersion (\s a -> s { _rDSDBInstanceEngineVersion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-iops
+rdsdbiIops :: Lens' RDSDBInstance (Maybe (Val Integer'))
+rdsdbiIops = lens _rDSDBInstanceIops (\s a -> s { _rDSDBInstanceIops = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-kmskeyid
+rdsdbiKmsKeyId :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiKmsKeyId = lens _rDSDBInstanceKmsKeyId (\s a -> s { _rDSDBInstanceKmsKeyId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-licensemodel
+rdsdbiLicenseModel :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiLicenseModel = lens _rDSDBInstanceLicenseModel (\s a -> s { _rDSDBInstanceLicenseModel = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-masteruserpassword
+rdsdbiMasterUserPassword :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiMasterUserPassword = lens _rDSDBInstanceMasterUserPassword (\s a -> s { _rDSDBInstanceMasterUserPassword = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-masterusername
+rdsdbiMasterUsername :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiMasterUsername = lens _rDSDBInstanceMasterUsername (\s a -> s { _rDSDBInstanceMasterUsername = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-monitoringinterval
+rdsdbiMonitoringInterval :: Lens' RDSDBInstance (Maybe (Val Integer'))
+rdsdbiMonitoringInterval = lens _rDSDBInstanceMonitoringInterval (\s a -> s { _rDSDBInstanceMonitoringInterval = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-monitoringrolearn
+rdsdbiMonitoringRoleArn :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiMonitoringRoleArn = lens _rDSDBInstanceMonitoringRoleArn (\s a -> s { _rDSDBInstanceMonitoringRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-multiaz
+rdsdbiMultiAZ :: Lens' RDSDBInstance (Maybe (Val Bool'))
+rdsdbiMultiAZ = lens _rDSDBInstanceMultiAZ (\s a -> s { _rDSDBInstanceMultiAZ = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-optiongroupname
+rdsdbiOptionGroupName :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiOptionGroupName = lens _rDSDBInstanceOptionGroupName (\s a -> s { _rDSDBInstanceOptionGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-port
+rdsdbiPort :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiPort = lens _rDSDBInstancePort (\s a -> s { _rDSDBInstancePort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-preferredbackupwindow
+rdsdbiPreferredBackupWindow :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiPreferredBackupWindow = lens _rDSDBInstancePreferredBackupWindow (\s a -> s { _rDSDBInstancePreferredBackupWindow = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-preferredmaintenancewindow
+rdsdbiPreferredMaintenanceWindow :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiPreferredMaintenanceWindow = lens _rDSDBInstancePreferredMaintenanceWindow (\s a -> s { _rDSDBInstancePreferredMaintenanceWindow = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-publiclyaccessible
+rdsdbiPubliclyAccessible :: Lens' RDSDBInstance (Maybe (Val Bool'))
+rdsdbiPubliclyAccessible = lens _rDSDBInstancePubliclyAccessible (\s a -> s { _rDSDBInstancePubliclyAccessible = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-sourcedbinstanceidentifier
+rdsdbiSourceDBInstanceIdentifier :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiSourceDBInstanceIdentifier = lens _rDSDBInstanceSourceDBInstanceIdentifier (\s a -> s { _rDSDBInstanceSourceDBInstanceIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-storageencrypted
+rdsdbiStorageEncrypted :: Lens' RDSDBInstance (Maybe (Val Bool'))
+rdsdbiStorageEncrypted = lens _rDSDBInstanceStorageEncrypted (\s a -> s { _rDSDBInstanceStorageEncrypted = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-storagetype
+rdsdbiStorageType :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiStorageType = lens _rDSDBInstanceStorageType (\s a -> s { _rDSDBInstanceStorageType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-tags
+rdsdbiTags :: Lens' RDSDBInstance (Maybe [Tag])
+rdsdbiTags = lens _rDSDBInstanceTags (\s a -> s { _rDSDBInstanceTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-timezone
+rdsdbiTimezone :: Lens' RDSDBInstance (Maybe (Val Text))
+rdsdbiTimezone = lens _rDSDBInstanceTimezone (\s a -> s { _rDSDBInstanceTimezone = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-vpcsecuritygroups
+rdsdbiVPCSecurityGroups :: Lens' RDSDBInstance (Maybe [Val Text])
+rdsdbiVPCSecurityGroups = lens _rDSDBInstanceVPCSecurityGroups (\s a -> s { _rDSDBInstanceVPCSecurityGroups = a })
diff --git a/library-gen/Stratosphere/Resources/RDSDBParameterGroup.hs b/library-gen/Stratosphere/Resources/RDSDBParameterGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/RDSDBParameterGroup.hs
@@ -0,0 +1,61 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-dbparametergroup.html
+
+module Stratosphere.Resources.RDSDBParameterGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for RDSDBParameterGroup. See
+-- | 'rdsdbParameterGroup' for a more convenient constructor.
+data RDSDBParameterGroup =
+  RDSDBParameterGroup
+  { _rDSDBParameterGroupDescription :: Val Text
+  , _rDSDBParameterGroupFamily :: Val Text
+  , _rDSDBParameterGroupParameters :: Maybe Object
+  , _rDSDBParameterGroupTags :: Maybe [Tag]
+  } deriving (Show, Generic)
+
+instance ToJSON RDSDBParameterGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+instance FromJSON RDSDBParameterGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+-- | Constructor for 'RDSDBParameterGroup' containing required fields as
+-- | arguments.
+rdsdbParameterGroup
+  :: Val Text -- ^ 'rdsdbpgDescription'
+  -> Val Text -- ^ 'rdsdbpgFamily'
+  -> RDSDBParameterGroup
+rdsdbParameterGroup descriptionarg familyarg =
+  RDSDBParameterGroup
+  { _rDSDBParameterGroupDescription = descriptionarg
+  , _rDSDBParameterGroupFamily = familyarg
+  , _rDSDBParameterGroupParameters = Nothing
+  , _rDSDBParameterGroupTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-dbparametergroup.html#cfn-rds-dbparametergroup-description
+rdsdbpgDescription :: Lens' RDSDBParameterGroup (Val Text)
+rdsdbpgDescription = lens _rDSDBParameterGroupDescription (\s a -> s { _rDSDBParameterGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-dbparametergroup.html#cfn-rds-dbparametergroup-family
+rdsdbpgFamily :: Lens' RDSDBParameterGroup (Val Text)
+rdsdbpgFamily = lens _rDSDBParameterGroupFamily (\s a -> s { _rDSDBParameterGroupFamily = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-dbparametergroup.html#cfn-rds-dbparametergroup-parameters
+rdsdbpgParameters :: Lens' RDSDBParameterGroup (Maybe Object)
+rdsdbpgParameters = lens _rDSDBParameterGroupParameters (\s a -> s { _rDSDBParameterGroupParameters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-dbparametergroup.html#cfn-rds-dbparametergroup-tags
+rdsdbpgTags :: Lens' RDSDBParameterGroup (Maybe [Tag])
+rdsdbpgTags = lens _rDSDBParameterGroupTags (\s a -> s { _rDSDBParameterGroupTags = a })
diff --git a/library-gen/Stratosphere/Resources/RDSDBSecurityGroup.hs b/library-gen/Stratosphere/Resources/RDSDBSecurityGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/RDSDBSecurityGroup.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-security-group.html
+
+module Stratosphere.Resources.RDSDBSecurityGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.RDSDBSecurityGroupIngressProperty
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for RDSDBSecurityGroup. See
+-- | 'rdsdbSecurityGroup' for a more convenient constructor.
+data RDSDBSecurityGroup =
+  RDSDBSecurityGroup
+  { _rDSDBSecurityGroupDBSecurityGroupIngress :: [RDSDBSecurityGroupIngressProperty]
+  , _rDSDBSecurityGroupEC2VpcId :: Maybe (Val Text)
+  , _rDSDBSecurityGroupGroupDescription :: Val Text
+  , _rDSDBSecurityGroupTags :: Maybe [Tag]
+  } deriving (Show, Generic)
+
+instance ToJSON RDSDBSecurityGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+instance FromJSON RDSDBSecurityGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+-- | Constructor for 'RDSDBSecurityGroup' containing required fields as
+-- | arguments.
+rdsdbSecurityGroup
+  :: [RDSDBSecurityGroupIngressProperty] -- ^ 'rdsdbsegDBSecurityGroupIngress'
+  -> Val Text -- ^ 'rdsdbsegGroupDescription'
+  -> RDSDBSecurityGroup
+rdsdbSecurityGroup dBSecurityGroupIngressarg groupDescriptionarg =
+  RDSDBSecurityGroup
+  { _rDSDBSecurityGroupDBSecurityGroupIngress = dBSecurityGroupIngressarg
+  , _rDSDBSecurityGroupEC2VpcId = Nothing
+  , _rDSDBSecurityGroupGroupDescription = groupDescriptionarg
+  , _rDSDBSecurityGroupTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-security-group.html#cfn-rds-dbsecuritygroup-dbsecuritygroupingress
+rdsdbsegDBSecurityGroupIngress :: Lens' RDSDBSecurityGroup [RDSDBSecurityGroupIngressProperty]
+rdsdbsegDBSecurityGroupIngress = lens _rDSDBSecurityGroupDBSecurityGroupIngress (\s a -> s { _rDSDBSecurityGroupDBSecurityGroupIngress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-security-group.html#cfn-rds-dbsecuritygroup-ec2vpcid
+rdsdbsegEC2VpcId :: Lens' RDSDBSecurityGroup (Maybe (Val Text))
+rdsdbsegEC2VpcId = lens _rDSDBSecurityGroupEC2VpcId (\s a -> s { _rDSDBSecurityGroupEC2VpcId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-security-group.html#cfn-rds-dbsecuritygroup-groupdescription
+rdsdbsegGroupDescription :: Lens' RDSDBSecurityGroup (Val Text)
+rdsdbsegGroupDescription = lens _rDSDBSecurityGroupGroupDescription (\s a -> s { _rDSDBSecurityGroupGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-security-group.html#cfn-rds-dbsecuritygroup-tags
+rdsdbsegTags :: Lens' RDSDBSecurityGroup (Maybe [Tag])
+rdsdbsegTags = lens _rDSDBSecurityGroupTags (\s a -> s { _rDSDBSecurityGroupTags = a })
diff --git a/library-gen/Stratosphere/Resources/RDSDBSecurityGroupIngress.hs b/library-gen/Stratosphere/Resources/RDSDBSecurityGroupIngress.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/RDSDBSecurityGroupIngress.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-security-group-ingress.html
+
+module Stratosphere.Resources.RDSDBSecurityGroupIngress where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for RDSDBSecurityGroupIngress. See
+-- | 'rdsdbSecurityGroupIngress' for a more convenient constructor.
+data RDSDBSecurityGroupIngress =
+  RDSDBSecurityGroupIngress
+  { _rDSDBSecurityGroupIngressCIDRIP :: Maybe (Val Text)
+  , _rDSDBSecurityGroupIngressDBSecurityGroupName :: Val Text
+  , _rDSDBSecurityGroupIngressEC2SecurityGroupId :: Maybe (Val Text)
+  , _rDSDBSecurityGroupIngressEC2SecurityGroupName :: Maybe (Val Text)
+  , _rDSDBSecurityGroupIngressEC2SecurityGroupOwnerId :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON RDSDBSecurityGroupIngress where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+instance FromJSON RDSDBSecurityGroupIngress where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 26, omitNothingFields = True }
+
+-- | Constructor for 'RDSDBSecurityGroupIngress' containing required fields as
+-- | arguments.
+rdsdbSecurityGroupIngress
+  :: Val Text -- ^ 'rdsdbsgiDBSecurityGroupName'
+  -> RDSDBSecurityGroupIngress
+rdsdbSecurityGroupIngress dBSecurityGroupNamearg =
+  RDSDBSecurityGroupIngress
+  { _rDSDBSecurityGroupIngressCIDRIP = Nothing
+  , _rDSDBSecurityGroupIngressDBSecurityGroupName = dBSecurityGroupNamearg
+  , _rDSDBSecurityGroupIngressEC2SecurityGroupId = Nothing
+  , _rDSDBSecurityGroupIngressEC2SecurityGroupName = Nothing
+  , _rDSDBSecurityGroupIngressEC2SecurityGroupOwnerId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-security-group-ingress.html#cfn-rds-securitygroup-ingress-cidrip
+rdsdbsgiCIDRIP :: Lens' RDSDBSecurityGroupIngress (Maybe (Val Text))
+rdsdbsgiCIDRIP = lens _rDSDBSecurityGroupIngressCIDRIP (\s a -> s { _rDSDBSecurityGroupIngressCIDRIP = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-security-group-ingress.html#cfn-rds-securitygroup-ingress-dbsecuritygroupname
+rdsdbsgiDBSecurityGroupName :: Lens' RDSDBSecurityGroupIngress (Val Text)
+rdsdbsgiDBSecurityGroupName = lens _rDSDBSecurityGroupIngressDBSecurityGroupName (\s a -> s { _rDSDBSecurityGroupIngressDBSecurityGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-security-group-ingress.html#cfn-rds-securitygroup-ingress-ec2securitygroupid
+rdsdbsgiEC2SecurityGroupId :: Lens' RDSDBSecurityGroupIngress (Maybe (Val Text))
+rdsdbsgiEC2SecurityGroupId = lens _rDSDBSecurityGroupIngressEC2SecurityGroupId (\s a -> s { _rDSDBSecurityGroupIngressEC2SecurityGroupId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-security-group-ingress.html#cfn-rds-securitygroup-ingress-ec2securitygroupname
+rdsdbsgiEC2SecurityGroupName :: Lens' RDSDBSecurityGroupIngress (Maybe (Val Text))
+rdsdbsgiEC2SecurityGroupName = lens _rDSDBSecurityGroupIngressEC2SecurityGroupName (\s a -> s { _rDSDBSecurityGroupIngressEC2SecurityGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-security-group-ingress.html#cfn-rds-securitygroup-ingress-ec2securitygroupownerid
+rdsdbsgiEC2SecurityGroupOwnerId :: Lens' RDSDBSecurityGroupIngress (Maybe (Val Text))
+rdsdbsgiEC2SecurityGroupOwnerId = lens _rDSDBSecurityGroupIngressEC2SecurityGroupOwnerId (\s a -> s { _rDSDBSecurityGroupIngressEC2SecurityGroupOwnerId = a })
diff --git a/library-gen/Stratosphere/Resources/RDSDBSubnetGroup.hs b/library-gen/Stratosphere/Resources/RDSDBSubnetGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/RDSDBSubnetGroup.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbsubnet-group.html
+
+module Stratosphere.Resources.RDSDBSubnetGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for RDSDBSubnetGroup. See 'rdsdbSubnetGroup'
+-- | for a more convenient constructor.
+data RDSDBSubnetGroup =
+  RDSDBSubnetGroup
+  { _rDSDBSubnetGroupDBSubnetGroupDescription :: Val Text
+  , _rDSDBSubnetGroupSubnetIds :: [Val Text]
+  , _rDSDBSubnetGroupTags :: Maybe [Tag]
+  } deriving (Show, Generic)
+
+instance ToJSON RDSDBSubnetGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+instance FromJSON RDSDBSubnetGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+-- | Constructor for 'RDSDBSubnetGroup' containing required fields as
+-- | arguments.
+rdsdbSubnetGroup
+  :: Val Text -- ^ 'rdsdbsugDBSubnetGroupDescription'
+  -> [Val Text] -- ^ 'rdsdbsugSubnetIds'
+  -> RDSDBSubnetGroup
+rdsdbSubnetGroup dBSubnetGroupDescriptionarg subnetIdsarg =
+  RDSDBSubnetGroup
+  { _rDSDBSubnetGroupDBSubnetGroupDescription = dBSubnetGroupDescriptionarg
+  , _rDSDBSubnetGroupSubnetIds = subnetIdsarg
+  , _rDSDBSubnetGroupTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbsubnet-group.html#cfn-rds-dbsubnetgroup-dbsubnetgroupdescription
+rdsdbsugDBSubnetGroupDescription :: Lens' RDSDBSubnetGroup (Val Text)
+rdsdbsugDBSubnetGroupDescription = lens _rDSDBSubnetGroupDBSubnetGroupDescription (\s a -> s { _rDSDBSubnetGroupDBSubnetGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbsubnet-group.html#cfn-rds-dbsubnetgroup-subnetids
+rdsdbsugSubnetIds :: Lens' RDSDBSubnetGroup [Val Text]
+rdsdbsugSubnetIds = lens _rDSDBSubnetGroupSubnetIds (\s a -> s { _rDSDBSubnetGroupSubnetIds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbsubnet-group.html#cfn-rds-dbsubnetgroup-tags
+rdsdbsugTags :: Lens' RDSDBSubnetGroup (Maybe [Tag])
+rdsdbsugTags = lens _rDSDBSubnetGroupTags (\s a -> s { _rDSDBSubnetGroupTags = a })
diff --git a/library-gen/Stratosphere/Resources/RDSEventSubscription.hs b/library-gen/Stratosphere/Resources/RDSEventSubscription.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/RDSEventSubscription.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-eventsubscription.html
+
+module Stratosphere.Resources.RDSEventSubscription where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for RDSEventSubscription. See
+-- | 'rdsEventSubscription' for a more convenient constructor.
+data RDSEventSubscription =
+  RDSEventSubscription
+  { _rDSEventSubscriptionEnabled :: Maybe (Val Bool')
+  , _rDSEventSubscriptionEventCategories :: Maybe [Val Text]
+  , _rDSEventSubscriptionSnsTopicArn :: Val Text
+  , _rDSEventSubscriptionSourceIds :: Maybe [Val Text]
+  , _rDSEventSubscriptionSourceType :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON RDSEventSubscription where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+instance FromJSON RDSEventSubscription where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+-- | Constructor for 'RDSEventSubscription' containing required fields as
+-- | arguments.
+rdsEventSubscription
+  :: Val Text -- ^ 'rdsesSnsTopicArn'
+  -> RDSEventSubscription
+rdsEventSubscription snsTopicArnarg =
+  RDSEventSubscription
+  { _rDSEventSubscriptionEnabled = Nothing
+  , _rDSEventSubscriptionEventCategories = Nothing
+  , _rDSEventSubscriptionSnsTopicArn = snsTopicArnarg
+  , _rDSEventSubscriptionSourceIds = Nothing
+  , _rDSEventSubscriptionSourceType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-eventsubscription.html#cfn-rds-eventsubscription-enabled
+rdsesEnabled :: Lens' RDSEventSubscription (Maybe (Val Bool'))
+rdsesEnabled = lens _rDSEventSubscriptionEnabled (\s a -> s { _rDSEventSubscriptionEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-eventsubscription.html#cfn-rds-eventsubscription-eventcategories
+rdsesEventCategories :: Lens' RDSEventSubscription (Maybe [Val Text])
+rdsesEventCategories = lens _rDSEventSubscriptionEventCategories (\s a -> s { _rDSEventSubscriptionEventCategories = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-eventsubscription.html#cfn-rds-eventsubscription-snstopicarn
+rdsesSnsTopicArn :: Lens' RDSEventSubscription (Val Text)
+rdsesSnsTopicArn = lens _rDSEventSubscriptionSnsTopicArn (\s a -> s { _rDSEventSubscriptionSnsTopicArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-eventsubscription.html#cfn-rds-eventsubscription-sourceids
+rdsesSourceIds :: Lens' RDSEventSubscription (Maybe [Val Text])
+rdsesSourceIds = lens _rDSEventSubscriptionSourceIds (\s a -> s { _rDSEventSubscriptionSourceIds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-eventsubscription.html#cfn-rds-eventsubscription-sourcetype
+rdsesSourceType :: Lens' RDSEventSubscription (Maybe (Val Text))
+rdsesSourceType = lens _rDSEventSubscriptionSourceType (\s a -> s { _rDSEventSubscriptionSourceType = a })
diff --git a/library-gen/Stratosphere/Resources/RDSOptionGroup.hs b/library-gen/Stratosphere/Resources/RDSOptionGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/RDSOptionGroup.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-optiongroup.html
+
+module Stratosphere.Resources.RDSOptionGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.RDSOptionGroupOptionConfiguration
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for RDSOptionGroup. See 'rdsOptionGroup' for a
+-- | more convenient constructor.
+data RDSOptionGroup =
+  RDSOptionGroup
+  { _rDSOptionGroupEngineName :: Val Text
+  , _rDSOptionGroupMajorEngineVersion :: Val Text
+  , _rDSOptionGroupOptionConfigurations :: [RDSOptionGroupOptionConfiguration]
+  , _rDSOptionGroupOptionGroupDescription :: Val Text
+  , _rDSOptionGroupTags :: Maybe [Tag]
+  } deriving (Show, Generic)
+
+instance ToJSON RDSOptionGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+instance FromJSON RDSOptionGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+-- | Constructor for 'RDSOptionGroup' containing required fields as arguments.
+rdsOptionGroup
+  :: Val Text -- ^ 'rdsogEngineName'
+  -> Val Text -- ^ 'rdsogMajorEngineVersion'
+  -> [RDSOptionGroupOptionConfiguration] -- ^ 'rdsogOptionConfigurations'
+  -> Val Text -- ^ 'rdsogOptionGroupDescription'
+  -> RDSOptionGroup
+rdsOptionGroup engineNamearg majorEngineVersionarg optionConfigurationsarg optionGroupDescriptionarg =
+  RDSOptionGroup
+  { _rDSOptionGroupEngineName = engineNamearg
+  , _rDSOptionGroupMajorEngineVersion = majorEngineVersionarg
+  , _rDSOptionGroupOptionConfigurations = optionConfigurationsarg
+  , _rDSOptionGroupOptionGroupDescription = optionGroupDescriptionarg
+  , _rDSOptionGroupTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-optiongroup.html#cfn-rds-optiongroup-enginename
+rdsogEngineName :: Lens' RDSOptionGroup (Val Text)
+rdsogEngineName = lens _rDSOptionGroupEngineName (\s a -> s { _rDSOptionGroupEngineName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-optiongroup.html#cfn-rds-optiongroup-majorengineversion
+rdsogMajorEngineVersion :: Lens' RDSOptionGroup (Val Text)
+rdsogMajorEngineVersion = lens _rDSOptionGroupMajorEngineVersion (\s a -> s { _rDSOptionGroupMajorEngineVersion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-optiongroup.html#cfn-rds-optiongroup-optionconfigurations
+rdsogOptionConfigurations :: Lens' RDSOptionGroup [RDSOptionGroupOptionConfiguration]
+rdsogOptionConfigurations = lens _rDSOptionGroupOptionConfigurations (\s a -> s { _rDSOptionGroupOptionConfigurations = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-optiongroup.html#cfn-rds-optiongroup-optiongroupdescription
+rdsogOptionGroupDescription :: Lens' RDSOptionGroup (Val Text)
+rdsogOptionGroupDescription = lens _rDSOptionGroupOptionGroupDescription (\s a -> s { _rDSOptionGroupOptionGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-optiongroup.html#cfn-rds-optiongroup-tags
+rdsogTags :: Lens' RDSOptionGroup (Maybe [Tag])
+rdsogTags = lens _rDSOptionGroupTags (\s a -> s { _rDSOptionGroupTags = a })
diff --git a/library-gen/Stratosphere/Resources/RecordSet.hs b/library-gen/Stratosphere/Resources/RecordSet.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/RecordSet.hs
+++ /dev/null
@@ -1,182 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::Route53::RecordSet type can be used as a standalone resource or
--- as an embedded property in the AWS::Route53::RecordSetGroup type. Note that
--- some AWS::Route53::RecordSet properties are valid only when used within
--- AWS::Route53::RecordSetGroup. For more information about constraints and
--- values for each property, see POST CreateHostedZone for hosted zones and
--- POST ChangeResourceRecordSet for resource record sets.
-
-module Stratosphere.Resources.RecordSet where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.AliasTarget
-import Stratosphere.ResourceProperties.RecordSetGeoLocation
-
--- | Full data type definition for RecordSet. See 'recordSet' for a more
--- convenient constructor.
-data RecordSet =
-  RecordSet
-  { _recordSetAliasTarget :: Maybe AliasTarget
-  , _recordSetComment :: Maybe (Val Text)
-  , _recordSetFailover :: Maybe (Val Text)
-  , _recordSetGeoLocation :: Maybe [RecordSetGeoLocation]
-  , _recordSetHealthCheckId :: Maybe (Val Text)
-  , _recordSetHostedZoneId :: Maybe (Val Text)
-  , _recordSetHostedZoneName :: Maybe (Val Text)
-  , _recordSetName :: Val Text
-  , _recordSetRegion :: Maybe (Val Text)
-  , _recordSetResourceRecords :: Maybe [Val Text]
-  , _recordSetSetIdentifier :: Maybe (Val Text)
-  , _recordSetTTL :: Maybe (Val Text)
-  , _recordSetType :: Val Text
-  , _recordSetWeight :: Maybe (Val Integer')
-  } deriving (Show, Generic)
-
-instance ToJSON RecordSet where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
-
-instance FromJSON RecordSet where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
-
--- | Constructor for 'RecordSet' containing required fields as arguments.
-recordSet
-  :: Val Text -- ^ 'rsName'
-  -> Val Text -- ^ 'rsType'
-  -> RecordSet
-recordSet namearg typearg =
-  RecordSet
-  { _recordSetAliasTarget = Nothing
-  , _recordSetComment = Nothing
-  , _recordSetFailover = Nothing
-  , _recordSetGeoLocation = Nothing
-  , _recordSetHealthCheckId = Nothing
-  , _recordSetHostedZoneId = Nothing
-  , _recordSetHostedZoneName = Nothing
-  , _recordSetName = namearg
-  , _recordSetRegion = Nothing
-  , _recordSetResourceRecords = Nothing
-  , _recordSetSetIdentifier = Nothing
-  , _recordSetTTL = Nothing
-  , _recordSetType = typearg
-  , _recordSetWeight = Nothing
-  }
-
--- | Alias resource record sets only: Information about the domain to which
--- you are redirecting traffic. If you specify this property, do not specify
--- the TTL property. The alias uses a TTL value from the alias target record.
--- For more information about alias resource record sets, see Creating Alias
--- Resource Record Sets in the Amazon Route 53 Developer Guide and POST
--- ChangeResourceRecordSets in the Amazon Route 53 API reference.
-rsAliasTarget :: Lens' RecordSet (Maybe AliasTarget)
-rsAliasTarget = lens _recordSetAliasTarget (\s a -> s { _recordSetAliasTarget = a })
-
--- | Any comments that you want to include about the hosted zone. Important If
--- the record set is part of a record set group, this property isn't valid.
--- Don't specify this property.
-rsComment :: Lens' RecordSet (Maybe (Val Text))
-rsComment = lens _recordSetComment (\s a -> s { _recordSetComment = a })
-
--- | Designates the record set as a PRIMARY or SECONDARY failover record set.
--- When you have more than one resource performing the same function, you can
--- configure Amazon Route 53 to check the health of your resources and use
--- only health resources to respond to DNS queries. You cannot create
--- nonfailover resource record sets that have the same Name and Type property
--- values as failover resource record sets. For more information, see the
--- Failover element in the Amazon Route 53 API Reference. If you specify this
--- property, you must specify the SetIdentifier property.
-rsFailover :: Lens' RecordSet (Maybe (Val Text))
-rsFailover = lens _recordSetFailover (\s a -> s { _recordSetFailover = a })
-
--- | Describes how Amazon Route 53 responds to DNS queries based on the
--- geographic origin of the query.
-rsGeoLocation :: Lens' RecordSet (Maybe [RecordSetGeoLocation])
-rsGeoLocation = lens _recordSetGeoLocation (\s a -> s { _recordSetGeoLocation = a })
-
--- | The health check ID that you want to apply to this record set. Amazon
--- Route 53 returns this resource record set in response to a DNS query only
--- while record set is healthy.
-rsHealthCheckId :: Lens' RecordSet (Maybe (Val Text))
-rsHealthCheckId = lens _recordSetHealthCheckId (\s a -> s { _recordSetHealthCheckId = a })
-
--- | The ID of the hosted zone.
-rsHostedZoneId :: Lens' RecordSet (Maybe (Val Text))
-rsHostedZoneId = lens _recordSetHostedZoneId (\s a -> s { _recordSetHostedZoneId = a })
-
--- | The name of the domain for the hosted zone where you want to add the
--- record set. When you create a stack using an AWS::Route53::RecordSet that
--- specifies HostedZoneName, AWS CloudFormation attempts to find a hosted zone
--- whose name matches the HostedZoneName. If AWS CloudFormation cannot find a
--- hosted zone with a matching domain name, or if there is more than one
--- hosted zone with the specified domain name, AWS CloudFormation will not
--- create the stack. If you have multiple hosted zones with the same domain
--- name, you must explicitly specify the hosted zone using HostedZoneId.
-rsHostedZoneName :: Lens' RecordSet (Maybe (Val Text))
-rsHostedZoneName = lens _recordSetHostedZoneName (\s a -> s { _recordSetHostedZoneName = a })
-
--- | The name of the domain. You must specify a fully qualified domain name
--- that ends with a period as the last label indication. If you omit the final
--- period, AWS CloudFormation adds it.
-rsName :: Lens' RecordSet (Val Text)
-rsName = lens _recordSetName (\s a -> s { _recordSetName = a })
-
--- | Latency resource record sets only: The Amazon EC2 region where the
--- resource that is specified in this resource record set resides. The
--- resource typically is an AWS resource, for example, Amazon EC2 instance or
--- an Elastic Load Balancing load balancer, and is referred to by an IP
--- address or a DNS domain name, depending on the record type. When Amazon
--- Route 53 receives a DNS query for a domain name and type for which you have
--- created latency resource record sets, Amazon Route 53 selects the latency
--- resource record set that has the lowest latency between the end user and
--- the associated Amazon EC2 region. Amazon Route 53 then returns the value
--- that is associated with the selected resource record set. The following
--- restrictions must be followed: You can only specify one resource record per
--- latency resource record set. You can only create one latency resource
--- record set for each Amazon EC2 region. You are not required to create
--- latency resource record sets for all Amazon EC2 regions. Amazon Route 53
--- will choose the region with the best latency from among the regions for
--- which you create latency resource record sets. You cannot create both
--- weighted and latency resource record sets that have the same values for the
--- Name and Type elements. To see a list of regions by service, see Regions
--- and Endpoints in the AWS General Reference.
-rsRegion :: Lens' RecordSet (Maybe (Val Text))
-rsRegion = lens _recordSetRegion (\s a -> s { _recordSetRegion = a })
-
--- | List of resource records to add. Each record should be in the format
--- appropriate for the record type specified by the Type property. For
--- information about different record types and their record formats, see
--- Appendix: Domain Name Format in the Amazon Route 53 Developer Guide.
-rsResourceRecords :: Lens' RecordSet (Maybe [Val Text])
-rsResourceRecords = lens _recordSetResourceRecords (\s a -> s { _recordSetResourceRecords = a })
-
--- | A unique identifier that differentiates among multiple resource record
--- sets that have the same combination of DNS name and type.
-rsSetIdentifier :: Lens' RecordSet (Maybe (Val Text))
-rsSetIdentifier = lens _recordSetSetIdentifier (\s a -> s { _recordSetSetIdentifier = a })
-
--- | The resource record cache time to live (TTL), in seconds. If you specify
--- this property, do not specify the AliasTarget property. For alias target
--- records, the alias uses a TTL value from the target. If you specify this
--- property, you must specify the ResourceRecords property.
-rsTTL :: Lens' RecordSet (Maybe (Val Text))
-rsTTL = lens _recordSetTTL (\s a -> s { _recordSetTTL = a })
-
--- | The type of records to add.
-rsType :: Lens' RecordSet (Val Text)
-rsType = lens _recordSetType (\s a -> s { _recordSetType = a })
-
--- | Weighted resource record sets only: Among resource record sets that have
--- the same combination of DNS name and type, a value that determines what
--- portion of traffic for the current resource record set is routed to the
--- associated location. For more information about weighted resource record
--- sets, see Setting Up Weighted Resource Record Sets in the Amazon Route 53
--- Developer Guide.
-rsWeight :: Lens' RecordSet (Maybe (Val Integer'))
-rsWeight = lens _recordSetWeight (\s a -> s { _recordSetWeight = a })
diff --git a/library-gen/Stratosphere/Resources/RecordSetGroup.hs b/library-gen/Stratosphere/Resources/RecordSetGroup.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/RecordSetGroup.hs
+++ /dev/null
@@ -1,69 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::Route53::RecordSetGroup resource creates record sets for a
--- hosted zone. For more information about constraints and values for each
--- property, see POST CreateHostedZone for hosted zones and POST
--- ChangeResourceRecordSet for resource record sets.
-
-module Stratosphere.Resources.RecordSetGroup where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.Resources.RecordSet
-
--- | Full data type definition for RecordSetGroup. See 'recordSetGroup' for a
--- more convenient constructor.
-data RecordSetGroup =
-  RecordSetGroup
-  { _recordSetGroupComment :: Maybe (Val Text)
-  , _recordSetGroupHostedZoneId :: Maybe (Val Text)
-  , _recordSetGroupHostedZoneName :: Maybe (Val Text)
-  , _recordSetGroupRecordSets :: [RecordSet]
-  } deriving (Show, Generic)
-
-instance ToJSON RecordSetGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
-
-instance FromJSON RecordSetGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
-
--- | Constructor for 'RecordSetGroup' containing required fields as arguments.
-recordSetGroup
-  :: [RecordSet] -- ^ 'rsgRecordSets'
-  -> RecordSetGroup
-recordSetGroup recordSetsarg =
-  RecordSetGroup
-  { _recordSetGroupComment = Nothing
-  , _recordSetGroupHostedZoneId = Nothing
-  , _recordSetGroupHostedZoneName = Nothing
-  , _recordSetGroupRecordSets = recordSetsarg
-  }
-
--- | Any comments you want to include about the hosted zone.
-rsgComment :: Lens' RecordSetGroup (Maybe (Val Text))
-rsgComment = lens _recordSetGroupComment (\s a -> s { _recordSetGroupComment = a })
-
--- | The ID of the hosted zone.
-rsgHostedZoneId :: Lens' RecordSetGroup (Maybe (Val Text))
-rsgHostedZoneId = lens _recordSetGroupHostedZoneId (\s a -> s { _recordSetGroupHostedZoneId = a })
-
--- | The name of the domain for the hosted zone where you want to add the
--- record set. When you create a stack using an AWS::Route53::RecordSet that
--- specifies HostedZoneName, AWS CloudFormation attempts to find a hosted zone
--- whose name matches the HostedZoneName. If AWS CloudFormation cannot find a
--- hosted zone with a matching domain name, or if there is more than one
--- hosted zone with the specified domain name, AWS CloudFormation will not
--- create the stack. If you have multiple hosted zones with the same domain
--- name, you must explicitly specify the hosted zone using HostedZoneId.
-rsgHostedZoneName :: Lens' RecordSetGroup (Maybe (Val Text))
-rsgHostedZoneName = lens _recordSetGroupHostedZoneName (\s a -> s { _recordSetGroupHostedZoneName = a })
-
--- | List of resource record sets to add.
-rsgRecordSets :: Lens' RecordSetGroup [RecordSet]
-rsgRecordSets = lens _recordSetGroupRecordSets (\s a -> s { _recordSetGroupRecordSets = a })
diff --git a/library-gen/Stratosphere/Resources/RedshiftCluster.hs b/library-gen/Stratosphere/Resources/RedshiftCluster.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/RedshiftCluster.hs
@@ -0,0 +1,184 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html
+
+module Stratosphere.Resources.RedshiftCluster where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for RedshiftCluster. See 'redshiftCluster' for
+-- | a more convenient constructor.
+data RedshiftCluster =
+  RedshiftCluster
+  { _redshiftClusterAllowVersionUpdate :: Maybe (Val Bool')
+  , _redshiftClusterAutomatedSnapshotRetentionPeriod :: Maybe (Val Integer')
+  , _redshiftClusterAvailabilityZone :: Maybe (Val Text)
+  , _redshiftClusterClusterParameterGroupName :: Maybe (Val Integer')
+  , _redshiftClusterClusterSecurityGroups :: Maybe [Val Text]
+  , _redshiftClusterClusterSubnetGroupName :: Maybe (Val Text)
+  , _redshiftClusterClusterType :: Val Text
+  , _redshiftClusterClusterVersion :: Maybe (Val Text)
+  , _redshiftClusterDBName :: Val Text
+  , _redshiftClusterElasticIp :: Maybe (Val Text)
+  , _redshiftClusterEncrypted :: Maybe (Val Bool')
+  , _redshiftClusterHsmClientCertificateIdentifier :: Maybe (Val Text)
+  , _redshiftClusterKmsKeyId :: Maybe (Val Text)
+  , _redshiftClusterMasterUserPassword :: Val Text
+  , _redshiftClusterMasterUsername :: Val Text
+  , _redshiftClusterNodeType :: Val Text
+  , _redshiftClusterNumberOfNodes :: Maybe (Val Integer')
+  , _redshiftClusterOwnerAccount :: Maybe (Val Text)
+  , _redshiftClusterPort :: Maybe (Val Integer')
+  , _redshiftClusterPreferredMaintenanceWindow :: Maybe (Val Text)
+  , _redshiftClusterPubliclyAccessible :: Maybe (Val Bool')
+  , _redshiftClusterSnapshotClusterIdentifier :: Maybe (Val Text)
+  , _redshiftClusterSnapshotIdentifier :: Maybe (Val Text)
+  , _redshiftClusterVpcSecurityGroupIds :: Maybe [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON RedshiftCluster where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+
+instance FromJSON RedshiftCluster where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+
+-- | Constructor for 'RedshiftCluster' containing required fields as
+-- | arguments.
+redshiftCluster
+  :: Val Text -- ^ 'rcClusterType'
+  -> Val Text -- ^ 'rcDBName'
+  -> Val Text -- ^ 'rcMasterUserPassword'
+  -> Val Text -- ^ 'rcMasterUsername'
+  -> Val Text -- ^ 'rcNodeType'
+  -> RedshiftCluster
+redshiftCluster clusterTypearg dBNamearg masterUserPasswordarg masterUsernamearg nodeTypearg =
+  RedshiftCluster
+  { _redshiftClusterAllowVersionUpdate = Nothing
+  , _redshiftClusterAutomatedSnapshotRetentionPeriod = Nothing
+  , _redshiftClusterAvailabilityZone = Nothing
+  , _redshiftClusterClusterParameterGroupName = Nothing
+  , _redshiftClusterClusterSecurityGroups = Nothing
+  , _redshiftClusterClusterSubnetGroupName = Nothing
+  , _redshiftClusterClusterType = clusterTypearg
+  , _redshiftClusterClusterVersion = Nothing
+  , _redshiftClusterDBName = dBNamearg
+  , _redshiftClusterElasticIp = Nothing
+  , _redshiftClusterEncrypted = Nothing
+  , _redshiftClusterHsmClientCertificateIdentifier = Nothing
+  , _redshiftClusterKmsKeyId = Nothing
+  , _redshiftClusterMasterUserPassword = masterUserPasswordarg
+  , _redshiftClusterMasterUsername = masterUsernamearg
+  , _redshiftClusterNodeType = nodeTypearg
+  , _redshiftClusterNumberOfNodes = Nothing
+  , _redshiftClusterOwnerAccount = Nothing
+  , _redshiftClusterPort = Nothing
+  , _redshiftClusterPreferredMaintenanceWindow = Nothing
+  , _redshiftClusterPubliclyAccessible = Nothing
+  , _redshiftClusterSnapshotClusterIdentifier = Nothing
+  , _redshiftClusterSnapshotIdentifier = Nothing
+  , _redshiftClusterVpcSecurityGroupIds = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-allowversionupgrade
+rcAllowVersionUpdate :: Lens' RedshiftCluster (Maybe (Val Bool'))
+rcAllowVersionUpdate = lens _redshiftClusterAllowVersionUpdate (\s a -> s { _redshiftClusterAllowVersionUpdate = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-automatedsnapshotretentionperiod
+rcAutomatedSnapshotRetentionPeriod :: Lens' RedshiftCluster (Maybe (Val Integer'))
+rcAutomatedSnapshotRetentionPeriod = lens _redshiftClusterAutomatedSnapshotRetentionPeriod (\s a -> s { _redshiftClusterAutomatedSnapshotRetentionPeriod = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-availabilityzone
+rcAvailabilityZone :: Lens' RedshiftCluster (Maybe (Val Text))
+rcAvailabilityZone = lens _redshiftClusterAvailabilityZone (\s a -> s { _redshiftClusterAvailabilityZone = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-clusterparametergroupname
+rcClusterParameterGroupName :: Lens' RedshiftCluster (Maybe (Val Integer'))
+rcClusterParameterGroupName = lens _redshiftClusterClusterParameterGroupName (\s a -> s { _redshiftClusterClusterParameterGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-clustersecuritygroups
+rcClusterSecurityGroups :: Lens' RedshiftCluster (Maybe [Val Text])
+rcClusterSecurityGroups = lens _redshiftClusterClusterSecurityGroups (\s a -> s { _redshiftClusterClusterSecurityGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-clustersubnetgroupname
+rcClusterSubnetGroupName :: Lens' RedshiftCluster (Maybe (Val Text))
+rcClusterSubnetGroupName = lens _redshiftClusterClusterSubnetGroupName (\s a -> s { _redshiftClusterClusterSubnetGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-clustertype
+rcClusterType :: Lens' RedshiftCluster (Val Text)
+rcClusterType = lens _redshiftClusterClusterType (\s a -> s { _redshiftClusterClusterType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-clusterversion
+rcClusterVersion :: Lens' RedshiftCluster (Maybe (Val Text))
+rcClusterVersion = lens _redshiftClusterClusterVersion (\s a -> s { _redshiftClusterClusterVersion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-dbname
+rcDBName :: Lens' RedshiftCluster (Val Text)
+rcDBName = lens _redshiftClusterDBName (\s a -> s { _redshiftClusterDBName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-elasticip
+rcElasticIp :: Lens' RedshiftCluster (Maybe (Val Text))
+rcElasticIp = lens _redshiftClusterElasticIp (\s a -> s { _redshiftClusterElasticIp = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-encrypted
+rcEncrypted :: Lens' RedshiftCluster (Maybe (Val Bool'))
+rcEncrypted = lens _redshiftClusterEncrypted (\s a -> s { _redshiftClusterEncrypted = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-hsmclientcertidentifier
+rcHsmClientCertificateIdentifier :: Lens' RedshiftCluster (Maybe (Val Text))
+rcHsmClientCertificateIdentifier = lens _redshiftClusterHsmClientCertificateIdentifier (\s a -> s { _redshiftClusterHsmClientCertificateIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-kmskeyid
+rcKmsKeyId :: Lens' RedshiftCluster (Maybe (Val Text))
+rcKmsKeyId = lens _redshiftClusterKmsKeyId (\s a -> s { _redshiftClusterKmsKeyId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-masteruserpassword
+rcMasterUserPassword :: Lens' RedshiftCluster (Val Text)
+rcMasterUserPassword = lens _redshiftClusterMasterUserPassword (\s a -> s { _redshiftClusterMasterUserPassword = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-masterusername
+rcMasterUsername :: Lens' RedshiftCluster (Val Text)
+rcMasterUsername = lens _redshiftClusterMasterUsername (\s a -> s { _redshiftClusterMasterUsername = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-nodetype
+rcNodeType :: Lens' RedshiftCluster (Val Text)
+rcNodeType = lens _redshiftClusterNodeType (\s a -> s { _redshiftClusterNodeType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-nodetype
+rcNumberOfNodes :: Lens' RedshiftCluster (Maybe (Val Integer'))
+rcNumberOfNodes = lens _redshiftClusterNumberOfNodes (\s a -> s { _redshiftClusterNumberOfNodes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-owneraccount
+rcOwnerAccount :: Lens' RedshiftCluster (Maybe (Val Text))
+rcOwnerAccount = lens _redshiftClusterOwnerAccount (\s a -> s { _redshiftClusterOwnerAccount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-port
+rcPort :: Lens' RedshiftCluster (Maybe (Val Integer'))
+rcPort = lens _redshiftClusterPort (\s a -> s { _redshiftClusterPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-preferredmaintenancewindow
+rcPreferredMaintenanceWindow :: Lens' RedshiftCluster (Maybe (Val Text))
+rcPreferredMaintenanceWindow = lens _redshiftClusterPreferredMaintenanceWindow (\s a -> s { _redshiftClusterPreferredMaintenanceWindow = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-publiclyaccessible
+rcPubliclyAccessible :: Lens' RedshiftCluster (Maybe (Val Bool'))
+rcPubliclyAccessible = lens _redshiftClusterPubliclyAccessible (\s a -> s { _redshiftClusterPubliclyAccessible = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-snapshotclusteridentifier
+rcSnapshotClusterIdentifier :: Lens' RedshiftCluster (Maybe (Val Text))
+rcSnapshotClusterIdentifier = lens _redshiftClusterSnapshotClusterIdentifier (\s a -> s { _redshiftClusterSnapshotClusterIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-snapshotidentifier
+rcSnapshotIdentifier :: Lens' RedshiftCluster (Maybe (Val Text))
+rcSnapshotIdentifier = lens _redshiftClusterSnapshotIdentifier (\s a -> s { _redshiftClusterSnapshotIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-vpcsecuritygroupids
+rcVpcSecurityGroupIds :: Lens' RedshiftCluster (Maybe [Val Text])
+rcVpcSecurityGroupIds = lens _redshiftClusterVpcSecurityGroupIds (\s a -> s { _redshiftClusterVpcSecurityGroupIds = a })
diff --git a/library-gen/Stratosphere/Resources/RedshiftClusterParameterGroup.hs b/library-gen/Stratosphere/Resources/RedshiftClusterParameterGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/RedshiftClusterParameterGroup.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clusterparametergroup.html
+
+module Stratosphere.Resources.RedshiftClusterParameterGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.RedshiftClusterParameterGroupParameter
+
+-- | Full data type definition for RedshiftClusterParameterGroup. See
+-- | 'redshiftClusterParameterGroup' for a more convenient constructor.
+data RedshiftClusterParameterGroup =
+  RedshiftClusterParameterGroup
+  { _redshiftClusterParameterGroupDescription :: Val Text
+  , _redshiftClusterParameterGroupParameterGroupFamily :: Val Text
+  , _redshiftClusterParameterGroupParameters :: Maybe [RedshiftClusterParameterGroupParameter]
+  } deriving (Show, Generic)
+
+instance ToJSON RedshiftClusterParameterGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+instance FromJSON RedshiftClusterParameterGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }
+
+-- | Constructor for 'RedshiftClusterParameterGroup' containing required
+-- | fields as arguments.
+redshiftClusterParameterGroup
+  :: Val Text -- ^ 'rcpgDescription'
+  -> Val Text -- ^ 'rcpgParameterGroupFamily'
+  -> RedshiftClusterParameterGroup
+redshiftClusterParameterGroup descriptionarg parameterGroupFamilyarg =
+  RedshiftClusterParameterGroup
+  { _redshiftClusterParameterGroupDescription = descriptionarg
+  , _redshiftClusterParameterGroupParameterGroupFamily = parameterGroupFamilyarg
+  , _redshiftClusterParameterGroupParameters = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clusterparametergroup.html#cfn-redshift-clusterparametergroup-description
+rcpgDescription :: Lens' RedshiftClusterParameterGroup (Val Text)
+rcpgDescription = lens _redshiftClusterParameterGroupDescription (\s a -> s { _redshiftClusterParameterGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clusterparametergroup.html#cfn-redshift-clusterparametergroup-parametergroupfamily
+rcpgParameterGroupFamily :: Lens' RedshiftClusterParameterGroup (Val Text)
+rcpgParameterGroupFamily = lens _redshiftClusterParameterGroupParameterGroupFamily (\s a -> s { _redshiftClusterParameterGroupParameterGroupFamily = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clusterparametergroup.html#cfn-redshift-clusterparametergroup-parameters
+rcpgParameters :: Lens' RedshiftClusterParameterGroup (Maybe [RedshiftClusterParameterGroupParameter])
+rcpgParameters = lens _redshiftClusterParameterGroupParameters (\s a -> s { _redshiftClusterParameterGroupParameters = a })
diff --git a/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroup.hs b/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroup.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersecuritygroup.html
+
+module Stratosphere.Resources.RedshiftClusterSecurityGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for RedshiftClusterSecurityGroup. See
+-- | 'redshiftClusterSecurityGroup' for a more convenient constructor.
+data RedshiftClusterSecurityGroup =
+  RedshiftClusterSecurityGroup
+  { _redshiftClusterSecurityGroupDescription :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON RedshiftClusterSecurityGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+instance FromJSON RedshiftClusterSecurityGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }
+
+-- | Constructor for 'RedshiftClusterSecurityGroup' containing required fields
+-- | as arguments.
+redshiftClusterSecurityGroup
+  :: Val Text -- ^ 'rcsegDescription'
+  -> RedshiftClusterSecurityGroup
+redshiftClusterSecurityGroup descriptionarg =
+  RedshiftClusterSecurityGroup
+  { _redshiftClusterSecurityGroupDescription = descriptionarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersecuritygroup.html#cfn-redshift-clustersecuritygroup-description
+rcsegDescription :: Lens' RedshiftClusterSecurityGroup (Val Text)
+rcsegDescription = lens _redshiftClusterSecurityGroupDescription (\s a -> s { _redshiftClusterSecurityGroupDescription = a })
diff --git a/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroupIngress.hs b/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroupIngress.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroupIngress.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersecuritygroupingress.html
+
+module Stratosphere.Resources.RedshiftClusterSecurityGroupIngress where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for RedshiftClusterSecurityGroupIngress. See
+-- | 'redshiftClusterSecurityGroupIngress' for a more convenient constructor.
+data RedshiftClusterSecurityGroupIngress =
+  RedshiftClusterSecurityGroupIngress
+  { _redshiftClusterSecurityGroupIngressCIDRIP :: Maybe (Val Text)
+  , _redshiftClusterSecurityGroupIngressClusterSecurityGroupName :: Val Text
+  , _redshiftClusterSecurityGroupIngressEC2SecurityGroupName :: Maybe (Val Text)
+  , _redshiftClusterSecurityGroupIngressEC2SecurityGroupOwnerId :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON RedshiftClusterSecurityGroupIngress where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+instance FromJSON RedshiftClusterSecurityGroupIngress where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 36, omitNothingFields = True }
+
+-- | Constructor for 'RedshiftClusterSecurityGroupIngress' containing required
+-- | fields as arguments.
+redshiftClusterSecurityGroupIngress
+  :: Val Text -- ^ 'rcsgiClusterSecurityGroupName'
+  -> RedshiftClusterSecurityGroupIngress
+redshiftClusterSecurityGroupIngress clusterSecurityGroupNamearg =
+  RedshiftClusterSecurityGroupIngress
+  { _redshiftClusterSecurityGroupIngressCIDRIP = Nothing
+  , _redshiftClusterSecurityGroupIngressClusterSecurityGroupName = clusterSecurityGroupNamearg
+  , _redshiftClusterSecurityGroupIngressEC2SecurityGroupName = Nothing
+  , _redshiftClusterSecurityGroupIngressEC2SecurityGroupOwnerId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersecuritygroupingress.html#cfn-redshift-clustersecuritygroupingress-cidrip
+rcsgiCIDRIP :: Lens' RedshiftClusterSecurityGroupIngress (Maybe (Val Text))
+rcsgiCIDRIP = lens _redshiftClusterSecurityGroupIngressCIDRIP (\s a -> s { _redshiftClusterSecurityGroupIngressCIDRIP = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersecuritygroupingress.html#cfn-redshift-clustersecuritygroupingress-clustersecuritygroupname
+rcsgiClusterSecurityGroupName :: Lens' RedshiftClusterSecurityGroupIngress (Val Text)
+rcsgiClusterSecurityGroupName = lens _redshiftClusterSecurityGroupIngressClusterSecurityGroupName (\s a -> s { _redshiftClusterSecurityGroupIngressClusterSecurityGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersecuritygroupingress.html#cfn-redshift-clustersecuritygroupingress-ec2securitygroupname
+rcsgiEC2SecurityGroupName :: Lens' RedshiftClusterSecurityGroupIngress (Maybe (Val Text))
+rcsgiEC2SecurityGroupName = lens _redshiftClusterSecurityGroupIngressEC2SecurityGroupName (\s a -> s { _redshiftClusterSecurityGroupIngressEC2SecurityGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersecuritygroupingress.html#cfn-redshift-clustersecuritygroupingress-ec2securitygroupownerid
+rcsgiEC2SecurityGroupOwnerId :: Lens' RedshiftClusterSecurityGroupIngress (Maybe (Val Text))
+rcsgiEC2SecurityGroupOwnerId = lens _redshiftClusterSecurityGroupIngressEC2SecurityGroupOwnerId (\s a -> s { _redshiftClusterSecurityGroupIngressEC2SecurityGroupOwnerId = a })
diff --git a/library-gen/Stratosphere/Resources/RedshiftClusterSubnetGroup.hs b/library-gen/Stratosphere/Resources/RedshiftClusterSubnetGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/RedshiftClusterSubnetGroup.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersubnetgroup.html
+
+module Stratosphere.Resources.RedshiftClusterSubnetGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for RedshiftClusterSubnetGroup. See
+-- | 'redshiftClusterSubnetGroup' for a more convenient constructor.
+data RedshiftClusterSubnetGroup =
+  RedshiftClusterSubnetGroup
+  { _redshiftClusterSubnetGroupDescription :: Val Text
+  , _redshiftClusterSubnetGroupSubnetIds :: [Val Text]
+  } deriving (Show, Generic)
+
+instance ToJSON RedshiftClusterSubnetGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON RedshiftClusterSubnetGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'RedshiftClusterSubnetGroup' containing required fields
+-- | as arguments.
+redshiftClusterSubnetGroup
+  :: Val Text -- ^ 'rcsugDescription'
+  -> [Val Text] -- ^ 'rcsugSubnetIds'
+  -> RedshiftClusterSubnetGroup
+redshiftClusterSubnetGroup descriptionarg subnetIdsarg =
+  RedshiftClusterSubnetGroup
+  { _redshiftClusterSubnetGroupDescription = descriptionarg
+  , _redshiftClusterSubnetGroupSubnetIds = subnetIdsarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersubnetgroup.html#cfn-redshift-clustersubnetgroup-description
+rcsugDescription :: Lens' RedshiftClusterSubnetGroup (Val Text)
+rcsugDescription = lens _redshiftClusterSubnetGroupDescription (\s a -> s { _redshiftClusterSubnetGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersubnetgroup.html#cfn-redshift-clustersubnetgroup-subnetids
+rcsugSubnetIds :: Lens' RedshiftClusterSubnetGroup [Val Text]
+rcsugSubnetIds = lens _redshiftClusterSubnetGroupSubnetIds (\s a -> s { _redshiftClusterSubnetGroupSubnetIds = a })
diff --git a/library-gen/Stratosphere/Resources/Route.hs b/library-gen/Stratosphere/Resources/Route.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/Route.hs
+++ /dev/null
@@ -1,77 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Creates a new route in a route table within a VPC. The route's target can
--- be either a gateway attached to the VPC or a NAT instance in the VPC.
-
-module Stratosphere.Resources.Route where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for Route. See 'route' for a more convenient
--- constructor.
-data Route =
-  Route
-  { _routeDestinationCidrBlock :: Val Text
-  , _routeGatewayId :: Maybe (Val Text)
-  , _routeInstanceId :: Maybe (Val Text)
-  , _routeNatGatewayId :: Maybe (Val Text)
-  , _routeNetworkInterfaceId :: Maybe (Val Text)
-  , _routeRouteTableId :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON Route where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 6, omitNothingFields = True }
-
-instance FromJSON Route where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 6, omitNothingFields = True }
-
--- | Constructor for 'Route' containing required fields as arguments.
-route
-  :: Val Text -- ^ 'rDestinationCidrBlock'
-  -> Val Text -- ^ 'rRouteTableId'
-  -> Route
-route destinationCidrBlockarg routeTableIdarg =
-  Route
-  { _routeDestinationCidrBlock = destinationCidrBlockarg
-  , _routeGatewayId = Nothing
-  , _routeInstanceId = Nothing
-  , _routeNatGatewayId = Nothing
-  , _routeNetworkInterfaceId = Nothing
-  , _routeRouteTableId = routeTableIdarg
-  }
-
--- | The CIDR address block used for the destination match. For example,
--- 0.0.0.0/0. Routing decisions are based on the most specific match.
-rDestinationCidrBlock :: Lens' Route (Val Text)
-rDestinationCidrBlock = lens _routeDestinationCidrBlock (\s a -> s { _routeDestinationCidrBlock = a })
-
--- | The ID of an Internet gateway or virtual private gateway that is attached
--- to your VPC. For example: igw-eaad4883. For route entries that specify a
--- gateway, you must specify a dependency on the gateway attachment resource.
--- For more information, see DependsOn Attribute.
-rGatewayId :: Lens' Route (Maybe (Val Text))
-rGatewayId = lens _routeGatewayId (\s a -> s { _routeGatewayId = a })
-
--- | The ID of a NAT instance in your VPC. For example, i-1a2b3c4d.
-rInstanceId :: Lens' Route (Maybe (Val Text))
-rInstanceId = lens _routeInstanceId (\s a -> s { _routeInstanceId = a })
-
--- | The ID of a NAT gateway. For example, nat-0a12bc456789de0fg.
-rNatGatewayId :: Lens' Route (Maybe (Val Text))
-rNatGatewayId = lens _routeNatGatewayId (\s a -> s { _routeNatGatewayId = a })
-
--- | Allows the routing of network interface IDs.
-rNetworkInterfaceId :: Lens' Route (Maybe (Val Text))
-rNetworkInterfaceId = lens _routeNetworkInterfaceId (\s a -> s { _routeNetworkInterfaceId = a })
-
--- | The ID of the route table where the route will be added.
-rRouteTableId :: Lens' Route (Val Text)
-rRouteTableId = lens _routeRouteTableId (\s a -> s { _routeRouteTableId = a })
diff --git a/library-gen/Stratosphere/Resources/Route53HealthCheck.hs b/library-gen/Stratosphere/Resources/Route53HealthCheck.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/Route53HealthCheck.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-healthcheck.html
+
+module Stratosphere.Resources.Route53HealthCheck where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Route53HealthCheckHealthCheckConfig
+import Stratosphere.ResourceProperties.Route53HealthCheckHealthCheckTag
+
+-- | Full data type definition for Route53HealthCheck. See
+-- | 'route53HealthCheck' for a more convenient constructor.
+data Route53HealthCheck =
+  Route53HealthCheck
+  { _route53HealthCheckHealthCheckConfig :: Route53HealthCheckHealthCheckConfig
+  , _route53HealthCheckHealthCheckTags :: Maybe [Route53HealthCheckHealthCheckTag]
+  } deriving (Show, Generic)
+
+instance ToJSON Route53HealthCheck where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+instance FromJSON Route53HealthCheck where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 19, omitNothingFields = True }
+
+-- | Constructor for 'Route53HealthCheck' containing required fields as
+-- | arguments.
+route53HealthCheck
+  :: Route53HealthCheckHealthCheckConfig -- ^ 'rhcHealthCheckConfig'
+  -> Route53HealthCheck
+route53HealthCheck healthCheckConfigarg =
+  Route53HealthCheck
+  { _route53HealthCheckHealthCheckConfig = healthCheckConfigarg
+  , _route53HealthCheckHealthCheckTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-healthcheck.html#cfn-route53-healthcheck-healthcheckconfig
+rhcHealthCheckConfig :: Lens' Route53HealthCheck Route53HealthCheckHealthCheckConfig
+rhcHealthCheckConfig = lens _route53HealthCheckHealthCheckConfig (\s a -> s { _route53HealthCheckHealthCheckConfig = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-healthcheck.html#cfn-route53-healthcheck-healthchecktags
+rhcHealthCheckTags :: Lens' Route53HealthCheck (Maybe [Route53HealthCheckHealthCheckTag])
+rhcHealthCheckTags = lens _route53HealthCheckHealthCheckTags (\s a -> s { _route53HealthCheckHealthCheckTags = a })
diff --git a/library-gen/Stratosphere/Resources/Route53HostedZone.hs b/library-gen/Stratosphere/Resources/Route53HostedZone.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/Route53HostedZone.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-hostedzone.html
+
+module Stratosphere.Resources.Route53HostedZone where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Route53HostedZoneHostedZoneConfig
+import Stratosphere.ResourceProperties.Route53HostedZoneHostedZoneTag
+import Stratosphere.ResourceProperties.Route53HostedZoneVPC
+
+-- | Full data type definition for Route53HostedZone. See 'route53HostedZone'
+-- | for a more convenient constructor.
+data Route53HostedZone =
+  Route53HostedZone
+  { _route53HostedZoneHostedZoneConfig :: Maybe Route53HostedZoneHostedZoneConfig
+  , _route53HostedZoneHostedZoneTags :: Maybe [Route53HostedZoneHostedZoneTag]
+  , _route53HostedZoneName :: Val Text
+  , _route53HostedZoneVPCs :: Maybe [Route53HostedZoneVPC]
+  } deriving (Show, Generic)
+
+instance ToJSON Route53HostedZone where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+
+instance FromJSON Route53HostedZone where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }
+
+-- | Constructor for 'Route53HostedZone' containing required fields as
+-- | arguments.
+route53HostedZone
+  :: Val Text -- ^ 'rhzName'
+  -> Route53HostedZone
+route53HostedZone namearg =
+  Route53HostedZone
+  { _route53HostedZoneHostedZoneConfig = Nothing
+  , _route53HostedZoneHostedZoneTags = Nothing
+  , _route53HostedZoneName = namearg
+  , _route53HostedZoneVPCs = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-hostedzone.html#cfn-route53-hostedzone-hostedzoneconfig
+rhzHostedZoneConfig :: Lens' Route53HostedZone (Maybe Route53HostedZoneHostedZoneConfig)
+rhzHostedZoneConfig = lens _route53HostedZoneHostedZoneConfig (\s a -> s { _route53HostedZoneHostedZoneConfig = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-hostedzone.html#cfn-route53-hostedzone-hostedzonetags
+rhzHostedZoneTags :: Lens' Route53HostedZone (Maybe [Route53HostedZoneHostedZoneTag])
+rhzHostedZoneTags = lens _route53HostedZoneHostedZoneTags (\s a -> s { _route53HostedZoneHostedZoneTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-hostedzone.html#cfn-route53-hostedzone-name
+rhzName :: Lens' Route53HostedZone (Val Text)
+rhzName = lens _route53HostedZoneName (\s a -> s { _route53HostedZoneName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-hostedzone.html#cfn-route53-hostedzone-vpcs
+rhzVPCs :: Lens' Route53HostedZone (Maybe [Route53HostedZoneVPC])
+rhzVPCs = lens _route53HostedZoneVPCs (\s a -> s { _route53HostedZoneVPCs = a })
diff --git a/library-gen/Stratosphere/Resources/Route53RecordSet.hs b/library-gen/Stratosphere/Resources/Route53RecordSet.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/Route53RecordSet.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html
+
+module Stratosphere.Resources.Route53RecordSet where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Route53RecordSetAliasTarget
+import Stratosphere.ResourceProperties.Route53RecordSetGeoLocation
+
+-- | Full data type definition for Route53RecordSet. See 'route53RecordSet'
+-- | for a more convenient constructor.
+data Route53RecordSet =
+  Route53RecordSet
+  { _route53RecordSetAliasTarget :: Maybe Route53RecordSetAliasTarget
+  , _route53RecordSetComment :: Maybe (Val Text)
+  , _route53RecordSetFailover :: Maybe (Val Text)
+  , _route53RecordSetGeoLocation :: Maybe Route53RecordSetGeoLocation
+  , _route53RecordSetHealthCheckId :: Maybe (Val Text)
+  , _route53RecordSetHostedZoneId :: Maybe (Val Text)
+  , _route53RecordSetHostedZoneName :: Maybe (Val Text)
+  , _route53RecordSetName :: Val Text
+  , _route53RecordSetRegion :: Maybe (Val Text)
+  , _route53RecordSetResourceRecords :: Maybe [Val Text]
+  , _route53RecordSetSetIdentifier :: Maybe (Val Text)
+  , _route53RecordSetTTL :: Maybe (Val Text)
+  , _route53RecordSetType :: Val Text
+  , _route53RecordSetWeight :: Maybe (Val Integer')
+  } deriving (Show, Generic)
+
+instance ToJSON Route53RecordSet where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+instance FromJSON Route53RecordSet where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
+
+-- | Constructor for 'Route53RecordSet' containing required fields as
+-- | arguments.
+route53RecordSet
+  :: Val Text -- ^ 'rrsName'
+  -> Val Text -- ^ 'rrsType'
+  -> Route53RecordSet
+route53RecordSet namearg typearg =
+  Route53RecordSet
+  { _route53RecordSetAliasTarget = Nothing
+  , _route53RecordSetComment = Nothing
+  , _route53RecordSetFailover = Nothing
+  , _route53RecordSetGeoLocation = Nothing
+  , _route53RecordSetHealthCheckId = Nothing
+  , _route53RecordSetHostedZoneId = Nothing
+  , _route53RecordSetHostedZoneName = Nothing
+  , _route53RecordSetName = namearg
+  , _route53RecordSetRegion = Nothing
+  , _route53RecordSetResourceRecords = Nothing
+  , _route53RecordSetSetIdentifier = Nothing
+  , _route53RecordSetTTL = Nothing
+  , _route53RecordSetType = typearg
+  , _route53RecordSetWeight = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-aliastarget
+rrsAliasTarget :: Lens' Route53RecordSet (Maybe Route53RecordSetAliasTarget)
+rrsAliasTarget = lens _route53RecordSetAliasTarget (\s a -> s { _route53RecordSetAliasTarget = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-comment
+rrsComment :: Lens' Route53RecordSet (Maybe (Val Text))
+rrsComment = lens _route53RecordSetComment (\s a -> s { _route53RecordSetComment = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-failover
+rrsFailover :: Lens' Route53RecordSet (Maybe (Val Text))
+rrsFailover = lens _route53RecordSetFailover (\s a -> s { _route53RecordSetFailover = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-geolocation
+rrsGeoLocation :: Lens' Route53RecordSet (Maybe Route53RecordSetGeoLocation)
+rrsGeoLocation = lens _route53RecordSetGeoLocation (\s a -> s { _route53RecordSetGeoLocation = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-healthcheckid
+rrsHealthCheckId :: Lens' Route53RecordSet (Maybe (Val Text))
+rrsHealthCheckId = lens _route53RecordSetHealthCheckId (\s a -> s { _route53RecordSetHealthCheckId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-hostedzoneid
+rrsHostedZoneId :: Lens' Route53RecordSet (Maybe (Val Text))
+rrsHostedZoneId = lens _route53RecordSetHostedZoneId (\s a -> s { _route53RecordSetHostedZoneId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-hostedzonename
+rrsHostedZoneName :: Lens' Route53RecordSet (Maybe (Val Text))
+rrsHostedZoneName = lens _route53RecordSetHostedZoneName (\s a -> s { _route53RecordSetHostedZoneName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-name
+rrsName :: Lens' Route53RecordSet (Val Text)
+rrsName = lens _route53RecordSetName (\s a -> s { _route53RecordSetName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-region
+rrsRegion :: Lens' Route53RecordSet (Maybe (Val Text))
+rrsRegion = lens _route53RecordSetRegion (\s a -> s { _route53RecordSetRegion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-resourcerecords
+rrsResourceRecords :: Lens' Route53RecordSet (Maybe [Val Text])
+rrsResourceRecords = lens _route53RecordSetResourceRecords (\s a -> s { _route53RecordSetResourceRecords = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-setidentifier
+rrsSetIdentifier :: Lens' Route53RecordSet (Maybe (Val Text))
+rrsSetIdentifier = lens _route53RecordSetSetIdentifier (\s a -> s { _route53RecordSetSetIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-ttl
+rrsTTL :: Lens' Route53RecordSet (Maybe (Val Text))
+rrsTTL = lens _route53RecordSetTTL (\s a -> s { _route53RecordSetTTL = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-type
+rrsType :: Lens' Route53RecordSet (Val Text)
+rrsType = lens _route53RecordSetType (\s a -> s { _route53RecordSetType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-weight
+rrsWeight :: Lens' Route53RecordSet (Maybe (Val Integer'))
+rrsWeight = lens _route53RecordSetWeight (\s a -> s { _route53RecordSetWeight = a })
diff --git a/library-gen/Stratosphere/Resources/Route53RecordSetGroup.hs b/library-gen/Stratosphere/Resources/Route53RecordSetGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/Route53RecordSetGroup.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordsetgroup.html
+
+module Stratosphere.Resources.Route53RecordSetGroup where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.Route53RecordSetGroupRecordSet
+
+-- | Full data type definition for Route53RecordSetGroup. See
+-- | 'route53RecordSetGroup' for a more convenient constructor.
+data Route53RecordSetGroup =
+  Route53RecordSetGroup
+  { _route53RecordSetGroupComment :: Maybe (Val Text)
+  , _route53RecordSetGroupHostedZoneId :: Maybe (Val Text)
+  , _route53RecordSetGroupHostedZoneName :: Maybe (Val Text)
+  , _route53RecordSetGroupRecordSets :: Maybe [Route53RecordSetGroupRecordSet]
+  } deriving (Show, Generic)
+
+instance ToJSON Route53RecordSetGroup where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+instance FromJSON Route53RecordSetGroup where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 22, omitNothingFields = True }
+
+-- | Constructor for 'Route53RecordSetGroup' containing required fields as
+-- | arguments.
+route53RecordSetGroup
+  :: Route53RecordSetGroup
+route53RecordSetGroup  =
+  Route53RecordSetGroup
+  { _route53RecordSetGroupComment = Nothing
+  , _route53RecordSetGroupHostedZoneId = Nothing
+  , _route53RecordSetGroupHostedZoneName = Nothing
+  , _route53RecordSetGroupRecordSets = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordsetgroup.html#cfn-route53-recordsetgroup-comment
+rrsgComment :: Lens' Route53RecordSetGroup (Maybe (Val Text))
+rrsgComment = lens _route53RecordSetGroupComment (\s a -> s { _route53RecordSetGroupComment = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordsetgroup.html#cfn-route53-recordsetgroup-hostedzoneid
+rrsgHostedZoneId :: Lens' Route53RecordSetGroup (Maybe (Val Text))
+rrsgHostedZoneId = lens _route53RecordSetGroupHostedZoneId (\s a -> s { _route53RecordSetGroupHostedZoneId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordsetgroup.html#cfn-route53-recordsetgroup-hostedzonename
+rrsgHostedZoneName :: Lens' Route53RecordSetGroup (Maybe (Val Text))
+rrsgHostedZoneName = lens _route53RecordSetGroupHostedZoneName (\s a -> s { _route53RecordSetGroupHostedZoneName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordsetgroup.html#cfn-route53-recordsetgroup-recordsets
+rrsgRecordSets :: Lens' Route53RecordSetGroup (Maybe [Route53RecordSetGroupRecordSet])
+rrsgRecordSets = lens _route53RecordSetGroupRecordSets (\s a -> s { _route53RecordSetGroupRecordSets = a })
diff --git a/library-gen/Stratosphere/Resources/RouteTable.hs b/library-gen/Stratosphere/Resources/RouteTable.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/RouteTable.hs
+++ /dev/null
@@ -1,49 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Creates a new route table within a VPC. After you create a new route
--- table, you can add routes and associate the table with a subnet.
-
-module Stratosphere.Resources.RouteTable where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.ResourceTag
-
--- | Full data type definition for RouteTable. See 'routeTable' for a more
--- convenient constructor.
-data RouteTable =
-  RouteTable
-  { _routeTableVpcId :: Val Text
-  , _routeTableTags :: Maybe [ResourceTag]
-  } deriving (Show, Generic)
-
-instance ToJSON RouteTable where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
-
-instance FromJSON RouteTable where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }
-
--- | Constructor for 'RouteTable' containing required fields as arguments.
-routeTable
-  :: Val Text -- ^ 'rtVpcId'
-  -> RouteTable
-routeTable vpcIdarg =
-  RouteTable
-  { _routeTableVpcId = vpcIdarg
-  , _routeTableTags = Nothing
-  }
-
--- | The ID of the VPC where the route table will be created. Example:
--- vpc-11ad4878
-rtVpcId :: Lens' RouteTable (Val Text)
-rtVpcId = lens _routeTableVpcId (\s a -> s { _routeTableVpcId = a })
-
--- | An arbitrary set of tags (key–value pairs) for this route table.
-rtTags :: Lens' RouteTable (Maybe [ResourceTag])
-rtTags = lens _routeTableTags (\s a -> s { _routeTableTags = a })
diff --git a/library-gen/Stratosphere/Resources/S3Bucket.hs b/library-gen/Stratosphere/Resources/S3Bucket.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/S3Bucket.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html
+
+module Stratosphere.Resources.S3Bucket where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.Types
+import Stratosphere.ResourceProperties.S3BucketCorsConfiguration
+import Stratosphere.ResourceProperties.S3BucketLifecycleConfiguration
+import Stratosphere.ResourceProperties.S3BucketLoggingConfiguration
+import Stratosphere.ResourceProperties.S3BucketNotificationConfiguration
+import Stratosphere.ResourceProperties.S3BucketReplicationConfiguration
+import Stratosphere.ResourceProperties.Tag
+import Stratosphere.ResourceProperties.S3BucketVersioningConfiguration
+import Stratosphere.ResourceProperties.S3BucketWebsiteConfiguration
+
+-- | Full data type definition for S3Bucket. See 's3Bucket' for a more
+-- | convenient constructor.
+data S3Bucket =
+  S3Bucket
+  { _s3BucketAccessControl :: Maybe (Val CannedACL)
+  , _s3BucketBucketName :: Maybe (Val Text)
+  , _s3BucketCorsConfiguration :: Maybe S3BucketCorsConfiguration
+  , _s3BucketLifecycleConfiguration :: Maybe S3BucketLifecycleConfiguration
+  , _s3BucketLoggingConfiguration :: Maybe S3BucketLoggingConfiguration
+  , _s3BucketNotificationConfiguration :: Maybe S3BucketNotificationConfiguration
+  , _s3BucketReplicationConfiguration :: Maybe S3BucketReplicationConfiguration
+  , _s3BucketTags :: Maybe [Tag]
+  , _s3BucketVersioningConfiguration :: Maybe S3BucketVersioningConfiguration
+  , _s3BucketWebsiteConfiguration :: Maybe S3BucketWebsiteConfiguration
+  } deriving (Show, Generic)
+
+instance ToJSON S3Bucket where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+
+instance FromJSON S3Bucket where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+
+-- | Constructor for 'S3Bucket' containing required fields as arguments.
+s3Bucket
+  :: S3Bucket
+s3Bucket  =
+  S3Bucket
+  { _s3BucketAccessControl = Nothing
+  , _s3BucketBucketName = Nothing
+  , _s3BucketCorsConfiguration = Nothing
+  , _s3BucketLifecycleConfiguration = Nothing
+  , _s3BucketLoggingConfiguration = Nothing
+  , _s3BucketNotificationConfiguration = Nothing
+  , _s3BucketReplicationConfiguration = Nothing
+  , _s3BucketTags = Nothing
+  , _s3BucketVersioningConfiguration = Nothing
+  , _s3BucketWebsiteConfiguration = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-accesscontrol
+sbAccessControl :: Lens' S3Bucket (Maybe (Val CannedACL))
+sbAccessControl = lens _s3BucketAccessControl (\s a -> s { _s3BucketAccessControl = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-name
+sbBucketName :: Lens' S3Bucket (Maybe (Val Text))
+sbBucketName = lens _s3BucketBucketName (\s a -> s { _s3BucketBucketName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-crossoriginconfig
+sbCorsConfiguration :: Lens' S3Bucket (Maybe S3BucketCorsConfiguration)
+sbCorsConfiguration = lens _s3BucketCorsConfiguration (\s a -> s { _s3BucketCorsConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-lifecycleconfig
+sbLifecycleConfiguration :: Lens' S3Bucket (Maybe S3BucketLifecycleConfiguration)
+sbLifecycleConfiguration = lens _s3BucketLifecycleConfiguration (\s a -> s { _s3BucketLifecycleConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-loggingconfig
+sbLoggingConfiguration :: Lens' S3Bucket (Maybe S3BucketLoggingConfiguration)
+sbLoggingConfiguration = lens _s3BucketLoggingConfiguration (\s a -> s { _s3BucketLoggingConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-notification
+sbNotificationConfiguration :: Lens' S3Bucket (Maybe S3BucketNotificationConfiguration)
+sbNotificationConfiguration = lens _s3BucketNotificationConfiguration (\s a -> s { _s3BucketNotificationConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-replicationconfiguration
+sbReplicationConfiguration :: Lens' S3Bucket (Maybe S3BucketReplicationConfiguration)
+sbReplicationConfiguration = lens _s3BucketReplicationConfiguration (\s a -> s { _s3BucketReplicationConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-tags
+sbTags :: Lens' S3Bucket (Maybe [Tag])
+sbTags = lens _s3BucketTags (\s a -> s { _s3BucketTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-versioning
+sbVersioningConfiguration :: Lens' S3Bucket (Maybe S3BucketVersioningConfiguration)
+sbVersioningConfiguration = lens _s3BucketVersioningConfiguration (\s a -> s { _s3BucketVersioningConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-websiteconfiguration
+sbWebsiteConfiguration :: Lens' S3Bucket (Maybe S3BucketWebsiteConfiguration)
+sbWebsiteConfiguration = lens _s3BucketWebsiteConfiguration (\s a -> s { _s3BucketWebsiteConfiguration = a })
diff --git a/library-gen/Stratosphere/Resources/S3BucketPolicy.hs b/library-gen/Stratosphere/Resources/S3BucketPolicy.hs
--- a/library-gen/Stratosphere/Resources/S3BucketPolicy.hs
+++ b/library-gen/Stratosphere/Resources/S3BucketPolicy.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::S3::BucketPolicy type applies an Amazon S3 bucket policy to an
--- Amazon S3 bucket. AWS::S3::BucketPolicy Snippet: Declaring an Amazon S3
--- Bucket Policy
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html
 
 module Stratosphere.Resources.S3BucketPolicy where
 
@@ -17,7 +15,7 @@
 
 
 -- | Full data type definition for S3BucketPolicy. See 's3BucketPolicy' for a
--- more convenient constructor.
+-- | more convenient constructor.
 data S3BucketPolicy =
   S3BucketPolicy
   { _s3BucketPolicyBucket :: Val Text
@@ -41,12 +39,10 @@
   , _s3BucketPolicyPolicyDocument = policyDocumentarg
   }
 
--- | The Amazon S3 bucket that the policy applies to.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html#cfn-s3-bucketpolicy-bucket
 sbpBucket :: Lens' S3BucketPolicy (Val Text)
 sbpBucket = lens _s3BucketPolicyBucket (\s a -> s { _s3BucketPolicyBucket = a })
 
--- | A policy document containing permissions to add to the specified bucket.
--- For more information, see Access Policy Language Overview in the Amazon
--- Simple Storage Service Developer Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html#cfn-s3-bucketpolicy-policydocument
 sbpPolicyDocument :: Lens' S3BucketPolicy Object
 sbpPolicyDocument = lens _s3BucketPolicyPolicyDocument (\s a -> s { _s3BucketPolicyPolicyDocument = a })
diff --git a/library-gen/Stratosphere/Resources/SDBDomain.hs b/library-gen/Stratosphere/Resources/SDBDomain.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/SDBDomain.hs
@@ -0,0 +1,40 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-simpledb.html
+
+module Stratosphere.Resources.SDBDomain where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for SDBDomain. See 'sdbDomain' for a more
+-- | convenient constructor.
+data SDBDomain =
+  SDBDomain
+  { _sDBDomainDescription :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON SDBDomain where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+
+instance FromJSON SDBDomain where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+
+-- | Constructor for 'SDBDomain' containing required fields as arguments.
+sdbDomain
+  :: SDBDomain
+sdbDomain  =
+  SDBDomain
+  { _sDBDomainDescription = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-simpledb.html#cfn-sdb-domain-description
+sdbdDescription :: Lens' SDBDomain (Maybe (Val Text))
+sdbdDescription = lens _sDBDomainDescription (\s a -> s { _sDBDomainDescription = a })
diff --git a/library-gen/Stratosphere/Resources/SNSSubscription.hs b/library-gen/Stratosphere/Resources/SNSSubscription.hs
--- a/library-gen/Stratosphere/Resources/SNSSubscription.hs
+++ b/library-gen/Stratosphere/Resources/SNSSubscription.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::SNS::Subscription resource subscribes an endpoint to an Amazon
--- Simple Notification Service (Amazon SNS) topic. The owner of the endpoint
--- must confirm the subscription before Amazon SNS creates the subscription.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html
 
 module Stratosphere.Resources.SNSSubscription where
 
@@ -17,11 +15,11 @@
 import Stratosphere.Types
 
 -- | Full data type definition for SNSSubscription. See 'snsSubscription' for
--- a more convenient constructor.
+-- | a more convenient constructor.
 data SNSSubscription =
   SNSSubscription
   { _sNSSubscriptionEndpoint :: Maybe (Val Text)
-  , _sNSSubscriptionProtocol :: Maybe SNSProtocol
+  , _sNSSubscriptionProtocol :: Maybe (Val SNSProtocol)
   , _sNSSubscriptionTopicArn :: Maybe (Val Text)
   } deriving (Show, Generic)
 
@@ -32,7 +30,7 @@
   parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
 
 -- | Constructor for 'SNSSubscription' containing required fields as
--- arguments.
+-- | arguments.
 snsSubscription
   :: SNSSubscription
 snsSubscription  =
@@ -42,18 +40,14 @@
   , _sNSSubscriptionTopicArn = Nothing
   }
 
--- | The endpoint that receives notifications from the Amazon SNS topic. The
--- endpoint value depends on the protocol that you specify. For more
--- information, see the Subscribe Endpoint parameter in the Amazon Simple
--- Notification Service API Reference.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html#cfn-sns-endpoint
 snssEndpoint :: Lens' SNSSubscription (Maybe (Val Text))
 snssEndpoint = lens _sNSSubscriptionEndpoint (\s a -> s { _sNSSubscriptionEndpoint = a })
 
--- | The subscription's protocol. For more information, see the Subscribe
--- Protocol parameter in the Amazon Simple Notification Service API Reference.
-snssProtocol :: Lens' SNSSubscription (Maybe SNSProtocol)
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html#cfn-sns-protocol
+snssProtocol :: Lens' SNSSubscription (Maybe (Val SNSProtocol))
 snssProtocol = lens _sNSSubscriptionProtocol (\s a -> s { _sNSSubscriptionProtocol = a })
 
--- | The Amazon Resource Name (ARN) of the topic to subscribe to.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html#topicarn
 snssTopicArn :: Lens' SNSSubscription (Maybe (Val Text))
 snssTopicArn = lens _sNSSubscriptionTopicArn (\s a -> s { _sNSSubscriptionTopicArn = a })
diff --git a/library-gen/Stratosphere/Resources/SNSTopic.hs b/library-gen/Stratosphere/Resources/SNSTopic.hs
--- a/library-gen/Stratosphere/Resources/SNSTopic.hs
+++ b/library-gen/Stratosphere/Resources/SNSTopic.hs
@@ -1,8 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::SNS::Topic type creates an Amazon Simple Notification Service
--- (Amazon SNS) topic.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html
 
 module Stratosphere.Resources.SNSTopic where
 
@@ -16,7 +15,7 @@
 import Stratosphere.ResourceProperties.SNSTopicSubscription
 
 -- | Full data type definition for SNSTopic. See 'snsTopic' for a more
--- convenient constructor.
+-- | convenient constructor.
 data SNSTopic =
   SNSTopic
   { _sNSTopicDisplayName :: Maybe (Val Text)
@@ -40,19 +39,14 @@
   , _sNSTopicTopicName = Nothing
   }
 
--- | A developer-defined string that can be used to identify this SNS topic.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html#cfn-sns-topic-displayname
 snstDisplayName :: Lens' SNSTopic (Maybe (Val Text))
 snstDisplayName = lens _sNSTopicDisplayName (\s a -> s { _sNSTopicDisplayName = a })
 
--- | The SNS subscriptions (endpoints) for this topic.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html#cfn-sns-topic-subscription
 snstSubscription :: Lens' SNSTopic (Maybe [SNSTopicSubscription])
 snstSubscription = lens _sNSTopicSubscription (\s a -> s { _sNSTopicSubscription = a })
 
--- | A name for the topic. If you don't specify a name, AWS CloudFormation
--- generates a unique physical ID and uses that ID for the topic name. For
--- more information, see Name Type. Important If you specify a name, you
--- cannot do updates that require this resource to be replaced. You can still
--- do updates that require no or some interruption. If you must replace the
--- resource, specify a new name.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html#cfn-sns-topic-topicname
 snstTopicName :: Lens' SNSTopic (Maybe (Val Text))
 snstTopicName = lens _sNSTopicTopicName (\s a -> s { _sNSTopicTopicName = a })
diff --git a/library-gen/Stratosphere/Resources/SNSTopicPolicy.hs b/library-gen/Stratosphere/Resources/SNSTopicPolicy.hs
--- a/library-gen/Stratosphere/Resources/SNSTopicPolicy.hs
+++ b/library-gen/Stratosphere/Resources/SNSTopicPolicy.hs
@@ -1,8 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::SNS::TopicPolicy resource associates Amazon SNS topics with a
--- policy.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html
 
 module Stratosphere.Resources.SNSTopicPolicy where
 
@@ -16,11 +15,11 @@
 
 
 -- | Full data type definition for SNSTopicPolicy. See 'snsTopicPolicy' for a
--- more convenient constructor.
+-- | more convenient constructor.
 data SNSTopicPolicy =
   SNSTopicPolicy
   { _sNSTopicPolicyPolicyDocument :: Object
-  , _sNSTopicPolicyTopics :: [String]
+  , _sNSTopicPolicyTopics :: [Val Text]
   } deriving (Show, Generic)
 
 instance ToJSON SNSTopicPolicy where
@@ -32,7 +31,7 @@
 -- | Constructor for 'SNSTopicPolicy' containing required fields as arguments.
 snsTopicPolicy
   :: Object -- ^ 'snstpPolicyDocument'
-  -> [String] -- ^ 'snstpTopics'
+  -> [Val Text] -- ^ 'snstpTopics'
   -> SNSTopicPolicy
 snsTopicPolicy policyDocumentarg topicsarg =
   SNSTopicPolicy
@@ -40,13 +39,10 @@
   , _sNSTopicPolicyTopics = topicsarg
   }
 
--- | A policy document that contains permissions to add to the specified SNS
--- topics.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html#cfn-sns-topicpolicy-policydocument
 snstpPolicyDocument :: Lens' SNSTopicPolicy Object
 snstpPolicyDocument = lens _sNSTopicPolicyPolicyDocument (\s a -> s { _sNSTopicPolicyPolicyDocument = a })
 
--- | The Amazon Resource Names (ARN) of the topics to which you want to add
--- the policy. You can use the Ref function to specify an AWS::SNS::Topic
--- resource.
-snstpTopics :: Lens' SNSTopicPolicy [String]
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html#cfn-sns-topicpolicy-topics
+snstpTopics :: Lens' SNSTopicPolicy [Val Text]
 snstpTopics = lens _sNSTopicPolicyTopics (\s a -> s { _sNSTopicPolicyTopics = a })
diff --git a/library-gen/Stratosphere/Resources/SQSQueue.hs b/library-gen/Stratosphere/Resources/SQSQueue.hs
--- a/library-gen/Stratosphere/Resources/SQSQueue.hs
+++ b/library-gen/Stratosphere/Resources/SQSQueue.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::SQS::Queue type creates an Amazon SQS queue.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html
 
 module Stratosphere.Resources.SQSQueue where
 
@@ -12,10 +12,10 @@
 import GHC.Generics
 
 import Stratosphere.Values
-import Stratosphere.ResourceProperties.SQSRedrivePolicy
 
+
 -- | Full data type definition for SQSQueue. See 'sqsQueue' for a more
--- convenient constructor.
+-- | convenient constructor.
 data SQSQueue =
   SQSQueue
   { _sQSQueueDelaySeconds :: Maybe (Val Integer')
@@ -23,7 +23,7 @@
   , _sQSQueueMessageRetentionPeriod :: Maybe (Val Integer')
   , _sQSQueueQueueName :: Maybe (Val Text)
   , _sQSQueueReceiveMessageWaitTimeSeconds :: Maybe (Val Integer')
-  , _sQSQueueRedrivePolicy :: Maybe SQSRedrivePolicy
+  , _sQSQueueRedrivePolicy :: Maybe Object
   , _sQSQueueVisibilityTimeout :: Maybe (Val Integer')
   } deriving (Show, Generic)
 
@@ -47,55 +47,30 @@
   , _sQSQueueVisibilityTimeout = Nothing
   }
 
--- | The time in seconds that the delivery of all messages in the queue will
--- be delayed. You can specify an integer value of 0 to 900 (15 minutes). The
--- default value is 0.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html#aws-sqs-queue-delayseconds
 sqsqDelaySeconds :: Lens' SQSQueue (Maybe (Val Integer'))
 sqsqDelaySeconds = lens _sQSQueueDelaySeconds (\s a -> s { _sQSQueueDelaySeconds = a })
 
--- | The limit of how many bytes a message can contain before Amazon SQS
--- rejects it. You can specify an integer value from 1024 bytes (1 KiB) to
--- 262144 bytes (256 KiB). The default value is 262144 (256 KiB).
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html#aws-sqs-queue-maxmesgsize
 sqsqMaximumMessageSize :: Lens' SQSQueue (Maybe (Val Integer'))
 sqsqMaximumMessageSize = lens _sQSQueueMaximumMessageSize (\s a -> s { _sQSQueueMaximumMessageSize = a })
 
--- | The number of seconds Amazon SQS retains a message. You can specify an
--- integer value from 60 seconds (1 minute) to 1209600 seconds (14 days). The
--- default value is 345600 seconds (4 days).
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html#aws-sqs-queue-msgretentionperiod
 sqsqMessageRetentionPeriod :: Lens' SQSQueue (Maybe (Val Integer'))
 sqsqMessageRetentionPeriod = lens _sQSQueueMessageRetentionPeriod (\s a -> s { _sQSQueueMessageRetentionPeriod = a })
 
--- | A name for the queue. If you don't specify a name, AWS CloudFormation
--- generates a unique physical ID and uses that ID for the queue name. For
--- more information, see Name Type. Important If you specify a name, you
--- cannot do updates that require this resource to be replaced. You can still
--- do updates that require no or some interruption. If you must replace the
--- resource, specify a new name.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html#aws-sqs-queue-name
 sqsqQueueName :: Lens' SQSQueue (Maybe (Val Text))
 sqsqQueueName = lens _sQSQueueQueueName (\s a -> s { _sQSQueueQueueName = a })
 
--- | Specifies the duration, in seconds, that the ReceiveMessage action call
--- waits until a message is in the queue in order to include it in the
--- response, as opposed to returning an empty response if a message is not yet
--- available. You can specify an integer from 1 to 20. The short polling is
--- used as the default or when you specify 0 for this property. For more
--- information, see Amazon SQS Long Poll.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html#aws-sqs-queue-receivemsgwaittime
 sqsqReceiveMessageWaitTimeSeconds :: Lens' SQSQueue (Maybe (Val Integer'))
 sqsqReceiveMessageWaitTimeSeconds = lens _sQSQueueReceiveMessageWaitTimeSeconds (\s a -> s { _sQSQueueReceiveMessageWaitTimeSeconds = a })
 
--- | Specifies an existing dead letter queue to receive messages after the
--- source queue (this queue) fails to process a message a specified number of
--- times.
-sqsqRedrivePolicy :: Lens' SQSQueue (Maybe SQSRedrivePolicy)
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html#aws-sqs-queue-redrive
+sqsqRedrivePolicy :: Lens' SQSQueue (Maybe Object)
 sqsqRedrivePolicy = lens _sQSQueueRedrivePolicy (\s a -> s { _sQSQueueRedrivePolicy = a })
 
--- | The length of time during which a message will be unavailable once a
--- message is delivered from the queue. This blocks other components from
--- receiving the same message and gives the initial component time to process
--- and delete the message from the queue. Values must be from 0 to 43200
--- seconds (12 hours). If no value is specified, the default value of 30
--- seconds will be used. For more information about SQS Queue visibility
--- timeouts, see Visibility Timeout in the Amazon Simple Queue Service
--- Developer Guide.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html#aws-sqs-queue-visiblitytimeout
 sqsqVisibilityTimeout :: Lens' SQSQueue (Maybe (Val Integer'))
 sqsqVisibilityTimeout = lens _sQSQueueVisibilityTimeout (\s a -> s { _sQSQueueVisibilityTimeout = a })
diff --git a/library-gen/Stratosphere/Resources/SQSQueuePolicy.hs b/library-gen/Stratosphere/Resources/SQSQueuePolicy.hs
--- a/library-gen/Stratosphere/Resources/SQSQueuePolicy.hs
+++ b/library-gen/Stratosphere/Resources/SQSQueuePolicy.hs
@@ -1,8 +1,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The AWS::SQS::QueuePolicy type applies a policy to SQS queues.
--- AWS::SQS::QueuePolicy Snippet: Declaring an Amazon SQS Policy
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html
 
 module Stratosphere.Resources.SQSQueuePolicy where
 
@@ -16,7 +15,7 @@
 
 
 -- | Full data type definition for SQSQueuePolicy. See 'sqsQueuePolicy' for a
--- more convenient constructor.
+-- | more convenient constructor.
 data SQSQueuePolicy =
   SQSQueuePolicy
   { _sQSQueuePolicyPolicyDocument :: Object
@@ -40,12 +39,10 @@
   , _sQSQueuePolicyQueues = queuesarg
   }
 
--- | A policy document containing permissions to add to the specified SQS
--- queues.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html#cfn-sqs-queuepolicy-policydoc
 sqsqpPolicyDocument :: Lens' SQSQueuePolicy Object
 sqsqpPolicyDocument = lens _sQSQueuePolicyPolicyDocument (\s a -> s { _sQSQueuePolicyPolicyDocument = a })
 
--- | The URLs of the queues to which you want to add the policy. You can use
--- the Ref function to specify an AWS::SQS::Queue resource.
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html#cfn-sqs-queuepolicy-queues
 sqsqpQueues :: Lens' SQSQueuePolicy [Val Text]
 sqsqpQueues = lens _sQSQueuePolicyQueues (\s a -> s { _sQSQueuePolicyQueues = a })
diff --git a/library-gen/Stratosphere/Resources/SSMAssociation.hs b/library-gen/Stratosphere/Resources/SSMAssociation.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/SSMAssociation.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-association.html
+
+module Stratosphere.Resources.SSMAssociation where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.SSMAssociationParameterValues
+import Stratosphere.ResourceProperties.SSMAssociationTarget
+
+-- | Full data type definition for SSMAssociation. See 'ssmAssociation' for a
+-- | more convenient constructor.
+data SSMAssociation =
+  SSMAssociation
+  { _sSMAssociationDocumentVersion :: Maybe (Val Text)
+  , _sSMAssociationInstanceId :: Maybe (Val Text)
+  , _sSMAssociationName :: Val Text
+  , _sSMAssociationParameters :: Maybe Object
+  , _sSMAssociationScheduleExpression :: Maybe (Val Text)
+  , _sSMAssociationTargets :: Maybe [SSMAssociationTarget]
+  } deriving (Show, Generic)
+
+instance ToJSON SSMAssociation where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+instance FromJSON SSMAssociation where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+-- | Constructor for 'SSMAssociation' containing required fields as arguments.
+ssmAssociation
+  :: Val Text -- ^ 'ssmaName'
+  -> SSMAssociation
+ssmAssociation namearg =
+  SSMAssociation
+  { _sSMAssociationDocumentVersion = Nothing
+  , _sSMAssociationInstanceId = Nothing
+  , _sSMAssociationName = namearg
+  , _sSMAssociationParameters = Nothing
+  , _sSMAssociationScheduleExpression = Nothing
+  , _sSMAssociationTargets = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-association.html#cfn-ssm-association-documentversion
+ssmaDocumentVersion :: Lens' SSMAssociation (Maybe (Val Text))
+ssmaDocumentVersion = lens _sSMAssociationDocumentVersion (\s a -> s { _sSMAssociationDocumentVersion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-association.html#cfn-ssm-association-instanceid
+ssmaInstanceId :: Lens' SSMAssociation (Maybe (Val Text))
+ssmaInstanceId = lens _sSMAssociationInstanceId (\s a -> s { _sSMAssociationInstanceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-association.html#cfn-ssm-association-name
+ssmaName :: Lens' SSMAssociation (Val Text)
+ssmaName = lens _sSMAssociationName (\s a -> s { _sSMAssociationName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-association.html#cfn-ssm-association-parameters
+ssmaParameters :: Lens' SSMAssociation (Maybe Object)
+ssmaParameters = lens _sSMAssociationParameters (\s a -> s { _sSMAssociationParameters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-association.html#cfn-ssm-association-scheduleexpression
+ssmaScheduleExpression :: Lens' SSMAssociation (Maybe (Val Text))
+ssmaScheduleExpression = lens _sSMAssociationScheduleExpression (\s a -> s { _sSMAssociationScheduleExpression = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-association.html#cfn-ssm-association-targets
+ssmaTargets :: Lens' SSMAssociation (Maybe [SSMAssociationTarget])
+ssmaTargets = lens _sSMAssociationTargets (\s a -> s { _sSMAssociationTargets = a })
diff --git a/library-gen/Stratosphere/Resources/SSMDocument.hs b/library-gen/Stratosphere/Resources/SSMDocument.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/SSMDocument.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-document.html
+
+module Stratosphere.Resources.SSMDocument where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for SSMDocument. See 'ssmDocument' for a more
+-- | convenient constructor.
+data SSMDocument =
+  SSMDocument
+  { _sSMDocumentContent :: Object
+  , _sSMDocumentDocumentType :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON SSMDocument where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
+
+instance FromJSON SSMDocument where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
+
+-- | Constructor for 'SSMDocument' containing required fields as arguments.
+ssmDocument
+  :: Object -- ^ 'ssmdContent'
+  -> SSMDocument
+ssmDocument contentarg =
+  SSMDocument
+  { _sSMDocumentContent = contentarg
+  , _sSMDocumentDocumentType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-document.html#cfn-ssm-document-content
+ssmdContent :: Lens' SSMDocument Object
+ssmdContent = lens _sSMDocumentContent (\s a -> s { _sSMDocumentContent = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-document.html#cfn-ssm-document-documenttype
+ssmdDocumentType :: Lens' SSMDocument (Maybe (Val Text))
+ssmdDocumentType = lens _sSMDocumentDocumentType (\s a -> s { _sSMDocumentDocumentType = a })
diff --git a/library-gen/Stratosphere/Resources/ScalingPolicy.hs b/library-gen/Stratosphere/Resources/ScalingPolicy.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/ScalingPolicy.hs
+++ /dev/null
@@ -1,121 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::AutoScaling::ScalingPolicy resource adds a scaling policy to an
--- auto scaling group. A scaling policy specifies whether to scale the auto
--- scaling group up or down, and by how much. For more information on scaling
--- policies, see Scaling by Policy in the Auto Scaling Developer Guide. You
--- can use a scaling policy together with an CloudWatch alarm. An CloudWatch
--- alarm can automatically initiate actions on your behalf, based on
--- parameters you specify. A scaling policy is one type of action that an
--- alarm can initiate. For a snippet showing how to create an Auto Scaling
--- policy that is triggered by an CloudWatch alarm, see Auto Scaling Policy
--- Triggered by CloudWatch Alarm. This type supports updates. For more
--- information about updating this resource, see PutScalingPolicy.
-
-module Stratosphere.Resources.ScalingPolicy where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.StepAdjustments
-
--- | Full data type definition for ScalingPolicy. See 'scalingPolicy' for a
--- more convenient constructor.
-data ScalingPolicy =
-  ScalingPolicy
-  { _scalingPolicyAdjustmentType :: Val Text
-  , _scalingPolicyAutoScalingGroupName :: Val Text
-  , _scalingPolicyCooldown :: Maybe (Val Text)
-  , _scalingPolicyEstimatedInstanceWarmup :: Maybe (Val Integer')
-  , _scalingPolicyMetricAggregationType :: Maybe (Val Text)
-  , _scalingPolicyMinAdjustmentMagnitude :: Maybe (Val Integer')
-  , _scalingPolicyPolicyType :: Maybe (Val Text)
-  , _scalingPolicyScalingAdjustment :: Maybe (Val Integer')
-  , _scalingPolicyStepAdjustments :: Maybe [StepAdjustments]
-  } deriving (Show, Generic)
-
-instance ToJSON ScalingPolicy where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
-
-instance FromJSON ScalingPolicy where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
-
--- | Constructor for 'ScalingPolicy' containing required fields as arguments.
-scalingPolicy
-  :: Val Text -- ^ 'spAdjustmentType'
-  -> Val Text -- ^ 'spAutoScalingGroupName'
-  -> ScalingPolicy
-scalingPolicy adjustmentTypearg autoScalingGroupNamearg =
-  ScalingPolicy
-  { _scalingPolicyAdjustmentType = adjustmentTypearg
-  , _scalingPolicyAutoScalingGroupName = autoScalingGroupNamearg
-  , _scalingPolicyCooldown = Nothing
-  , _scalingPolicyEstimatedInstanceWarmup = Nothing
-  , _scalingPolicyMetricAggregationType = Nothing
-  , _scalingPolicyMinAdjustmentMagnitude = Nothing
-  , _scalingPolicyPolicyType = Nothing
-  , _scalingPolicyScalingAdjustment = Nothing
-  , _scalingPolicyStepAdjustments = Nothing
-  }
-
--- | Specifies whether the ScalingAdjustment is an absolute number or a
--- percentage of the current capacity. Valid values are ChangeInCapacity,
--- ExactCapacity, and PercentChangeInCapacity.
-spAdjustmentType :: Lens' ScalingPolicy (Val Text)
-spAdjustmentType = lens _scalingPolicyAdjustmentType (\s a -> s { _scalingPolicyAdjustmentType = a })
-
--- | The name or Amazon Resource Name (ARN) of the Auto Scaling Group that you
--- want to attach the policy to.
-spAutoScalingGroupName :: Lens' ScalingPolicy (Val Text)
-spAutoScalingGroupName = lens _scalingPolicyAutoScalingGroupName (\s a -> s { _scalingPolicyAutoScalingGroupName = a })
-
--- | The amount of time, in seconds, after a scaling activity completes before
--- any further trigger-related scaling activities can start. Do not specify
--- this property if you are using the StepScaling policy type.
-spCooldown :: Lens' ScalingPolicy (Maybe (Val Text))
-spCooldown = lens _scalingPolicyCooldown (\s a -> s { _scalingPolicyCooldown = a })
-
--- | The estimated time, in seconds, until a newly launched instance can send
--- metrics to CloudWatch. By default, Auto Scaling uses the cooldown period,
--- as specified in the Cooldown property. Do not specify this property if you
--- are using the SimpleScaling policy type.
-spEstimatedInstanceWarmup :: Lens' ScalingPolicy (Maybe (Val Integer'))
-spEstimatedInstanceWarmup = lens _scalingPolicyEstimatedInstanceWarmup (\s a -> s { _scalingPolicyEstimatedInstanceWarmup = a })
-
--- | The aggregation type for the CloudWatch metrics. You can specify Minimum,
--- Maximum, or Average. By default, AWS CloudFormation specifies Average. Do
--- not specify this property if you are using the SimpleScaling policy type.
-spMetricAggregationType :: Lens' ScalingPolicy (Maybe (Val Text))
-spMetricAggregationType = lens _scalingPolicyMetricAggregationType (\s a -> s { _scalingPolicyMetricAggregationType = a })
-
--- | For the PercentChangeInCapacity adjustment type, the minimum number of
--- instances to scale. The scaling policy changes the desired capacity of the
--- Auto Scaling group by a minimum of this many instances. This property
--- replaces the MinAdjustmentStep property.
-spMinAdjustmentMagnitude :: Lens' ScalingPolicy (Maybe (Val Integer'))
-spMinAdjustmentMagnitude = lens _scalingPolicyMinAdjustmentMagnitude (\s a -> s { _scalingPolicyMinAdjustmentMagnitude = a })
-
--- | An Auto Scaling policy type. You can specify SimpleScaling or
--- StepScaling. By default, AWS CloudFormation specifies SimpleScaling. For
--- more information, see Scaling Policy Types in the Auto Scaling User Guide.
-spPolicyType :: Lens' ScalingPolicy (Maybe (Val Text))
-spPolicyType = lens _scalingPolicyPolicyType (\s a -> s { _scalingPolicyPolicyType = a })
-
--- | The number of instances by which to scale. The AdjustmentType property
--- determines whether AWS CloudFormation interprets this number as an absolute
--- number (when the ExactCapacityvalue is specified) or as a percentage of the
--- existing Auto Scaling group size (when the PercentChangeInCapacity value is
--- specified). A positive value adds to the current capacity and a negative
--- value subtracts from the current capacity.
-spScalingAdjustment :: Lens' ScalingPolicy (Maybe (Val Integer'))
-spScalingAdjustment = lens _scalingPolicyScalingAdjustment (\s a -> s { _scalingPolicyScalingAdjustment = a })
-
--- | A set of adjustments that enable you to scale based on the size of the
--- alarm breach.
-spStepAdjustments :: Lens' ScalingPolicy (Maybe [StepAdjustments])
-spStepAdjustments = lens _scalingPolicyStepAdjustments (\s a -> s { _scalingPolicyStepAdjustments = a })
diff --git a/library-gen/Stratosphere/Resources/ScheduledAction.hs b/library-gen/Stratosphere/Resources/ScheduledAction.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/ScheduledAction.hs
+++ /dev/null
@@ -1,87 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Creates a scheduled scaling action for an Auto Scaling group, changing
--- the number of servers available for your application in response to
--- predictable load changes.
-
-module Stratosphere.Resources.ScheduledAction where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for ScheduledAction. See 'scheduledAction' for
--- a more convenient constructor.
-data ScheduledAction =
-  ScheduledAction
-  { _scheduledActionAutoScalingGroupName :: Val Text
-  , _scheduledActionDesiredCapacity :: Maybe (Val Integer')
-  , _scheduledActionEndTime :: Maybe (Val Text)
-  , _scheduledActionMaxSize :: Maybe (Val Integer')
-  , _scheduledActionMinSize :: Maybe (Val Integer')
-  , _scheduledActionRecurrence :: Maybe (Val Text)
-  , _scheduledActionStartTime :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON ScheduledAction where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
-
-instance FromJSON ScheduledAction where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
-
--- | Constructor for 'ScheduledAction' containing required fields as
--- arguments.
-scheduledAction
-  :: Val Text -- ^ 'saAutoScalingGroupName'
-  -> ScheduledAction
-scheduledAction autoScalingGroupNamearg =
-  ScheduledAction
-  { _scheduledActionAutoScalingGroupName = autoScalingGroupNamearg
-  , _scheduledActionDesiredCapacity = Nothing
-  , _scheduledActionEndTime = Nothing
-  , _scheduledActionMaxSize = Nothing
-  , _scheduledActionMinSize = Nothing
-  , _scheduledActionRecurrence = Nothing
-  , _scheduledActionStartTime = Nothing
-  }
-
--- | The name or ARN of the Auto Scaling group.
-saAutoScalingGroupName :: Lens' ScheduledAction (Val Text)
-saAutoScalingGroupName = lens _scheduledActionAutoScalingGroupName (\s a -> s { _scheduledActionAutoScalingGroupName = a })
-
--- | The number of Amazon EC2 instances that should be running in the Auto
--- Scaling group.
-saDesiredCapacity :: Lens' ScheduledAction (Maybe (Val Integer'))
-saDesiredCapacity = lens _scheduledActionDesiredCapacity (\s a -> s { _scheduledActionDesiredCapacity = a })
-
--- | The time in UTC for this schedule to end. For example,
--- 2010-06-01T00:00:00Z.
-saEndTime :: Lens' ScheduledAction (Maybe (Val Text))
-saEndTime = lens _scheduledActionEndTime (\s a -> s { _scheduledActionEndTime = a })
-
--- | The maximum number of Amazon EC2 instances in the Auto Scaling group.
-saMaxSize :: Lens' ScheduledAction (Maybe (Val Integer'))
-saMaxSize = lens _scheduledActionMaxSize (\s a -> s { _scheduledActionMaxSize = a })
-
--- | The minimum number of Amazon EC2 instances in the Auto Scaling group.
-saMinSize :: Lens' ScheduledAction (Maybe (Val Integer'))
-saMinSize = lens _scheduledActionMinSize (\s a -> s { _scheduledActionMinSize = a })
-
--- | The time in UTC when recurring future actions will start. You specify the
--- start time by following the Unix cron syntax format. For more information
--- about cron syntax, go to http://en.wikipedia.org/wiki/Cron. Specifying the
--- StartTime and EndTime properties with Recurrence property forms the start
--- and stop boundaries of the recurring action.
-saRecurrence :: Lens' ScheduledAction (Maybe (Val Text))
-saRecurrence = lens _scheduledActionRecurrence (\s a -> s { _scheduledActionRecurrence = a })
-
--- | The time in UTC for this schedule to start. For example,
--- 2010-06-01T00:00:00Z.
-saStartTime :: Lens' ScheduledAction (Maybe (Val Text))
-saStartTime = lens _scheduledActionStartTime (\s a -> s { _scheduledActionStartTime = a })
diff --git a/library-gen/Stratosphere/Resources/SecurityGroup.hs b/library-gen/Stratosphere/Resources/SecurityGroup.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/SecurityGroup.hs
+++ /dev/null
@@ -1,71 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Creates an Amazon EC2 security group. To create a VPC security group, use
--- the VpcId property. This type supports updates. For more information about
--- updating stacks, see AWS CloudFormation Stacks Updates.
-
-module Stratosphere.Resources.SecurityGroup where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.SecurityGroupEgressRule
-import Stratosphere.ResourceProperties.SecurityGroupIngressRule
-import Stratosphere.ResourceProperties.ResourceTag
-
--- | Full data type definition for SecurityGroup. See 'securityGroup' for a
--- more convenient constructor.
-data SecurityGroup =
-  SecurityGroup
-  { _securityGroupGroupDescription :: Val Text
-  , _securityGroupSecurityGroupEgress :: Maybe [SecurityGroupEgressRule]
-  , _securityGroupSecurityGroupIngress :: Maybe [SecurityGroupIngressRule]
-  , _securityGroupTags :: Maybe [ResourceTag]
-  , _securityGroupVpcId :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON SecurityGroup where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
-
-instance FromJSON SecurityGroup where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }
-
--- | Constructor for 'SecurityGroup' containing required fields as arguments.
-securityGroup
-  :: Val Text -- ^ 'sgGroupDescription'
-  -> SecurityGroup
-securityGroup groupDescriptionarg =
-  SecurityGroup
-  { _securityGroupGroupDescription = groupDescriptionarg
-  , _securityGroupSecurityGroupEgress = Nothing
-  , _securityGroupSecurityGroupIngress = Nothing
-  , _securityGroupTags = Nothing
-  , _securityGroupVpcId = Nothing
-  }
-
--- | Description of the security group.
-sgGroupDescription :: Lens' SecurityGroup (Val Text)
-sgGroupDescription = lens _securityGroupGroupDescription (\s a -> s { _securityGroupGroupDescription = a })
-
--- | A list of Amazon EC2 security group egress rules.
-sgSecurityGroupEgress :: Lens' SecurityGroup (Maybe [SecurityGroupEgressRule])
-sgSecurityGroupEgress = lens _securityGroupSecurityGroupEgress (\s a -> s { _securityGroupSecurityGroupEgress = a })
-
--- | A list of Amazon EC2 security group ingress rules.
-sgSecurityGroupIngress :: Lens' SecurityGroup (Maybe [SecurityGroupIngressRule])
-sgSecurityGroupIngress = lens _securityGroupSecurityGroupIngress (\s a -> s { _securityGroupSecurityGroupIngress = a })
-
--- | The tags that you want to attach to the resource.
-sgTags :: Lens' SecurityGroup (Maybe [ResourceTag])
-sgTags = lens _securityGroupTags (\s a -> s { _securityGroupTags = a })
-
--- | The physical ID of the VPC. Can be obtained by using a reference to an
--- AWS::EC2::VPC, such as: { "Ref" : "myVPC" }. For more information about
--- using the Ref function, see Ref.
-sgVpcId :: Lens' SecurityGroup (Maybe (Val Text))
-sgVpcId = lens _securityGroupVpcId (\s a -> s { _securityGroupVpcId = a })
diff --git a/library-gen/Stratosphere/Resources/SecurityGroupEgress.hs b/library-gen/Stratosphere/Resources/SecurityGroupEgress.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/SecurityGroupEgress.hs
+++ /dev/null
@@ -1,84 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::EC2::SecurityGroupEgress resource adds an egress rule to an
--- Amazon VPC security group.
-
-module Stratosphere.Resources.SecurityGroupEgress where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for SecurityGroupEgress. See
--- 'securityGroupEgress' for a more convenient constructor.
-data SecurityGroupEgress =
-  SecurityGroupEgress
-  { _securityGroupEgressCidrIp :: Maybe (Val Text)
-  , _securityGroupEgressDestinationSecurityGroupId :: Maybe (Val Text)
-  , _securityGroupEgressFromPort :: Val Integer'
-  , _securityGroupEgressGroupId :: Val Text
-  , _securityGroupEgressIpProtocol :: Val Text
-  , _securityGroupEgressToPort :: Val Integer'
-  } deriving (Show, Generic)
-
-instance ToJSON SecurityGroupEgress where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
-
-instance FromJSON SecurityGroupEgress where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
-
--- | Constructor for 'SecurityGroupEgress' containing required fields as
--- arguments.
-securityGroupEgress
-  :: Val Integer' -- ^ 'sgeFromPort'
-  -> Val Text -- ^ 'sgeGroupId'
-  -> Val Text -- ^ 'sgeIpProtocol'
-  -> Val Integer' -- ^ 'sgeToPort'
-  -> SecurityGroupEgress
-securityGroupEgress fromPortarg groupIdarg ipProtocolarg toPortarg =
-  SecurityGroupEgress
-  { _securityGroupEgressCidrIp = Nothing
-  , _securityGroupEgressDestinationSecurityGroupId = Nothing
-  , _securityGroupEgressFromPort = fromPortarg
-  , _securityGroupEgressGroupId = groupIdarg
-  , _securityGroupEgressIpProtocol = ipProtocolarg
-  , _securityGroupEgressToPort = toPortarg
-  }
-
--- | CIDR range. Type: String
-sgeCidrIp :: Lens' SecurityGroupEgress (Maybe (Val Text))
-sgeCidrIp = lens _securityGroupEgressCidrIp (\s a -> s { _securityGroupEgressCidrIp = a })
-
--- | Specifies the group ID of the destination Amazon VPC security group.
--- Type: String
-sgeDestinationSecurityGroupId :: Lens' SecurityGroupEgress (Maybe (Val Text))
-sgeDestinationSecurityGroupId = lens _securityGroupEgressDestinationSecurityGroupId (\s a -> s { _securityGroupEgressDestinationSecurityGroupId = a })
-
--- | Start of port range for the TCP and UDP protocols, or an ICMP type
--- number. If you specify icmp for the IpProtocol property, you can specify -1
--- as a wildcard (i.e., any ICMP type number). Type: Integer
-sgeFromPort :: Lens' SecurityGroupEgress (Val Integer')
-sgeFromPort = lens _securityGroupEgressFromPort (\s a -> s { _securityGroupEgressFromPort = a })
-
--- | ID of the Amazon VPC security group to modify. This value can be a
--- reference to an AWS::EC2::SecurityGroup resource that has a valid VpcId
--- property or the ID of an existing Amazon VPC security group. Type: String
-sgeGroupId :: Lens' SecurityGroupEgress (Val Text)
-sgeGroupId = lens _securityGroupEgressGroupId (\s a -> s { _securityGroupEgressGroupId = a })
-
--- | IP protocol name or number. For valid values, see the IpProtocol
--- parameter in AuthorizeSecurityGroupIngress Type: String
-sgeIpProtocol :: Lens' SecurityGroupEgress (Val Text)
-sgeIpProtocol = lens _securityGroupEgressIpProtocol (\s a -> s { _securityGroupEgressIpProtocol = a })
-
--- | End of port range for the TCP and UDP protocols, or an ICMP code. If you
--- specify icmp for the IpProtocol property, you can specify -1 as a wildcard
--- (i.e., any ICMP code). Type: Integer
-sgeToPort :: Lens' SecurityGroupEgress (Val Integer')
-sgeToPort = lens _securityGroupEgressToPort (\s a -> s { _securityGroupEgressToPort = a })
diff --git a/library-gen/Stratosphere/Resources/SecurityGroupIngress.hs b/library-gen/Stratosphere/Resources/SecurityGroupIngress.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/SecurityGroupIngress.hs
+++ /dev/null
@@ -1,107 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::EC2::SecurityGroupIngress resource adds an ingress rule to an
--- Amazon EC2 or Amazon VPC security group.
-
-module Stratosphere.Resources.SecurityGroupIngress where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for SecurityGroupIngress. See
--- 'securityGroupIngress' for a more convenient constructor.
-data SecurityGroupIngress =
-  SecurityGroupIngress
-  { _securityGroupIngressCidrIp :: Maybe (Val Text)
-  , _securityGroupIngressFromPort :: Maybe (Val Integer')
-  , _securityGroupIngressGroupId :: Maybe (Val Text)
-  , _securityGroupIngressGroupName :: Maybe (Val Text)
-  , _securityGroupIngressIpProtocol :: Val Text
-  , _securityGroupIngressSourceSecurityGroupId :: Maybe (Val Text)
-  , _securityGroupIngressSourceSecurityGroupName :: Maybe (Val Text)
-  , _securityGroupIngressSourceSecurityGroupOwnerId :: Maybe (Val Text)
-  , _securityGroupIngressToPort :: Maybe (Val Integer')
-  } deriving (Show, Generic)
-
-instance ToJSON SecurityGroupIngress where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
-
-instance FromJSON SecurityGroupIngress where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
-
--- | Constructor for 'SecurityGroupIngress' containing required fields as
--- arguments.
-securityGroupIngress
-  :: Val Text -- ^ 'sgiIpProtocol'
-  -> SecurityGroupIngress
-securityGroupIngress ipProtocolarg =
-  SecurityGroupIngress
-  { _securityGroupIngressCidrIp = Nothing
-  , _securityGroupIngressFromPort = Nothing
-  , _securityGroupIngressGroupId = Nothing
-  , _securityGroupIngressGroupName = Nothing
-  , _securityGroupIngressIpProtocol = ipProtocolarg
-  , _securityGroupIngressSourceSecurityGroupId = Nothing
-  , _securityGroupIngressSourceSecurityGroupName = Nothing
-  , _securityGroupIngressSourceSecurityGroupOwnerId = Nothing
-  , _securityGroupIngressToPort = Nothing
-  }
-
--- | Specifies a CIDR range. For an overview of CIDR ranges, go to the
--- Wikipedia Tutorial. Type: String
-sgiCidrIp :: Lens' SecurityGroupIngress (Maybe (Val Text))
-sgiCidrIp = lens _securityGroupIngressCidrIp (\s a -> s { _securityGroupIngressCidrIp = a })
-
--- | Start of port range for the TCP and UDP protocols, or an ICMP type
--- number. If you specify icmp for the IpProtocol property, you can specify -1
--- as a wildcard (i.e., any ICMP type number). Type: Integer
-sgiFromPort :: Lens' SecurityGroupIngress (Maybe (Val Integer'))
-sgiFromPort = lens _securityGroupIngressFromPort (\s a -> s { _securityGroupIngressFromPort = a })
-
--- | ID of the Amazon EC2 or VPC security group to modify. The group must
--- belong to your account. Type: String
-sgiGroupId :: Lens' SecurityGroupIngress (Maybe (Val Text))
-sgiGroupId = lens _securityGroupIngressGroupId (\s a -> s { _securityGroupIngressGroupId = a })
-
--- | Name of the Amazon EC2 security group (non-VPC security group) to modify.
--- This value can be a reference to an AWS::EC2::SecurityGroup resource or the
--- name of an existing Amazon EC2 security group. Type: String
-sgiGroupName :: Lens' SecurityGroupIngress (Maybe (Val Text))
-sgiGroupName = lens _securityGroupIngressGroupName (\s a -> s { _securityGroupIngressGroupName = a })
-
--- | IP protocol name or number. For valid values, see the IpProtocol
--- parameter in AuthorizeSecurityGroupIngress Type: String
-sgiIpProtocol :: Lens' SecurityGroupIngress (Val Text)
-sgiIpProtocol = lens _securityGroupIngressIpProtocol (\s a -> s { _securityGroupIngressIpProtocol = a })
-
--- | Specifies the ID of the source security group or uses the Ref intrinsic
--- function to refer to the logical ID of a security group defined in the same
--- template. Type: String
-sgiSourceSecurityGroupId :: Lens' SecurityGroupIngress (Maybe (Val Text))
-sgiSourceSecurityGroupId = lens _securityGroupIngressSourceSecurityGroupId (\s a -> s { _securityGroupIngressSourceSecurityGroupId = a })
-
--- | Specifies the name of the Amazon EC2 security group (non-VPC security
--- group) to allow access or uses the Ref intrinsic function to refer to the
--- logical name of a security group defined in the same template. For
--- instances in a VPC, specify the SourceSecurityGroupId property. Type:
--- String
-sgiSourceSecurityGroupName :: Lens' SecurityGroupIngress (Maybe (Val Text))
-sgiSourceSecurityGroupName = lens _securityGroupIngressSourceSecurityGroupName (\s a -> s { _securityGroupIngressSourceSecurityGroupName = a })
-
--- | Specifies the AWS Account ID of the owner of the Amazon EC2 security
--- group specified in the SourceSecurityGroupName property. Type: String
-sgiSourceSecurityGroupOwnerId :: Lens' SecurityGroupIngress (Maybe (Val Text))
-sgiSourceSecurityGroupOwnerId = lens _securityGroupIngressSourceSecurityGroupOwnerId (\s a -> s { _securityGroupIngressSourceSecurityGroupOwnerId = a })
-
--- | End of port range for the TCP and UDP protocols, or an ICMP code. If you
--- specify icmp for the IpProtocol property, you can specify -1 as a wildcard
--- (i.e., any ICMP code). Type: Integer
-sgiToPort :: Lens' SecurityGroupIngress (Maybe (Val Integer'))
-sgiToPort = lens _securityGroupIngressToPort (\s a -> s { _securityGroupIngressToPort = a })
diff --git a/library-gen/Stratosphere/Resources/Stack.hs b/library-gen/Stratosphere/Resources/Stack.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/Stack.hs
+++ /dev/null
@@ -1,89 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::CloudFormation::Stack type nests a stack as a resource in a
--- top-level template. You can add output values from a nested stack within
--- the containing template. You use the GetAtt function with the nested
--- stack's logical name and the name of the output value in the nested stack
--- in the format Outputs.NestedStackOutputName. When you apply template
--- changes to update a top-level stack, AWS CloudFormation updates the
--- top-level stack and initiates an update to its nested stacks. AWS
--- CloudFormation updates the resources of modified nested stacks, but does
--- not update the resources of unmodified nested stacks. For more information,
--- see AWS CloudFormation Stacks Updates.
-
-module Stratosphere.Resources.Stack where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.ResourceTag
-import Stratosphere.Parameters
-
--- | Full data type definition for Stack. See 'stack' for a more convenient
--- constructor.
-data Stack =
-  Stack
-  { _stackNotificationARNs :: Maybe [Val Text]
-  , _stackParameters :: Maybe Parameters
-  , _stackResourceTags :: Maybe [ResourceTag]
-  , _stackTemplateURL :: Val Text
-  , _stackTimeoutInMinutes :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON Stack where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 6, omitNothingFields = True }
-
-instance FromJSON Stack where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 6, omitNothingFields = True }
-
--- | Constructor for 'Stack' containing required fields as arguments.
-stack
-  :: Val Text -- ^ 'sTemplateURL'
-  -> Stack
-stack templateURLarg =
-  Stack
-  { _stackNotificationARNs = Nothing
-  , _stackParameters = Nothing
-  , _stackResourceTags = Nothing
-  , _stackTemplateURL = templateURLarg
-  , _stackTimeoutInMinutes = Nothing
-  }
-
--- | A list of existing Amazon SNS topics where notifications about stack
--- events are sent.
-sNotificationARNs :: Lens' Stack (Maybe [Val Text])
-sNotificationARNs = lens _stackNotificationARNs (\s a -> s { _stackNotificationARNs = a })
-
--- | The set of parameters passed to AWS CloudFormation when this nested stack
--- is created. Note If you use the ref function to pass a parameter value to a
--- nested stack, comma-delimited list parameters must be of type String. In
--- other words, you cannot pass values that are of type CommaDelimitedList to
--- nested stacks.
-sParameters :: Lens' Stack (Maybe Parameters)
-sParameters = lens _stackParameters (\s a -> s { _stackParameters = a })
-
--- | An arbitrary set of tags (key–value pairs) to describe this stack.
-sResourceTags :: Lens' Stack (Maybe [ResourceTag])
-sResourceTags = lens _stackResourceTags (\s a -> s { _stackResourceTags = a })
-
--- | The URL of a template that specifies the stack that you want to create as
--- a resource. The template must be stored on an Amazon S3 bucket, so the URL
--- must have the form: https://s3.amazonaws.com/.../TemplateName.template
-sTemplateURL :: Lens' Stack (Val Text)
-sTemplateURL = lens _stackTemplateURL (\s a -> s { _stackTemplateURL = a })
-
--- | The length of time, in minutes, that AWS CloudFormation waits for the
--- nested stack to reach the CREATE_COMPLETE state. The default is no timeout.
--- When AWS CloudFormation detects that the nested stack has reached the
--- CREATE_COMPLETE state, it marks the nested stack resource as
--- CREATE_COMPLETE in the parent stack and resumes creating the parent stack.
--- If the timeout period expires before the nested stack reaches
--- CREATE_COMPLETE, AWS CloudFormation marks the nested stack as failed and
--- rolls back both the nested stack and parent stack.
-sTimeoutInMinutes :: Lens' Stack (Maybe (Val Text))
-sTimeoutInMinutes = lens _stackTimeoutInMinutes (\s a -> s { _stackTimeoutInMinutes = a })
diff --git a/library-gen/Stratosphere/Resources/Subnet.hs b/library-gen/Stratosphere/Resources/Subnet.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/Subnet.hs
+++ /dev/null
@@ -1,71 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Creates a subnet in an existing VPC.
-
-module Stratosphere.Resources.Subnet where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.ResourceTag
-
--- | Full data type definition for Subnet. See 'subnet' for a more convenient
--- constructor.
-data Subnet =
-  Subnet
-  { _subnetAvailabilityZone :: Maybe (Val Text)
-  , _subnetCidrBlock :: Val Text
-  , _subnetMapPublicIpOnLaunch :: Maybe (Val Bool')
-  , _subnetTags :: Maybe [ResourceTag]
-  , _subnetVpcId :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON Subnet where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
-
-instance FromJSON Subnet where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
-
--- | Constructor for 'Subnet' containing required fields as arguments.
-subnet
-  :: Val Text -- ^ 'sCidrBlock'
-  -> Val Text -- ^ 'sVpcId'
-  -> Subnet
-subnet cidrBlockarg vpcIdarg =
-  Subnet
-  { _subnetAvailabilityZone = Nothing
-  , _subnetCidrBlock = cidrBlockarg
-  , _subnetMapPublicIpOnLaunch = Nothing
-  , _subnetTags = Nothing
-  , _subnetVpcId = vpcIdarg
-  }
-
--- | The availability zone in which you want the subnet. Default: AWS selects
--- a zone for you (recommended).
-sAvailabilityZone :: Lens' Subnet (Maybe (Val Text))
-sAvailabilityZone = lens _subnetAvailabilityZone (\s a -> s { _subnetAvailabilityZone = a })
-
--- | The CIDR block that you want the subnet to cover (for example,
--- "10.0.0.0/24").
-sCidrBlock :: Lens' Subnet (Val Text)
-sCidrBlock = lens _subnetCidrBlock (\s a -> s { _subnetCidrBlock = a })
-
--- | Indicates whether instances that are launched in this subnet receive a
--- public IP address. By default, the value is false.
-sMapPublicIpOnLaunch :: Lens' Subnet (Maybe (Val Bool'))
-sMapPublicIpOnLaunch = lens _subnetMapPublicIpOnLaunch (\s a -> s { _subnetMapPublicIpOnLaunch = a })
-
--- | An arbitrary set of tags (key–value pairs) for this subnet.
-sTags :: Lens' Subnet (Maybe [ResourceTag])
-sTags = lens _subnetTags (\s a -> s { _subnetTags = a })
-
--- | A Ref structure that contains the ID of the VPC on which you want to
--- create the subnet. The VPC ID is provided as the value of the "Ref"
--- property, as: { "Ref": "VPCID" }.
-sVpcId :: Lens' Subnet (Val Text)
-sVpcId = lens _subnetVpcId (\s a -> s { _subnetVpcId = a })
diff --git a/library-gen/Stratosphere/Resources/SubnetRouteTableAssociation.hs b/library-gen/Stratosphere/Resources/SubnetRouteTableAssociation.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/SubnetRouteTableAssociation.hs
+++ /dev/null
@@ -1,51 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Associates a subnet with a route table.
-
-module Stratosphere.Resources.SubnetRouteTableAssociation where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for SubnetRouteTableAssociation. See
--- 'subnetRouteTableAssociation' for a more convenient constructor.
-data SubnetRouteTableAssociation =
-  SubnetRouteTableAssociation
-  { _subnetRouteTableAssociationRouteTableId :: Val Text
-  , _subnetRouteTableAssociationSubnetId :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON SubnetRouteTableAssociation where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
-
-instance FromJSON SubnetRouteTableAssociation where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }
-
--- | Constructor for 'SubnetRouteTableAssociation' containing required fields
--- as arguments.
-subnetRouteTableAssociation
-  :: Val Text -- ^ 'srtaRouteTableId'
-  -> Val Text -- ^ 'srtaSubnetId'
-  -> SubnetRouteTableAssociation
-subnetRouteTableAssociation routeTableIdarg subnetIdarg =
-  SubnetRouteTableAssociation
-  { _subnetRouteTableAssociationRouteTableId = routeTableIdarg
-  , _subnetRouteTableAssociationSubnetId = subnetIdarg
-  }
-
--- | The ID of the route table. This is commonly written as a reference to a
--- route table declared elsewhere in the template. For example:
-srtaRouteTableId :: Lens' SubnetRouteTableAssociation (Val Text)
-srtaRouteTableId = lens _subnetRouteTableAssociationRouteTableId (\s a -> s { _subnetRouteTableAssociationRouteTableId = a })
-
--- | The ID of the subnet. This is commonly written as a reference to a subnet
--- declared elsewhere in the template. For example:
-srtaSubnetId :: Lens' SubnetRouteTableAssociation (Val Text)
-srtaSubnetId = lens _subnetRouteTableAssociationSubnetId (\s a -> s { _subnetRouteTableAssociationSubnetId = a })
diff --git a/library-gen/Stratosphere/Resources/Trail.hs b/library-gen/Stratosphere/Resources/Trail.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/Trail.hs
+++ /dev/null
@@ -1,123 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::CloudTrail::Trail resource creates a trail and specifies where
--- logs are published. An AWS CloudTrail (CloudTrail) trail can capture AWS
--- API calls made by your AWS account and publishes the logs to an Amazon S3
--- bucket. For more information, see What is AWS CloudTrail? in the AWS
--- CloudTrail User Guide.
-
-module Stratosphere.Resources.Trail where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.ResourceTag
-
--- | Full data type definition for Trail. See 'trail' for a more convenient
--- constructor.
-data Trail =
-  Trail
-  { _trailCloudWatchLogsLogGroupArn :: Maybe (Val Text)
-  , _trailCloudWatchLogsRoleArn :: Maybe (Val Text)
-  , _trailEnableLogFileValidation :: Maybe (Val Bool)
-  , _trailIncludeGlobalServiceEvents :: Maybe (Val Bool)
-  , _trailIsLogging :: Val Bool
-  , _trailIsMultiRegionTrail :: Maybe (Val Bool)
-  , _trailKMSKeyId :: Maybe (Val Text)
-  , _trailS3BucketName :: Val Text
-  , _trailS3KeyPrefix :: Maybe (Val Text)
-  , _trailSnsTopicName :: Maybe (Val Text)
-  , _trailTags :: Maybe [ResourceTag]
-  } deriving (Show, Generic)
-
-instance ToJSON Trail where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 6, omitNothingFields = True }
-
-instance FromJSON Trail where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 6, omitNothingFields = True }
-
--- | Constructor for 'Trail' containing required fields as arguments.
-trail
-  :: Val Bool -- ^ 'tIsLogging'
-  -> Val Text -- ^ 'tS3BucketName'
-  -> Trail
-trail isLoggingarg s3BucketNamearg =
-  Trail
-  { _trailCloudWatchLogsLogGroupArn = Nothing
-  , _trailCloudWatchLogsRoleArn = Nothing
-  , _trailEnableLogFileValidation = Nothing
-  , _trailIncludeGlobalServiceEvents = Nothing
-  , _trailIsLogging = isLoggingarg
-  , _trailIsMultiRegionTrail = Nothing
-  , _trailKMSKeyId = Nothing
-  , _trailS3BucketName = s3BucketNamearg
-  , _trailS3KeyPrefix = Nothing
-  , _trailSnsTopicName = Nothing
-  , _trailTags = Nothing
-  }
-
--- | The Amazon Resource Name (ARN) of a log group to which CloudTrail logs
--- will be delivered.
-tCloudWatchLogsLogGroupArn :: Lens' Trail (Maybe (Val Text))
-tCloudWatchLogsLogGroupArn = lens _trailCloudWatchLogsLogGroupArn (\s a -> s { _trailCloudWatchLogsLogGroupArn = a })
-
--- | The role ARN that Amazon CloudWatch Logs (CloudWatch Logs) assumes to
--- write logs to a log group. For more information, see Role Policy Document
--- for CloudTrail to Use CloudWatch Logs for Monitoring in the AWS CloudTrail
--- User Guide.
-tCloudWatchLogsRoleArn :: Lens' Trail (Maybe (Val Text))
-tCloudWatchLogsRoleArn = lens _trailCloudWatchLogsRoleArn (\s a -> s { _trailCloudWatchLogsRoleArn = a })
-
--- | Indicates whether CloudTrail validates the integrity of log files. By
--- default, AWS CloudFormation sets this value to false. When you disable log
--- file integrity validation, CloudTrail stops creating digest files. For more
--- information, see CreateTrail in the AWS CloudTrail API Reference.
-tEnableLogFileValidation :: Lens' Trail (Maybe (Val Bool))
-tEnableLogFileValidation = lens _trailEnableLogFileValidation (\s a -> s { _trailEnableLogFileValidation = a })
-
--- | Indicates whether the trail is publishing events from global services,
--- such as IAM, to the log files. By default, AWS CloudFormation sets this
--- value to false.
-tIncludeGlobalServiceEvents :: Lens' Trail (Maybe (Val Bool))
-tIncludeGlobalServiceEvents = lens _trailIncludeGlobalServiceEvents (\s a -> s { _trailIncludeGlobalServiceEvents = a })
-
--- | Indicates whether the CloudTrail trail is currently logging AWS API
--- calls.
-tIsLogging :: Lens' Trail (Val Bool)
-tIsLogging = lens _trailIsLogging (\s a -> s { _trailIsLogging = a })
-
--- | Indicates whether the CloudTrail trail is created in the region in which
--- you create the stack (false) or in all regions (true). By default, AWS
--- CloudFormation sets this value to false. For more information, see How Does
--- CloudTrail Behave Regionally and Globally? in the AWS CloudTrail User
--- Guide.
-tIsMultiRegionTrail :: Lens' Trail (Maybe (Val Bool))
-tIsMultiRegionTrail = lens _trailIsMultiRegionTrail (\s a -> s { _trailIsMultiRegionTrail = a })
-
--- | The AWS Key Management Service (AWS KMS) key ID that you want to use to
--- encrypt CloudTrail logs. You can specify an alias name (prefixed with
--- alias/), an alias ARN, a key ARN, or a globally unique identifier.
-tKMSKeyId :: Lens' Trail (Maybe (Val Text))
-tKMSKeyId = lens _trailKMSKeyId (\s a -> s { _trailKMSKeyId = a })
-
--- | The name of the Amazon S3 bucket where CloudTrail publishes log files.
-tS3BucketName :: Lens' Trail (Val Text)
-tS3BucketName = lens _trailS3BucketName (\s a -> s { _trailS3BucketName = a })
-
--- | An Amazon S3 object key prefix that precedes the name of all log files.
-tS3KeyPrefix :: Lens' Trail (Maybe (Val Text))
-tS3KeyPrefix = lens _trailS3KeyPrefix (\s a -> s { _trailS3KeyPrefix = a })
-
--- | The name of an Amazon SNS topic that is notified when new log files are
--- published.
-tSnsTopicName :: Lens' Trail (Maybe (Val Text))
-tSnsTopicName = lens _trailSnsTopicName (\s a -> s { _trailSnsTopicName = a })
-
--- | An arbitrary set of tags (key–value pairs) for this trail.
-tTags :: Lens' Trail (Maybe [ResourceTag])
-tTags = lens _trailTags (\s a -> s { _trailTags = a })
diff --git a/library-gen/Stratosphere/Resources/User.hs b/library-gen/Stratosphere/Resources/User.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/User.hs
+++ /dev/null
@@ -1,79 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::IAM::User type creates a user.
-
-module Stratosphere.Resources.User where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.IAMPolicies
-import Stratosphere.ResourceProperties.UserLoginProfile
-
--- | Full data type definition for User. See 'user' for a more convenient
--- constructor.
-data User =
-  User
-  { _userGroups :: Maybe [Val Text]
-  , _userLoginProfile :: Maybe UserLoginProfile
-  , _userManagedPolicyArns :: Maybe [Val Text]
-  , _userPath :: Maybe (Val Text)
-  , _userPolicies :: Maybe [IAMPolicies]
-  , _userUserName :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON User where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 5, omitNothingFields = True }
-
-instance FromJSON User where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 5, omitNothingFields = True }
-
--- | Constructor for 'User' containing required fields as arguments.
-user
-  :: User
-user  =
-  User
-  { _userGroups = Nothing
-  , _userLoginProfile = Nothing
-  , _userManagedPolicyArns = Nothing
-  , _userPath = Nothing
-  , _userPolicies = Nothing
-  , _userUserName = Nothing
-  }
-
--- | A name of a group to which you want to add the user.
-uGroups :: Lens' User (Maybe [Val Text])
-uGroups = lens _userGroups (\s a -> s { _userGroups = a })
-
--- | Creates a login profile so that the user can access the AWS Management
--- Console.
-uLoginProfile :: Lens' User (Maybe UserLoginProfile)
-uLoginProfile = lens _userLoginProfile (\s a -> s { _userLoginProfile = a })
-
--- | One or more managed policy ARNs to attach to this user.
-uManagedPolicyArns :: Lens' User (Maybe [Val Text])
-uManagedPolicyArns = lens _userManagedPolicyArns (\s a -> s { _userManagedPolicyArns = a })
-
--- | The path for the user name. For more information about paths, see
--- Identifiers for IAM Entities in Using AWS Identity and Access Management.
-uPath :: Lens' User (Maybe (Val Text))
-uPath = lens _userPath (\s a -> s { _userPath = a })
-
--- | The policies to associate with this user. For information about policies,
--- see Overview of Policies in [Using IAM]. Note If you specify multiple
--- polices, specify unique values for the policy name. If you don't, updates
--- to the IAM user will fail.
-uPolicies :: Lens' User (Maybe [IAMPolicies])
-uPolicies = lens _userPolicies (\s a -> s { _userPolicies = a })
-
--- | A name for the IAM user. For valid values, see the UserName parameter for
--- the CreateUser action in the IAM API Reference. If you don't specify a
--- name, AWS CloudFormation generates a unique physical ID and uses that ID
--- for the group name.
-uUserName :: Lens' User (Maybe (Val Text))
-uUserName = lens _userUserName (\s a -> s { _userUserName = a })
diff --git a/library-gen/Stratosphere/Resources/UserToGroupAddition.hs b/library-gen/Stratosphere/Resources/UserToGroupAddition.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/UserToGroupAddition.hs
+++ /dev/null
@@ -1,51 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::IAM::UserToGroupAddition type adds AWS Identity and Access
--- Management (IAM) users to a group. This type supports updates. For more
--- information about updating stacks, see AWS CloudFormation Stacks Updates.
-
-module Stratosphere.Resources.UserToGroupAddition where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for UserToGroupAddition. See
--- 'userToGroupAddition' for a more convenient constructor.
-data UserToGroupAddition =
-  UserToGroupAddition
-  { _userToGroupAdditionGroupName :: Val Text
-  , _userToGroupAdditionUsers :: [Val Text]
-  } deriving (Show, Generic)
-
-instance ToJSON UserToGroupAddition where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
-
-instance FromJSON UserToGroupAddition where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
-
--- | Constructor for 'UserToGroupAddition' containing required fields as
--- arguments.
-userToGroupAddition
-  :: Val Text -- ^ 'utgaGroupName'
-  -> [Val Text] -- ^ 'utgaUsers'
-  -> UserToGroupAddition
-userToGroupAddition groupNamearg usersarg =
-  UserToGroupAddition
-  { _userToGroupAdditionGroupName = groupNamearg
-  , _userToGroupAdditionUsers = usersarg
-  }
-
--- | The name of group to add users to.
-utgaGroupName :: Lens' UserToGroupAddition (Val Text)
-utgaGroupName = lens _userToGroupAdditionGroupName (\s a -> s { _userToGroupAdditionGroupName = a })
-
--- |
-utgaUsers :: Lens' UserToGroupAddition [Val Text]
-utgaUsers = lens _userToGroupAdditionUsers (\s a -> s { _userToGroupAdditionUsers = a })
diff --git a/library-gen/Stratosphere/Resources/VPC.hs b/library-gen/Stratosphere/Resources/VPC.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/VPC.hs
+++ /dev/null
@@ -1,76 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Creates a Virtual Private Cloud (VPC) with the CIDR block that you
--- specify.
-
-module Stratosphere.Resources.VPC where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.ResourceTag
-
--- | Full data type definition for VPC. See 'vpc' for a more convenient
--- constructor.
-data VPC =
-  VPC
-  { _vPCCidrBlock :: Val Text
-  , _vPCEnableDnsSupport :: Maybe (Val Bool')
-  , _vPCEnableDnsHostnames :: Maybe (Val Bool')
-  , _vPCInstanceTenancy :: Maybe (Val Text)
-  , _vPCTags :: Maybe [ResourceTag]
-  } deriving (Show, Generic)
-
-instance ToJSON VPC where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 4, omitNothingFields = True }
-
-instance FromJSON VPC where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 4, omitNothingFields = True }
-
--- | Constructor for 'VPC' containing required fields as arguments.
-vpc
-  :: Val Text -- ^ 'vpcCidrBlock'
-  -> VPC
-vpc cidrBlockarg =
-  VPC
-  { _vPCCidrBlock = cidrBlockarg
-  , _vPCEnableDnsSupport = Nothing
-  , _vPCEnableDnsHostnames = Nothing
-  , _vPCInstanceTenancy = Nothing
-  , _vPCTags = Nothing
-  }
-
--- | The CIDR block you want the VPC to cover. For example: "10.0.0.0/16".
-vpcCidrBlock :: Lens' VPC (Val Text)
-vpcCidrBlock = lens _vPCCidrBlock (\s a -> s { _vPCCidrBlock = a })
-
--- | Specifies whether DNS resolution is supported for the VPC. If this
--- attribute is true, the Amazon DNS server resolves DNS hostnames for your
--- instances to their corresponding IP addresses; otherwise, it does not. By
--- default the value is set to true.
-vpcEnableDnsSupport :: Lens' VPC (Maybe (Val Bool'))
-vpcEnableDnsSupport = lens _vPCEnableDnsSupport (\s a -> s { _vPCEnableDnsSupport = a })
-
--- | Specifies whether the instances launched in the VPC get DNS hostnames. If
--- this attribute is true, instances in the VPC get DNS hostnames; otherwise,
--- they do not. You can only set EnableDnsHostnames to true if you also set
--- the EnableDnsSupport attribute to true. By default, the value is set to
--- false.
-vpcEnableDnsHostnames :: Lens' VPC (Maybe (Val Bool'))
-vpcEnableDnsHostnames = lens _vPCEnableDnsHostnames (\s a -> s { _vPCEnableDnsHostnames = a })
-
--- | The allowed tenancy of instances launched into the VPC. "default":
--- Instances can be launched with any tenancy. "dedicated": Any instance
--- launched into the VPC will automatically be dedicated, regardless of the
--- tenancy option you specify when you launch the instance.
-vpcInstanceTenancy :: Lens' VPC (Maybe (Val Text))
-vpcInstanceTenancy = lens _vPCInstanceTenancy (\s a -> s { _vPCInstanceTenancy = a })
-
--- | An arbitrary set of tags (key–value pairs) for this VPC.
-vpcTags :: Lens' VPC (Maybe [ResourceTag])
-vpcTags = lens _vPCTags (\s a -> s { _vPCTags = a })
diff --git a/library-gen/Stratosphere/Resources/VPCEndpoint.hs b/library-gen/Stratosphere/Resources/VPCEndpoint.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/VPCEndpoint.hs
+++ /dev/null
@@ -1,68 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::EC2::VPCEndpoint resource creates a VPC endpoint that you can
--- use to establish a private connection between your VPC and another AWS
--- service without requiring access over the Internet, a VPN connection, or
--- AWS Direct Connect.
-
-module Stratosphere.Resources.VPCEndpoint where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for VPCEndpoint. See 'vpcEndpoint' for a more
--- convenient constructor.
-data VPCEndpoint =
-  VPCEndpoint
-  { _vPCEndpointPolicyDocument :: Maybe Object
-  , _vPCEndpointRouteTableIds :: Maybe [Val Text]
-  , _vPCEndpointServiceName :: Val Text
-  , _vPCEndpointVpcId :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON VPCEndpoint where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
-
-instance FromJSON VPCEndpoint where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }
-
--- | Constructor for 'VPCEndpoint' containing required fields as arguments.
-vpcEndpoint
-  :: Val Text -- ^ 'vpceServiceName'
-  -> Val Text -- ^ 'vpceVpcId'
-  -> VPCEndpoint
-vpcEndpoint serviceNamearg vpcIdarg =
-  VPCEndpoint
-  { _vPCEndpointPolicyDocument = Nothing
-  , _vPCEndpointRouteTableIds = Nothing
-  , _vPCEndpointServiceName = serviceNamearg
-  , _vPCEndpointVpcId = vpcIdarg
-  }
-
--- | A policy to attach to the endpoint that controls access to the service.
--- The policy must be valid JSON. The default policy allows full access to the
--- AWS service. For more information, see Controlling Access to Services in
--- the Amazon VPC User Guide.
-vpcePolicyDocument :: Lens' VPCEndpoint (Maybe Object)
-vpcePolicyDocument = lens _vPCEndpointPolicyDocument (\s a -> s { _vPCEndpointPolicyDocument = a })
-
--- | One or more route table IDs that are used by the VPC to reach the
--- endpoint.
-vpceRouteTableIds :: Lens' VPCEndpoint (Maybe [Val Text])
-vpceRouteTableIds = lens _vPCEndpointRouteTableIds (\s a -> s { _vPCEndpointRouteTableIds = a })
-
--- | The AWS service to which you want to establish a connection. Specify the
--- service name in the form of com.amazonaws.region.service.
-vpceServiceName :: Lens' VPCEndpoint (Val Text)
-vpceServiceName = lens _vPCEndpointServiceName (\s a -> s { _vPCEndpointServiceName = a })
-
--- | The ID of the VPC in which the endpoint is used.
-vpceVpcId :: Lens' VPCEndpoint (Val Text)
-vpceVpcId = lens _vPCEndpointVpcId (\s a -> s { _vPCEndpointVpcId = a })
diff --git a/library-gen/Stratosphere/Resources/VPCGatewayAttachment.hs b/library-gen/Stratosphere/Resources/VPCGatewayAttachment.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/VPCGatewayAttachment.hs
+++ /dev/null
@@ -1,54 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Attaches a gateway to a VPC.
-
-module Stratosphere.Resources.VPCGatewayAttachment where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for VPCGatewayAttachment. See
--- 'vpcGatewayAttachment' for a more convenient constructor.
-data VPCGatewayAttachment =
-  VPCGatewayAttachment
-  { _vPCGatewayAttachmentInternetGatewayId :: Maybe (Val Text)
-  , _vPCGatewayAttachmentVpcId :: Val Text
-  , _vPCGatewayAttachmentVpnGatewayId :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON VPCGatewayAttachment where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
-
-instance FromJSON VPCGatewayAttachment where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
-
--- | Constructor for 'VPCGatewayAttachment' containing required fields as
--- arguments.
-vpcGatewayAttachment
-  :: Val Text -- ^ 'vpcgaVpcId'
-  -> VPCGatewayAttachment
-vpcGatewayAttachment vpcIdarg =
-  VPCGatewayAttachment
-  { _vPCGatewayAttachmentInternetGatewayId = Nothing
-  , _vPCGatewayAttachmentVpcId = vpcIdarg
-  , _vPCGatewayAttachmentVpnGatewayId = Nothing
-  }
-
--- | The ID of the Internet gateway.
-vpcgaInternetGatewayId :: Lens' VPCGatewayAttachment (Maybe (Val Text))
-vpcgaInternetGatewayId = lens _vPCGatewayAttachmentInternetGatewayId (\s a -> s { _vPCGatewayAttachmentInternetGatewayId = a })
-
--- | The ID of the VPC to associate with this gateway.
-vpcgaVpcId :: Lens' VPCGatewayAttachment (Val Text)
-vpcgaVpcId = lens _vPCGatewayAttachmentVpcId (\s a -> s { _vPCGatewayAttachmentVpcId = a })
-
--- | The ID of the virtual private network (VPN) gateway to attach to the VPC.
-vpcgaVpnGatewayId :: Lens' VPCGatewayAttachment (Maybe (Val Text))
-vpcgaVpnGatewayId = lens _vPCGatewayAttachmentVpnGatewayId (\s a -> s { _vPCGatewayAttachmentVpnGatewayId = a })
diff --git a/library-gen/Stratosphere/Resources/Volume.hs b/library-gen/Stratosphere/Resources/Volume.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/Volume.hs
+++ /dev/null
@@ -1,121 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | The AWS::EC2::Volume type creates a new Amazon Elastic Block Store
--- (Amazon EBS) volume. You can set a deletion policy for your volume to
--- control how AWS CloudFormation handles the volume when the stack is
--- deleted. For Amazon EBS volumes, you can choose to retain the volume, to
--- delete the volume, or to create a snapshot of the volume. For more
--- information, see DeletionPolicy Attribute.
-
-module Stratosphere.Resources.Volume where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.ResourceTag
-
--- | Full data type definition for Volume. See 'volume' for a more convenient
--- constructor.
-data Volume =
-  Volume
-  { _volumeAutoEnableIO :: Maybe (Val Bool')
-  , _volumeAvailabilityZone :: Val Text
-  , _volumeEncrypted :: Maybe (Val Bool')
-  , _volumeIops :: Maybe (Val Integer')
-  , _volumeKmsKeyId :: Maybe (Val Text)
-  , _volumeSize :: Maybe (Val Text)
-  , _volumeSnapshotId :: Maybe (Val Text)
-  , _volumeTags :: Maybe [ResourceTag]
-  , _volumeVolumeType :: Maybe (Val Text)
-  } deriving (Show, Generic)
-
-instance ToJSON Volume where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
-
-instance FromJSON Volume where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
-
--- | Constructor for 'Volume' containing required fields as arguments.
-volume
-  :: Val Text -- ^ 'vAvailabilityZone'
-  -> Volume
-volume availabilityZonearg =
-  Volume
-  { _volumeAutoEnableIO = Nothing
-  , _volumeAvailabilityZone = availabilityZonearg
-  , _volumeEncrypted = Nothing
-  , _volumeIops = Nothing
-  , _volumeKmsKeyId = Nothing
-  , _volumeSize = Nothing
-  , _volumeSnapshotId = Nothing
-  , _volumeTags = Nothing
-  , _volumeVolumeType = Nothing
-  }
-
--- | Indicates whether the volume is auto-enabled for I/O operations. By
--- default, Amazon EBS disables I/O to the volume from attached EC2 instances
--- when it determines that a volume's data is potentially inconsistent. If the
--- consistency of the volume is not a concern, and you prefer that the volume
--- be made available immediately if it's impaired, you can configure the
--- volume to automatically enable I/O. For more information, see Working with
--- the AutoEnableIO Volume Attribute in the Amazon EC2 User Guide for Linux
--- Instances.
-vAutoEnableIO :: Lens' Volume (Maybe (Val Bool'))
-vAutoEnableIO = lens _volumeAutoEnableIO (\s a -> s { _volumeAutoEnableIO = a })
-
--- | The Availability Zone in which to create the new volume.
-vAvailabilityZone :: Lens' Volume (Val Text)
-vAvailabilityZone = lens _volumeAvailabilityZone (\s a -> s { _volumeAvailabilityZone = a })
-
--- | Indicates whether the volume is encrypted. Encrypted Amazon EBS volumes
--- can only be attached to instance types that support Amazon EBS encryption.
--- Volumes that are created from encrypted snapshots are automatically
--- encrypted. You cannot create an encrypted volume from an unencrypted
--- snapshot or vice versa. If your AMI uses encrypted volumes, you can only
--- launch the AMI on supported instance types. For more information, see
--- Amazon EBS encryption in the Amazon EC2 User Guide for Linux Instances.
-vEncrypted :: Lens' Volume (Maybe (Val Bool'))
-vEncrypted = lens _volumeEncrypted (\s a -> s { _volumeEncrypted = a })
-
--- | The number of I/O operations per second (IOPS) that the volume supports.
--- For more information about the valid sizes for each volume type, see the
--- Iops parameter for the CreateVolume action in the Amazon EC2 API Reference.
-vIops :: Lens' Volume (Maybe (Val Integer'))
-vIops = lens _volumeIops (\s a -> s { _volumeIops = a })
-
--- | The Amazon Resource Name (ARN) of the AWS Key Management Service master
--- key that is used to create the encrypted volume, such as
--- arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef.
--- If you create an encrypted volume and don't specify this property, the
--- default master key is used.
-vKmsKeyId :: Lens' Volume (Maybe (Val Text))
-vKmsKeyId = lens _volumeKmsKeyId (\s a -> s { _volumeKmsKeyId = a })
-
--- | The size of the volume, in gibibytes (GiBs). For more information about
--- the valid sizes for each volume type, see the Size parameter for the
--- CreateVolume action in the Amazon EC2 API Reference. If you specify the
--- SnapshotId property, specify a size that is equal to or greater than the
--- snapshot size. If you don't specify a size, Amazon EC2 will use the size of
--- the snapshot as the volume size.
-vSize :: Lens' Volume (Maybe (Val Text))
-vSize = lens _volumeSize (\s a -> s { _volumeSize = a })
-
--- | The snapshot from which to create the new volume.
-vSnapshotId :: Lens' Volume (Maybe (Val Text))
-vSnapshotId = lens _volumeSnapshotId (\s a -> s { _volumeSnapshotId = a })
-
--- | An arbitrary set of tags (key–value pairs) for this volume.
-vTags :: Lens' Volume (Maybe [ResourceTag])
-vTags = lens _volumeTags (\s a -> s { _volumeTags = a })
-
--- | The volume type. You can specify standard, io1, or gp2. If you set the
--- type to io1, you must also set the Iops property. For more information
--- about these values and the default value, see the VolumeType parameter for
--- the CreateVolume action in the Amazon EC2 API Reference.
-vVolumeType :: Lens' Volume (Maybe (Val Text))
-vVolumeType = lens _volumeVolumeType (\s a -> s { _volumeVolumeType = a })
diff --git a/library-gen/Stratosphere/Resources/VolumeAttachment.hs b/library-gen/Stratosphere/Resources/VolumeAttachment.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/Resources/VolumeAttachment.hs
+++ /dev/null
@@ -1,62 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Attaches an Amazon EBS volume to a running instance and exposes it to the
--- instance with the specified device name.
-
-module Stratosphere.Resources.VolumeAttachment where
-
-import Control.Lens
-import Data.Aeson
-import Data.Aeson.Types
-import Data.Text
-import GHC.Generics
-
-import Stratosphere.Values
-
-
--- | Full data type definition for VolumeAttachment. See 'volumeAttachment'
--- for a more convenient constructor.
-data VolumeAttachment =
-  VolumeAttachment
-  { _volumeAttachmentDevice :: Val Text
-  , _volumeAttachmentInstanceId :: Val Text
-  , _volumeAttachmentVolumeId :: Val Text
-  } deriving (Show, Generic)
-
-instance ToJSON VolumeAttachment where
-  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
-
-instance FromJSON VolumeAttachment where
-  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }
-
--- | Constructor for 'VolumeAttachment' containing required fields as
--- arguments.
-volumeAttachment
-  :: Val Text -- ^ 'vaDevice'
-  -> Val Text -- ^ 'vaInstanceId'
-  -> Val Text -- ^ 'vaVolumeId'
-  -> VolumeAttachment
-volumeAttachment devicearg instanceIdarg volumeIdarg =
-  VolumeAttachment
-  { _volumeAttachmentDevice = devicearg
-  , _volumeAttachmentInstanceId = instanceIdarg
-  , _volumeAttachmentVolumeId = volumeIdarg
-  }
-
--- | How the device is exposed to the instance (e.g., /dev/sdh, or xvdh).
-vaDevice :: Lens' VolumeAttachment (Val Text)
-vaDevice = lens _volumeAttachmentDevice (\s a -> s { _volumeAttachmentDevice = a })
-
--- | The ID of the instance to which the volume attaches. This value can be a
--- reference to an AWS::EC2::Instance resource, or it can be the physical ID
--- of an existing EC2 instance.
-vaInstanceId :: Lens' VolumeAttachment (Val Text)
-vaInstanceId = lens _volumeAttachmentInstanceId (\s a -> s { _volumeAttachmentInstanceId = a })
-
--- | The ID of the Amazon EBS volume. The volume and instance must be within
--- the same Availability Zone. This value can be a reference to an
--- AWS::EC2::Volume resource, or it can be the volume ID of an existing Amazon
--- EBS volume.
-vaVolumeId :: Lens' VolumeAttachment (Val Text)
-vaVolumeId = lens _volumeAttachmentVolumeId (\s a -> s { _volumeAttachmentVolumeId = a })
diff --git a/library-gen/Stratosphere/Resources/WAFByteMatchSet.hs b/library-gen/Stratosphere/Resources/WAFByteMatchSet.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/WAFByteMatchSet.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-bytematchset.html
+
+module Stratosphere.Resources.WAFByteMatchSet where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFByteMatchSetByteMatchTuple
+
+-- | Full data type definition for WAFByteMatchSet. See 'wafByteMatchSet' for
+-- | a more convenient constructor.
+data WAFByteMatchSet =
+  WAFByteMatchSet
+  { _wAFByteMatchSetByteMatchTuples :: Maybe [WAFByteMatchSetByteMatchTuple]
+  , _wAFByteMatchSetName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON WAFByteMatchSet where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+
+instance FromJSON WAFByteMatchSet where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }
+
+-- | Constructor for 'WAFByteMatchSet' containing required fields as
+-- | arguments.
+wafByteMatchSet
+  :: Val Text -- ^ 'wafbmsName'
+  -> WAFByteMatchSet
+wafByteMatchSet namearg =
+  WAFByteMatchSet
+  { _wAFByteMatchSetByteMatchTuples = Nothing
+  , _wAFByteMatchSetName = namearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-bytematchset.html#cfn-waf-bytematchset-bytematchtuples
+wafbmsByteMatchTuples :: Lens' WAFByteMatchSet (Maybe [WAFByteMatchSetByteMatchTuple])
+wafbmsByteMatchTuples = lens _wAFByteMatchSetByteMatchTuples (\s a -> s { _wAFByteMatchSetByteMatchTuples = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-bytematchset.html#cfn-waf-bytematchset-name
+wafbmsName :: Lens' WAFByteMatchSet (Val Text)
+wafbmsName = lens _wAFByteMatchSetName (\s a -> s { _wAFByteMatchSetName = a })
diff --git a/library-gen/Stratosphere/Resources/WAFIPSet.hs b/library-gen/Stratosphere/Resources/WAFIPSet.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/WAFIPSet.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-ipset.html
+
+module Stratosphere.Resources.WAFIPSet where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFIPSetIPSetDescriptor
+
+-- | Full data type definition for WAFIPSet. See 'wafipSet' for a more
+-- | convenient constructor.
+data WAFIPSet =
+  WAFIPSet
+  { _wAFIPSetIPSetDescriptors :: Maybe [WAFIPSetIPSetDescriptor]
+  , _wAFIPSetName :: Val Text
+  } deriving (Show, Generic)
+
+instance ToJSON WAFIPSet where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+
+instance FromJSON WAFIPSet where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }
+
+-- | Constructor for 'WAFIPSet' containing required fields as arguments.
+wafipSet
+  :: Val Text -- ^ 'wafipsName'
+  -> WAFIPSet
+wafipSet namearg =
+  WAFIPSet
+  { _wAFIPSetIPSetDescriptors = Nothing
+  , _wAFIPSetName = namearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-ipset.html#cfn-waf-ipset-ipsetdescriptors
+wafipsIPSetDescriptors :: Lens' WAFIPSet (Maybe [WAFIPSetIPSetDescriptor])
+wafipsIPSetDescriptors = lens _wAFIPSetIPSetDescriptors (\s a -> s { _wAFIPSetIPSetDescriptors = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-ipset.html#cfn-waf-ipset-name
+wafipsName :: Lens' WAFIPSet (Val Text)
+wafipsName = lens _wAFIPSetName (\s a -> s { _wAFIPSetName = a })
diff --git a/library-gen/Stratosphere/Resources/WAFRule.hs b/library-gen/Stratosphere/Resources/WAFRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/WAFRule.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-rule.html
+
+module Stratosphere.Resources.WAFRule where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFRulePredicate
+
+-- | Full data type definition for WAFRule. See 'wafRule' for a more
+-- | convenient constructor.
+data WAFRule =
+  WAFRule
+  { _wAFRuleMetricName :: Val Text
+  , _wAFRuleName :: Val Text
+  , _wAFRulePredicates :: Maybe [WAFRulePredicate]
+  } deriving (Show, Generic)
+
+instance ToJSON WAFRule where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+
+instance FromJSON WAFRule where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 8, omitNothingFields = True }
+
+-- | Constructor for 'WAFRule' containing required fields as arguments.
+wafRule
+  :: Val Text -- ^ 'wafrMetricName'
+  -> Val Text -- ^ 'wafrName'
+  -> WAFRule
+wafRule metricNamearg namearg =
+  WAFRule
+  { _wAFRuleMetricName = metricNamearg
+  , _wAFRuleName = namearg
+  , _wAFRulePredicates = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-rule.html#cfn-waf-rule-metricname
+wafrMetricName :: Lens' WAFRule (Val Text)
+wafrMetricName = lens _wAFRuleMetricName (\s a -> s { _wAFRuleMetricName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-rule.html#cfn-waf-rule-name
+wafrName :: Lens' WAFRule (Val Text)
+wafrName = lens _wAFRuleName (\s a -> s { _wAFRuleName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-rule.html#cfn-waf-rule-predicates
+wafrPredicates :: Lens' WAFRule (Maybe [WAFRulePredicate])
+wafrPredicates = lens _wAFRulePredicates (\s a -> s { _wAFRulePredicates = a })
diff --git a/library-gen/Stratosphere/Resources/WAFSizeConstraintSet.hs b/library-gen/Stratosphere/Resources/WAFSizeConstraintSet.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/WAFSizeConstraintSet.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-sizeconstraintset.html
+
+module Stratosphere.Resources.WAFSizeConstraintSet where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFSizeConstraintSetSizeConstraint
+
+-- | Full data type definition for WAFSizeConstraintSet. See
+-- | 'wafSizeConstraintSet' for a more convenient constructor.
+data WAFSizeConstraintSet =
+  WAFSizeConstraintSet
+  { _wAFSizeConstraintSetName :: Val Text
+  , _wAFSizeConstraintSetSizeConstraints :: [WAFSizeConstraintSetSizeConstraint]
+  } deriving (Show, Generic)
+
+instance ToJSON WAFSizeConstraintSet where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+instance FromJSON WAFSizeConstraintSet where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }
+
+-- | Constructor for 'WAFSizeConstraintSet' containing required fields as
+-- | arguments.
+wafSizeConstraintSet
+  :: Val Text -- ^ 'wafscsName'
+  -> [WAFSizeConstraintSetSizeConstraint] -- ^ 'wafscsSizeConstraints'
+  -> WAFSizeConstraintSet
+wafSizeConstraintSet namearg sizeConstraintsarg =
+  WAFSizeConstraintSet
+  { _wAFSizeConstraintSetName = namearg
+  , _wAFSizeConstraintSetSizeConstraints = sizeConstraintsarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-sizeconstraintset.html#cfn-waf-sizeconstraintset-name
+wafscsName :: Lens' WAFSizeConstraintSet (Val Text)
+wafscsName = lens _wAFSizeConstraintSetName (\s a -> s { _wAFSizeConstraintSetName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-sizeconstraintset.html#cfn-waf-sizeconstraintset-sizeconstraints
+wafscsSizeConstraints :: Lens' WAFSizeConstraintSet [WAFSizeConstraintSetSizeConstraint]
+wafscsSizeConstraints = lens _wAFSizeConstraintSetSizeConstraints (\s a -> s { _wAFSizeConstraintSetSizeConstraints = a })
diff --git a/library-gen/Stratosphere/Resources/WAFSqlInjectionMatchSet.hs b/library-gen/Stratosphere/Resources/WAFSqlInjectionMatchSet.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/WAFSqlInjectionMatchSet.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-sqlinjectionmatchset.html
+
+module Stratosphere.Resources.WAFSqlInjectionMatchSet where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFSqlInjectionMatchSetSqlInjectionMatchTuple
+
+-- | Full data type definition for WAFSqlInjectionMatchSet. See
+-- | 'wafSqlInjectionMatchSet' for a more convenient constructor.
+data WAFSqlInjectionMatchSet =
+  WAFSqlInjectionMatchSet
+  { _wAFSqlInjectionMatchSetName :: Val Text
+  , _wAFSqlInjectionMatchSetSqlInjectionMatchTuples :: Maybe [WAFSqlInjectionMatchSetSqlInjectionMatchTuple]
+  } deriving (Show, Generic)
+
+instance ToJSON WAFSqlInjectionMatchSet where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+instance FromJSON WAFSqlInjectionMatchSet where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 24, omitNothingFields = True }
+
+-- | Constructor for 'WAFSqlInjectionMatchSet' containing required fields as
+-- | arguments.
+wafSqlInjectionMatchSet
+  :: Val Text -- ^ 'wafsimsName'
+  -> WAFSqlInjectionMatchSet
+wafSqlInjectionMatchSet namearg =
+  WAFSqlInjectionMatchSet
+  { _wAFSqlInjectionMatchSetName = namearg
+  , _wAFSqlInjectionMatchSetSqlInjectionMatchTuples = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-sqlinjectionmatchset.html#cfn-waf-sqlinjectionmatchset-name
+wafsimsName :: Lens' WAFSqlInjectionMatchSet (Val Text)
+wafsimsName = lens _wAFSqlInjectionMatchSetName (\s a -> s { _wAFSqlInjectionMatchSetName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-sqlinjectionmatchset.html#cfn-waf-sqlinjectionmatchset-sqlinjectionmatchtuples
+wafsimsSqlInjectionMatchTuples :: Lens' WAFSqlInjectionMatchSet (Maybe [WAFSqlInjectionMatchSetSqlInjectionMatchTuple])
+wafsimsSqlInjectionMatchTuples = lens _wAFSqlInjectionMatchSetSqlInjectionMatchTuples (\s a -> s { _wAFSqlInjectionMatchSetSqlInjectionMatchTuples = a })
diff --git a/library-gen/Stratosphere/Resources/WAFWebACL.hs b/library-gen/Stratosphere/Resources/WAFWebACL.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/WAFWebACL.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-webacl.html
+
+module Stratosphere.Resources.WAFWebACL where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFWebACLWafAction
+import Stratosphere.ResourceProperties.WAFWebACLActivatedRule
+
+-- | Full data type definition for WAFWebACL. See 'wafWebACL' for a more
+-- | convenient constructor.
+data WAFWebACL =
+  WAFWebACL
+  { _wAFWebACLDefaultAction :: WAFWebACLWafAction
+  , _wAFWebACLMetricName :: Val Text
+  , _wAFWebACLName :: Val Text
+  , _wAFWebACLRules :: Maybe [WAFWebACLActivatedRule]
+  } deriving (Show, Generic)
+
+instance ToJSON WAFWebACL where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+
+instance FromJSON WAFWebACL where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 10, omitNothingFields = True }
+
+-- | Constructor for 'WAFWebACL' containing required fields as arguments.
+wafWebACL
+  :: WAFWebACLWafAction -- ^ 'wafwaclDefaultAction'
+  -> Val Text -- ^ 'wafwaclMetricName'
+  -> Val Text -- ^ 'wafwaclName'
+  -> WAFWebACL
+wafWebACL defaultActionarg metricNamearg namearg =
+  WAFWebACL
+  { _wAFWebACLDefaultAction = defaultActionarg
+  , _wAFWebACLMetricName = metricNamearg
+  , _wAFWebACLName = namearg
+  , _wAFWebACLRules = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-webacl.html#cfn-waf-webacl-defaultaction
+wafwaclDefaultAction :: Lens' WAFWebACL WAFWebACLWafAction
+wafwaclDefaultAction = lens _wAFWebACLDefaultAction (\s a -> s { _wAFWebACLDefaultAction = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-webacl.html#cfn-waf-webacl-metricname
+wafwaclMetricName :: Lens' WAFWebACL (Val Text)
+wafwaclMetricName = lens _wAFWebACLMetricName (\s a -> s { _wAFWebACLMetricName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-webacl.html#cfn-waf-webacl-name
+wafwaclName :: Lens' WAFWebACL (Val Text)
+wafwaclName = lens _wAFWebACLName (\s a -> s { _wAFWebACLName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-webacl.html#cfn-waf-webacl-rules
+wafwaclRules :: Lens' WAFWebACL (Maybe [WAFWebACLActivatedRule])
+wafwaclRules = lens _wAFWebACLRules (\s a -> s { _wAFWebACLRules = a })
diff --git a/library-gen/Stratosphere/Resources/WAFXssMatchSet.hs b/library-gen/Stratosphere/Resources/WAFXssMatchSet.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/WAFXssMatchSet.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-xssmatchset.html
+
+module Stratosphere.Resources.WAFXssMatchSet where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFXssMatchSetXssMatchTuple
+
+-- | Full data type definition for WAFXssMatchSet. See 'wafXssMatchSet' for a
+-- | more convenient constructor.
+data WAFXssMatchSet =
+  WAFXssMatchSet
+  { _wAFXssMatchSetName :: Val Text
+  , _wAFXssMatchSetXssMatchTuples :: [WAFXssMatchSetXssMatchTuple]
+  } deriving (Show, Generic)
+
+instance ToJSON WAFXssMatchSet where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+instance FromJSON WAFXssMatchSet where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+-- | Constructor for 'WAFXssMatchSet' containing required fields as arguments.
+wafXssMatchSet
+  :: Val Text -- ^ 'wafxmsName'
+  -> [WAFXssMatchSetXssMatchTuple] -- ^ 'wafxmsXssMatchTuples'
+  -> WAFXssMatchSet
+wafXssMatchSet namearg xssMatchTuplesarg =
+  WAFXssMatchSet
+  { _wAFXssMatchSetName = namearg
+  , _wAFXssMatchSetXssMatchTuples = xssMatchTuplesarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-xssmatchset.html#cfn-waf-xssmatchset-name
+wafxmsName :: Lens' WAFXssMatchSet (Val Text)
+wafxmsName = lens _wAFXssMatchSetName (\s a -> s { _wAFXssMatchSetName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-waf-xssmatchset.html#cfn-waf-xssmatchset-xssmatchtuples
+wafxmsXssMatchTuples :: Lens' WAFXssMatchSet [WAFXssMatchSetXssMatchTuple]
+wafxmsXssMatchTuples = lens _wAFXssMatchSetXssMatchTuples (\s a -> s { _wAFXssMatchSetXssMatchTuples = a })
diff --git a/library-gen/Stratosphere/Resources/WorkSpacesWorkspace.hs b/library-gen/Stratosphere/Resources/WorkSpacesWorkspace.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/WorkSpacesWorkspace.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-workspaces-workspace.html
+
+module Stratosphere.Resources.WorkSpacesWorkspace where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for WorkSpacesWorkspace. See
+-- | 'workSpacesWorkspace' for a more convenient constructor.
+data WorkSpacesWorkspace =
+  WorkSpacesWorkspace
+  { _workSpacesWorkspaceBundleId :: Val Text
+  , _workSpacesWorkspaceDirectoryId :: Val Text
+  , _workSpacesWorkspaceRootVolumeEncryptionEnabled :: Maybe (Val Bool')
+  , _workSpacesWorkspaceUserName :: Val Text
+  , _workSpacesWorkspaceUserVolumeEncryptionEnabled :: Maybe (Val Bool')
+  , _workSpacesWorkspaceVolumeEncryptionKey :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON WorkSpacesWorkspace where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+instance FromJSON WorkSpacesWorkspace where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 20, omitNothingFields = True }
+
+-- | Constructor for 'WorkSpacesWorkspace' containing required fields as
+-- | arguments.
+workSpacesWorkspace
+  :: Val Text -- ^ 'wswBundleId'
+  -> Val Text -- ^ 'wswDirectoryId'
+  -> Val Text -- ^ 'wswUserName'
+  -> WorkSpacesWorkspace
+workSpacesWorkspace bundleIdarg directoryIdarg userNamearg =
+  WorkSpacesWorkspace
+  { _workSpacesWorkspaceBundleId = bundleIdarg
+  , _workSpacesWorkspaceDirectoryId = directoryIdarg
+  , _workSpacesWorkspaceRootVolumeEncryptionEnabled = Nothing
+  , _workSpacesWorkspaceUserName = userNamearg
+  , _workSpacesWorkspaceUserVolumeEncryptionEnabled = Nothing
+  , _workSpacesWorkspaceVolumeEncryptionKey = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-workspaces-workspace.html#cfn-workspaces-workspace-bundleid
+wswBundleId :: Lens' WorkSpacesWorkspace (Val Text)
+wswBundleId = lens _workSpacesWorkspaceBundleId (\s a -> s { _workSpacesWorkspaceBundleId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-workspaces-workspace.html#cfn-workspaces-workspace-directoryid
+wswDirectoryId :: Lens' WorkSpacesWorkspace (Val Text)
+wswDirectoryId = lens _workSpacesWorkspaceDirectoryId (\s a -> s { _workSpacesWorkspaceDirectoryId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-workspaces-workspace.html#cfn-workspaces-workspace-rootvolumeencryptionenabled
+wswRootVolumeEncryptionEnabled :: Lens' WorkSpacesWorkspace (Maybe (Val Bool'))
+wswRootVolumeEncryptionEnabled = lens _workSpacesWorkspaceRootVolumeEncryptionEnabled (\s a -> s { _workSpacesWorkspaceRootVolumeEncryptionEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-workspaces-workspace.html#cfn-workspaces-workspace-username
+wswUserName :: Lens' WorkSpacesWorkspace (Val Text)
+wswUserName = lens _workSpacesWorkspaceUserName (\s a -> s { _workSpacesWorkspaceUserName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-workspaces-workspace.html#cfn-workspaces-workspace-uservolumeencryptionenabled
+wswUserVolumeEncryptionEnabled :: Lens' WorkSpacesWorkspace (Maybe (Val Bool'))
+wswUserVolumeEncryptionEnabled = lens _workSpacesWorkspaceUserVolumeEncryptionEnabled (\s a -> s { _workSpacesWorkspaceUserVolumeEncryptionEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-workspaces-workspace.html#cfn-workspaces-workspace-volumeencryptionkey
+wswVolumeEncryptionKey :: Lens' WorkSpacesWorkspace (Maybe (Val Text))
+wswVolumeEncryptionKey = lens _workSpacesWorkspaceVolumeEncryptionKey (\s a -> s { _workSpacesWorkspaceVolumeEncryptionKey = a })
diff --git a/library/Stratosphere/ResourceAttributes/AutoScalingReplacingUpdatePolicy.hs b/library/Stratosphere/ResourceAttributes/AutoScalingReplacingUpdatePolicy.hs
new file mode 100644
--- /dev/null
+++ b/library/Stratosphere/ResourceAttributes/AutoScalingReplacingUpdatePolicy.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | To specify how AWS CloudFormation handles replacing updates for an Auto
+-- Scaling group, use the AutoScalingReplacingUpdate policy.
+
+module Stratosphere.ResourceAttributes.AutoScalingReplacingUpdatePolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for AutoScalingReplacingUpdatePolicy. See
+-- 'autoScalingReplacingUpdatePolicy' for a more convenient constructor.
+data AutoScalingReplacingUpdatePolicy =
+  AutoScalingReplacingUpdatePolicy
+  { _autoScalingReplacingUpdatePolicyWillReplace :: Maybe (Val Bool')
+  } deriving (Show, Generic)
+
+instance ToJSON AutoScalingReplacingUpdatePolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON AutoScalingReplacingUpdatePolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'AutoScalingReplacingUpdatePolicy' containing required fields
+-- as arguments.
+autoScalingReplacingUpdatePolicy
+  :: AutoScalingReplacingUpdatePolicy
+autoScalingReplacingUpdatePolicy  =
+  AutoScalingReplacingUpdatePolicy
+  { _autoScalingReplacingUpdatePolicyWillReplace = Nothing
+  }
+
+-- | Specifies whether an Auto Scaling group and the instances it contains are
+-- replaced during an update. During replacement, AWS CloudFormation retains
+-- the old group until it finishes creating the new one. This allows AWS
+-- CloudFormation to roll back to the old Auto Scaling group if the update
+-- doesn't succeed. While AWS CloudFormation creates the new group, it doesn't
+-- detach or attach any instances. After creating the new Auto Scaling group,
+-- AWS CloudFormation removes the old Auto Scaling group during the cleanup
+-- process. If the update doesn't succeed, AWS CloudFormation removes the new
+-- Auto Scaling group.
+asrupWillReplace :: Lens' AutoScalingReplacingUpdatePolicy (Maybe (Val Bool'))
+asrupWillReplace = lens _autoScalingReplacingUpdatePolicyWillReplace (\s a -> s { _autoScalingReplacingUpdatePolicyWillReplace = a })
diff --git a/library/Stratosphere/ResourceAttributes/AutoScalingRollingUpdatePolicy.hs b/library/Stratosphere/ResourceAttributes/AutoScalingRollingUpdatePolicy.hs
new file mode 100644
--- /dev/null
+++ b/library/Stratosphere/ResourceAttributes/AutoScalingRollingUpdatePolicy.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | To specify how AWS CloudFormation handles rolling updates for an Auto
+-- Scaling group, use the AutoScalingRollingUpdatePolicy policy.
+
+module Stratosphere.ResourceAttributes.AutoScalingRollingUpdatePolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for AutoScalingRollingUpdatePolicy. See
+-- 'autoScalingRollingUpdatePolicy' for a more convenient constructor.
+data AutoScalingRollingUpdatePolicy =
+  AutoScalingRollingUpdatePolicy
+  { _autoScalingRollingUpdatePolicyMaxBatchSize :: Maybe (Val Integer')
+  , _autoScalingRollingUpdatePolicyMinInstancesInService :: Maybe (Val Integer')
+  , _autoScalingRollingUpdatePolicyMinSuccessfulInstancesPercent :: Maybe (Val Integer')
+  , _autoScalingRollingUpdatePolicyPauseTime :: Maybe (Val Text)
+  , _autoScalingRollingUpdatePolicySuspendProcess :: Maybe [Val Text]
+  , _autoScalingRollingUpdatePolicyWaitOnResourceSignals :: Maybe (Val Bool')
+  } deriving (Show, Generic)
+
+instance ToJSON AutoScalingRollingUpdatePolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+instance FromJSON AutoScalingRollingUpdatePolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }
+
+-- | Constructor for 'AutoScalingRollingUpdatePolicy' containing required fields as
+-- arguments.
+autoScalingRollingUpdatePolicy
+  :: AutoScalingRollingUpdatePolicy
+autoScalingRollingUpdatePolicy  =
+  AutoScalingRollingUpdatePolicy
+  { _autoScalingRollingUpdatePolicyMaxBatchSize = Nothing
+  , _autoScalingRollingUpdatePolicyMinInstancesInService = Nothing
+  , _autoScalingRollingUpdatePolicyMinSuccessfulInstancesPercent = Nothing
+  , _autoScalingRollingUpdatePolicyPauseTime = Nothing
+  , _autoScalingRollingUpdatePolicySuspendProcess = Nothing
+  , _autoScalingRollingUpdatePolicyWaitOnResourceSignals = Nothing
+  }
+
+-- | Specifies the maximum number of instances that AWS CloudFormation
+-- terminates.
+asrupMaxBatchSize :: Lens' AutoScalingRollingUpdatePolicy (Maybe (Val Integer'))
+asrupMaxBatchSize = lens _autoScalingRollingUpdatePolicyMaxBatchSize (\s a -> s { _autoScalingRollingUpdatePolicyMaxBatchSize = a })
+
+-- | Specifies the minimum number of instances that must be in service within
+-- the Auto Scaling group while AWS CloudFormation terminates obsolete
+-- instances.
+asrupMinInstancesInService :: Lens' AutoScalingRollingUpdatePolicy (Maybe (Val Integer'))
+asrupMinInstancesInService = lens _autoScalingRollingUpdatePolicyMinInstancesInService (\s a -> s { _autoScalingRollingUpdatePolicyMinInstancesInService = a })
+
+-- | Specifies the percentage of instances in an Auto Scaling rolling update
+-- that must signal success for an update to succeed. You can specify a value
+-- from 0 to 100. AWS CloudFormation rounds to the nearest tenth of a percent.
+-- For example, if you update five instances with a minimum successful
+-- percentage of 50, three instances must signal success. If an instance
+-- doesn't send a signal within the time specified using the PauseTime
+-- property, AWS CloudFormation assumes that the instance wasn't successfully
+-- updated. If you specify this property, you must also enable the
+-- WaitOnResourceSignals and PauseTime properties.
+asrupMinSuccessfulInstancesPercent :: Lens' AutoScalingRollingUpdatePolicy (Maybe (Val Integer'))
+asrupMinSuccessfulInstancesPercent = lens _autoScalingRollingUpdatePolicyMinSuccessfulInstancesPercent (\s a -> s { _autoScalingRollingUpdatePolicyMinSuccessfulInstancesPercent = a })
+
+-- | Specifies the amount of time that AWS CloudFormation should pause after
+-- making a change to a batch of instances to give these instances time to
+-- start software applications. For example, you might need PauseTime when
+-- scaling up the number of instances in an Auto Scaling group. If you enable
+-- the WaitOnResourceSignals property, PauseTime is the amount of time AWS
+-- CloudFormation should wait for the Auto Scaling group to receive the
+-- required number of valid signals from added or replaced instances. If the
+-- PauseTime is exceeded before the Auto Scaling group receives the required
+-- number of signals, the update fails. For best results, specify a time
+-- period that gives your instances sufficient time to get started. If the
+-- update needs to be rolled back, a short PauseTime can cause the rollback to
+-- fail. Specify PauseTime in the ISO8601 duration format (in the format
+-- PT#H#M#S, where each # is the number of hours, minutes, and seconds,
+-- respectively). The maximum PauseTime is one hour (PT1H).
+asrupPauseTime :: Lens' AutoScalingRollingUpdatePolicy (Maybe (Val Text))
+asrupPauseTime = lens _autoScalingRollingUpdatePolicyPauseTime (\s a -> s { _autoScalingRollingUpdatePolicyPauseTime = a })
+
+-- | Specifies the Auto Scaling processes to suspend during a stack update.
+-- Suspending processes prevents Auto Scaling from interfering with a stack
+-- update. For example, you can suspend alarming so that Auto Scaling doesn't
+-- execute scaling policies associated with an alarm. For valid values, see
+-- the ScalingProcesses.member.N parameter for the SuspendProcesses action in
+-- the Auto Scaling API Reference.
+asrupSuspendProcess :: Lens' AutoScalingRollingUpdatePolicy (Maybe [Val Text])
+asrupSuspendProcess = lens _autoScalingRollingUpdatePolicySuspendProcess (\s a -> s { _autoScalingRollingUpdatePolicySuspendProcess = a })
+
+-- | Specifies whether the Auto Scaling group waits on signals from new
+-- instances during an update. AWS CloudFormation suspends the update of an
+-- Auto Scaling group after new Amazon EC2 instances are launched into the
+-- group. AWS CloudFormation must receive a signal from each new instance
+-- within the specified PauseTime before continuing the update. To signal the
+-- Auto Scaling group, use the cfn-signal helper script or SignalResource API.
+-- Use this property to ensure that instances have completed installing and
+-- configuring applications before the Auto Scaling group update proceeds.
+asrupWaitOnResourceSignals :: Lens' AutoScalingRollingUpdatePolicy (Maybe (Val Bool'))
+asrupWaitOnResourceSignals = lens _autoScalingRollingUpdatePolicyWaitOnResourceSignals (\s a -> s { _autoScalingRollingUpdatePolicyWaitOnResourceSignals = a })
diff --git a/library/Stratosphere/ResourceAttributes/AutoScalingScheduledActionPolicy.hs b/library/Stratosphere/ResourceAttributes/AutoScalingScheduledActionPolicy.hs
new file mode 100644
--- /dev/null
+++ b/library/Stratosphere/ResourceAttributes/AutoScalingScheduledActionPolicy.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | To specify how AWS CloudFormation handles updates for the MinSize,
+-- MaxSize, and DesiredCapacity properties when the
+-- AWS::AutoScaling::AutoScalingGroup resource has an associated scheduled
+-- action, use the AutoScalingScheduledAction policy. With scheduled actions,
+-- the group size properties of an Auto Scaling group can change at any time.
+-- When you update a stack with an Auto Scaling group and scheduled action,
+-- AWS CloudFormation always sets the group size property values of your Auto
+-- Scaling group to the values that are defined in the
+-- AWS::AutoScaling::AutoScalingGroup resource of your template, even if a
+-- scheduled action is in effect. If you do not want AWS CloudFormation to
+-- change any of the group size property values when you have a scheduled
+-- action in effect, use the AutoScalingScheduledAction update policy to
+-- prevent AWS CloudFormation from changing the MinSize, MaxSize, or
+-- DesiredCapacity properties unless you have modified these values in your
+-- template.
+
+module Stratosphere.ResourceAttributes.AutoScalingScheduledActionPolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for AutoScalingScheduledActionPolicy. See
+-- 'autoScalingScheduledActionPolicy' for a more convenient constructor.
+data AutoScalingScheduledActionPolicy =
+  AutoScalingScheduledActionPolicy
+  { _autoScalingScheduledActionPolicyIgnoreUnmodifiedGroupSizeProperties :: Maybe (Val Bool')
+  } deriving (Show, Generic)
+
+instance ToJSON AutoScalingScheduledActionPolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+instance FromJSON AutoScalingScheduledActionPolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 27, omitNothingFields = True }
+
+-- | Constructor for 'AutoScalingScheduledActionPolicy' containing required fields
+-- as arguments.
+autoScalingScheduledActionPolicy
+  :: AutoScalingScheduledActionPolicy
+autoScalingScheduledActionPolicy  =
+  AutoScalingScheduledActionPolicy
+  { _autoScalingScheduledActionPolicyIgnoreUnmodifiedGroupSizeProperties = Nothing
+  }
+
+-- | Specifies whether AWS CloudFormation ignores differences in group size
+-- properties between your current Auto Scaling group and the Auto Scaling
+-- group described in the AWS::AutoScaling::AutoScalingGroup resource of your
+-- template during a stack update. If you modify any of the group size
+-- property values in your template, AWS CloudFormation uses the modified
+-- values and updates your Auto Scaling group.
+assapIgnoreUnmodifiedGroupSizeProperties :: Lens' AutoScalingScheduledActionPolicy (Maybe (Val Bool'))
+assapIgnoreUnmodifiedGroupSizeProperties = lens _autoScalingScheduledActionPolicyIgnoreUnmodifiedGroupSizeProperties (\s a -> s { _autoScalingScheduledActionPolicyIgnoreUnmodifiedGroupSizeProperties = a })
diff --git a/library/Stratosphere/ResourceAttributes/CreationPolicy.hs b/library/Stratosphere/ResourceAttributes/CreationPolicy.hs
new file mode 100644
--- /dev/null
+++ b/library/Stratosphere/ResourceAttributes/CreationPolicy.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | You associate the CreationPolicy attribute with a resource to prevent its
+-- status from reaching create complete until AWS CloudFormation receives a
+-- specified number of success signals or the timeout period is exceeded. To
+-- signal a resource, you can use the cfn-signal helper script or
+-- SignalResource API. AWS CloudFormation publishes valid signals to the stack
+-- events so that you track the number of signals sent. The creation policy is
+-- invoked only when AWS CloudFormation creates the associated resource.
+-- Currently, the only AWS CloudFormation resources that support creation
+-- policies are AWS::AutoScaling::AutoScalingGroup, AWS::EC2::Instance, and
+-- AWS::CloudFormation::WaitCondition. The CreationPolicy attribute is helpful
+-- when you want to wait on resource configuration actions before stack
+-- creation proceeds. For example, if you install and configure software
+-- applications on an Amazon EC2 instance, you might want those applications
+-- up and running before proceeding. In such cases, you can add a
+-- CreationPolicy attribute to the instance and then send a success signal to
+-- the instance after the applications are installed and configured. For a
+-- detailed example, see Deploying Applications on Amazon EC2 with AWS
+-- CloudFormation.
+
+module Stratosphere.ResourceAttributes.CreationPolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceAttributes.ResourceSignal
+
+-- | Full data type definition for CreationPolicy. See 'creationPolicy' for a
+-- more convenient constructor.
+data CreationPolicy =
+  CreationPolicy
+  { _creationPolicyResourceSignal :: ResourceSignal
+  } deriving (Show, Generic)
+
+instance ToJSON CreationPolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+instance FromJSON CreationPolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+-- | Constructor for 'CreationPolicy' containing required fields as arguments.
+creationPolicy
+  :: ResourceSignal -- ^ 'cpResourceSignal'
+  -> CreationPolicy
+creationPolicy resourceSignalarg =
+  CreationPolicy
+  { _creationPolicyResourceSignal = resourceSignalarg
+  }
+
+-- |
+cpResourceSignal :: Lens' CreationPolicy ResourceSignal
+cpResourceSignal = lens _creationPolicyResourceSignal (\s a -> s { _creationPolicyResourceSignal = a })
diff --git a/library/Stratosphere/ResourceAttributes/ResourceSignal.hs b/library/Stratosphere/ResourceAttributes/ResourceSignal.hs
new file mode 100644
--- /dev/null
+++ b/library/Stratosphere/ResourceAttributes/ResourceSignal.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- |
+
+module Stratosphere.ResourceAttributes.ResourceSignal where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ResourceSignal. See 'resourceSignal' for a
+-- more convenient constructor.
+data ResourceSignal =
+  ResourceSignal
+  { _resourceSignalCount :: Maybe (Val Integer')
+  , _resourceSignalTimeout :: Maybe (Val Text)
+  } deriving (Show, Generic)
+
+instance ToJSON ResourceSignal where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+instance FromJSON ResourceSignal where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }
+
+-- | Constructor for 'ResourceSignal' containing required fields as arguments.
+resourceSignal
+  :: ResourceSignal
+resourceSignal  =
+  ResourceSignal
+  { _resourceSignalCount = Nothing
+  , _resourceSignalTimeout = Nothing
+  }
+
+-- | The number of success signals AWS CloudFormation must receive before it
+-- sets the resource status as CREATE_COMPLETE. If the resource receives a
+-- failure signal or doesn't receive the specified number of signals before
+-- the timeout period expires, the resource creation fails and AWS
+-- CloudFormation rolls the stack back.
+rsCount :: Lens' ResourceSignal (Maybe (Val Integer'))
+rsCount = lens _resourceSignalCount (\s a -> s { _resourceSignalCount = a })
+
+-- | The length of time that AWS CloudFormation waits for the number of
+-- signals that was specified in the Count property. The timeout period starts
+-- after AWS CloudFormation starts creating the resource, and the timeout
+-- expires no sooner than the time you specify but can occur shortly
+-- thereafter. The maximum time that you can specify is 12 hours. The value
+-- must be in ISO8601 duration format, in the form: "PT#H#M#S", where each #
+-- is the number of hours, minutes, and seconds, respectively. For best
+-- results, specify a period of time that gives your instances plenty of time
+-- to get up and running. A shorter timeout can cause a rollback.
+rsTimeout :: Lens' ResourceSignal (Maybe (Val Text))
+rsTimeout = lens _resourceSignalTimeout (\s a -> s { _resourceSignalTimeout = a })
diff --git a/library/Stratosphere/ResourceAttributes/UpdatePolicy.hs b/library/Stratosphere/ResourceAttributes/UpdatePolicy.hs
new file mode 100644
--- /dev/null
+++ b/library/Stratosphere/ResourceAttributes/UpdatePolicy.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | Use the UpdatePolicy attribute to specify how AWS CloudFormation handles
+-- updates to the AWS::AutoScaling::AutoScalingGroup resource. AWS
+-- CloudFormation invokes one of three update policies depending on the type
+-- of change you make or on whether a scheduled action is associated with the
+-- Auto Scaling group.
+
+module Stratosphere.ResourceAttributes.UpdatePolicy where
+
+import Control.Lens
+import Data.Aeson
+import Data.Aeson.Types
+import Data.Text
+import GHC.Generics
+
+import Stratosphere.Values
+import Stratosphere.ResourceAttributes.AutoScalingReplacingUpdatePolicy
+import Stratosphere.ResourceAttributes.AutoScalingRollingUpdatePolicy
+import Stratosphere.ResourceAttributes.AutoScalingScheduledActionPolicy
+
+-- | Full data type definition for UpdatePolicy. See 'updatePolicy' for a more
+-- convenient constructor.
+data UpdatePolicy =
+  UpdatePolicy
+  { _updatePolicyAutoScalingReplacingUpdate :: Maybe AutoScalingReplacingUpdatePolicy
+  , _updatePolicyAutoScalingRollingUpdate :: Maybe AutoScalingRollingUpdatePolicy
+  , _updatePolicyAutoScalingScheduledAction :: Maybe AutoScalingScheduledActionPolicy
+  } deriving (Show, Generic)
+
+instance ToJSON UpdatePolicy where
+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+
+instance FromJSON UpdatePolicy where
+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 13, omitNothingFields = True }
+
+-- | Constructor for 'UpdatePolicy' containing required fields as arguments.
+updatePolicy
+  :: UpdatePolicy
+updatePolicy  =
+  UpdatePolicy
+  { _updatePolicyAutoScalingReplacingUpdate = Nothing
+  , _updatePolicyAutoScalingRollingUpdate = Nothing
+  , _updatePolicyAutoScalingScheduledAction = Nothing
+  }
+
+-- |
+upAutoScalingReplacingUpdate :: Lens' UpdatePolicy (Maybe AutoScalingReplacingUpdatePolicy)
+upAutoScalingReplacingUpdate = lens _updatePolicyAutoScalingReplacingUpdate (\s a -> s { _updatePolicyAutoScalingReplacingUpdate = a })
+
+-- |
+upAutoScalingRollingUpdate :: Lens' UpdatePolicy (Maybe AutoScalingRollingUpdatePolicy)
+upAutoScalingRollingUpdate = lens _updatePolicyAutoScalingRollingUpdate (\s a -> s { _updatePolicyAutoScalingRollingUpdate = a })
+
+-- |
+upAutoScalingScheduledAction :: Lens' UpdatePolicy (Maybe AutoScalingScheduledActionPolicy)
+upAutoScalingScheduledAction = lens _updatePolicyAutoScalingScheduledAction (\s a -> s { _updatePolicyAutoScalingScheduledAction = a })
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,6 +1,4 @@
-resolver: nightly-2016-11-23  # Make sure to remove hlint from extra-deps if this changes
+resolver: nightly-2016-11-26
 packages:
   - '.'
-extra-deps:
-  # TODO: Remove this once hlint-1.9.38 is in latest nightly
-  - hlint-1.9.38
+extra-deps: []
diff --git a/stratosphere.cabal b/stratosphere.cabal
--- a/stratosphere.cabal
+++ b/stratosphere.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           stratosphere
-version:        0.2.2
+version:        0.3.0
 synopsis:       EDSL for AWS CloudFormation
 description:    EDSL for AWS CloudFormation
 category:       AWS, Cloud
@@ -51,101 +51,288 @@
       Stratosphere.Helpers
       Stratosphere.Outputs
       Stratosphere.Parameters
-      Stratosphere.Template
-      Stratosphere.Types
-      Stratosphere.Values
-      Stratosphere.ResourceAttributes.AutoScalingReplacingUpdate
-      Stratosphere.ResourceAttributes.AutoScalingRollingUpdate
-      Stratosphere.ResourceAttributes.AutoScalingScheduledAction
+      Stratosphere.ResourceAttributes.AutoScalingReplacingUpdatePolicy
+      Stratosphere.ResourceAttributes.AutoScalingRollingUpdatePolicy
+      Stratosphere.ResourceAttributes.AutoScalingScheduledActionPolicy
       Stratosphere.ResourceAttributes.CreationPolicy
       Stratosphere.ResourceAttributes.ResourceSignal
       Stratosphere.ResourceAttributes.UpdatePolicy
-      Stratosphere.ResourceProperties.AccessLoggingPolicy
-      Stratosphere.ResourceProperties.AliasTarget
-      Stratosphere.ResourceProperties.APIGatewayDeploymentStageDescription
-      Stratosphere.ResourceProperties.APIGatewayDeploymentStageDescriptionMethodSetting
-      Stratosphere.ResourceProperties.ApiGatewayIntegration
-      Stratosphere.ResourceProperties.ApiGatewayIntegrationResponse
-      Stratosphere.ResourceProperties.ApiGatewayMethodResponse
+      Stratosphere.Template
+      Stratosphere.Types
+      Stratosphere.Values
+      Stratosphere.ResourceProperties.ApiGatewayApiKeyStageKey
+      Stratosphere.ResourceProperties.ApiGatewayDeploymentMethodSetting
+      Stratosphere.ResourceProperties.ApiGatewayDeploymentStageDescription
+      Stratosphere.ResourceProperties.ApiGatewayMethodIntegration
+      Stratosphere.ResourceProperties.ApiGatewayMethodIntegrationResponse
+      Stratosphere.ResourceProperties.ApiGatewayMethodMethodResponse
       Stratosphere.ResourceProperties.ApiGatewayRestApiS3Location
       Stratosphere.ResourceProperties.ApiGatewayStageMethodSetting
       Stratosphere.ResourceProperties.ApiGatewayUsagePlanApiStage
       Stratosphere.ResourceProperties.ApiGatewayUsagePlanQuotaSettings
       Stratosphere.ResourceProperties.ApiGatewayUsagePlanThrottleSettings
-      Stratosphere.ResourceProperties.AppCookieStickinessPolicy
-      Stratosphere.ResourceProperties.AutoScalingBlockDeviceMapping
-      Stratosphere.ResourceProperties.AutoScalingEBSBlockDevice
-      Stratosphere.ResourceProperties.AutoScalingMetricsCollection
-      Stratosphere.ResourceProperties.AutoScalingNotificationConfigurations
-      Stratosphere.ResourceProperties.AutoScalingTags
-      Stratosphere.ResourceProperties.ConnectionDrainingPolicy
-      Stratosphere.ResourceProperties.ConnectionSettings
-      Stratosphere.ResourceProperties.DynamoDBAttributeDefinition
-      Stratosphere.ResourceProperties.DynamoDBGlobalSecondaryIndex
-      Stratosphere.ResourceProperties.DynamoDBKeySchema
-      Stratosphere.ResourceProperties.DynamoDBLocalSecondaryIndex
-      Stratosphere.ResourceProperties.DynamoDBProjectionObject
-      Stratosphere.ResourceProperties.DynamoDBProvisionedThroughput
-      Stratosphere.ResourceProperties.DynamoDBStreamSpecification
-      Stratosphere.ResourceProperties.EBSBlockDevice
-      Stratosphere.ResourceProperties.EC2BlockDeviceMapping
-      Stratosphere.ResourceProperties.EC2MountPoint
-      Stratosphere.ResourceProperties.EC2SsmAssociationParameters
-      Stratosphere.ResourceProperties.EC2SsmAssociations
-      Stratosphere.ResourceProperties.ELBPolicy
-      Stratosphere.ResourceProperties.HealthCheck
-      Stratosphere.ResourceProperties.IAMPolicies
-      Stratosphere.ResourceProperties.KinesisFirehoseBufferingHints
-      Stratosphere.ResourceProperties.KinesisFirehoseCloudWatchLoggingOptions
-      Stratosphere.ResourceProperties.KinesisFirehoseElasticsearchDestinationConfiguration
-      Stratosphere.ResourceProperties.KinesisFirehoseElasticsearchRetryOptions
-      Stratosphere.ResourceProperties.KinesisFirehoseRedshiftCopyCommand
-      Stratosphere.ResourceProperties.KinesisFirehoseRedshiftDestinationConfiguration
-      Stratosphere.ResourceProperties.KinesisFirehoseS3DestinationConfiguration
-      Stratosphere.ResourceProperties.KinesisFirehoseS3EncryptionConfiguration
-      Stratosphere.ResourceProperties.KinesisFirehoseS3KMSEncryptionConfig
+      Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepAdjustment
+      Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration
+      Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupMetricsCollection
+      Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupNotificationConfigurations
+      Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupTagProperty
+      Stratosphere.ResourceProperties.AutoScalingLaunchConfigurationBlockDevice
+      Stratosphere.ResourceProperties.AutoScalingLaunchConfigurationBlockDeviceMapping
+      Stratosphere.ResourceProperties.AutoScalingScalingPolicyStepAdjustment
+      Stratosphere.ResourceProperties.CertificateManagerCertificateDomainValidationOption
+      Stratosphere.ResourceProperties.CloudFrontDistributionCacheBehavior
+      Stratosphere.ResourceProperties.CloudFrontDistributionCookies
+      Stratosphere.ResourceProperties.CloudFrontDistributionCustomErrorResponse
+      Stratosphere.ResourceProperties.CloudFrontDistributionCustomOriginConfig
+      Stratosphere.ResourceProperties.CloudFrontDistributionDefaultCacheBehavior
+      Stratosphere.ResourceProperties.CloudFrontDistributionDistributionConfig
+      Stratosphere.ResourceProperties.CloudFrontDistributionForwardedValues
+      Stratosphere.ResourceProperties.CloudFrontDistributionGeoRestriction
+      Stratosphere.ResourceProperties.CloudFrontDistributionLogging
+      Stratosphere.ResourceProperties.CloudFrontDistributionOrigin
+      Stratosphere.ResourceProperties.CloudFrontDistributionOriginCustomHeader
+      Stratosphere.ResourceProperties.CloudFrontDistributionRestrictions
+      Stratosphere.ResourceProperties.CloudFrontDistributionS3OriginConfig
+      Stratosphere.ResourceProperties.CloudFrontDistributionViewerCertificate
+      Stratosphere.ResourceProperties.CloudWatchAlarmDimension
+      Stratosphere.ResourceProperties.CodeBuildProjectArtifacts
+      Stratosphere.ResourceProperties.CodeBuildProjectEnvironment
+      Stratosphere.ResourceProperties.CodeBuildProjectEnvironmentVariable
+      Stratosphere.ResourceProperties.CodeBuildProjectSource
+      Stratosphere.ResourceProperties.CodeBuildProjectSourceAuth
+      Stratosphere.ResourceProperties.CodeCommitRepositoryRepositoryTrigger
+      Stratosphere.ResourceProperties.CodeDeployDeploymentConfigMinimumHealthyHosts
+      Stratosphere.ResourceProperties.CodeDeployDeploymentGroupDeployment
+      Stratosphere.ResourceProperties.CodeDeployDeploymentGroupEc2TagFilter
+      Stratosphere.ResourceProperties.CodeDeployDeploymentGroupGitHubLocation
+      Stratosphere.ResourceProperties.CodeDeployDeploymentGroupOnPremisesInstanceTagFilter
+      Stratosphere.ResourceProperties.CodeDeployDeploymentGroupRevision
+      Stratosphere.ResourceProperties.CodeDeployDeploymentGroupS3Location
+      Stratosphere.ResourceProperties.CodePipelineCustomActionTypeArtifactDetails
+      Stratosphere.ResourceProperties.CodePipelineCustomActionTypeConfigurationProperties
+      Stratosphere.ResourceProperties.CodePipelineCustomActionTypeSettings
+      Stratosphere.ResourceProperties.CodePipelinePipelineActionDeclaration
+      Stratosphere.ResourceProperties.CodePipelinePipelineActionTypeId
+      Stratosphere.ResourceProperties.CodePipelinePipelineArtifactStore
+      Stratosphere.ResourceProperties.CodePipelinePipelineBlockerDeclaration
+      Stratosphere.ResourceProperties.CodePipelinePipelineEncryptionKey
+      Stratosphere.ResourceProperties.CodePipelinePipelineInputArtifact
+      Stratosphere.ResourceProperties.CodePipelinePipelineOutputArtifact
+      Stratosphere.ResourceProperties.CodePipelinePipelineStageDeclaration
+      Stratosphere.ResourceProperties.CodePipelinePipelineStageTransition
+      Stratosphere.ResourceProperties.ConfigConfigRuleScope
+      Stratosphere.ResourceProperties.ConfigConfigRuleSource
+      Stratosphere.ResourceProperties.ConfigConfigRuleSourceDetail
+      Stratosphere.ResourceProperties.ConfigConfigurationRecorderRecordingGroup
+      Stratosphere.ResourceProperties.ConfigDeliveryChannelConfigSnapshotDeliveryProperties
+      Stratosphere.ResourceProperties.DataPipelinePipelineField
+      Stratosphere.ResourceProperties.DataPipelinePipelineParameterAttribute
+      Stratosphere.ResourceProperties.DataPipelinePipelineParameterObject
+      Stratosphere.ResourceProperties.DataPipelinePipelineParameterValue
+      Stratosphere.ResourceProperties.DataPipelinePipelinePipelineObject
+      Stratosphere.ResourceProperties.DataPipelinePipelinePipelineTag
+      Stratosphere.ResourceProperties.DirectoryServiceMicrosoftADVpcSettings
+      Stratosphere.ResourceProperties.DirectoryServiceSimpleADVpcSettings
+      Stratosphere.ResourceProperties.DynamoDBTableAttributeDefinition
+      Stratosphere.ResourceProperties.DynamoDBTableGlobalSecondaryIndex
+      Stratosphere.ResourceProperties.DynamoDBTableKeySchema
+      Stratosphere.ResourceProperties.DynamoDBTableLocalSecondaryIndex
+      Stratosphere.ResourceProperties.DynamoDBTableProjection
+      Stratosphere.ResourceProperties.DynamoDBTableProvisionedThroughput
+      Stratosphere.ResourceProperties.DynamoDBTableStreamSpecification
+      Stratosphere.ResourceProperties.EC2DHCPOptionsTag
+      Stratosphere.ResourceProperties.EC2InstanceAssociationParameter
+      Stratosphere.ResourceProperties.EC2InstanceBlockDeviceMapping
+      Stratosphere.ResourceProperties.EC2InstanceEbs
+      Stratosphere.ResourceProperties.EC2InstanceInstanceIpv6Address
+      Stratosphere.ResourceProperties.EC2InstanceNetworkInterface
+      Stratosphere.ResourceProperties.EC2InstanceNoDevice
+      Stratosphere.ResourceProperties.EC2InstancePrivateIpAddressSpecification
+      Stratosphere.ResourceProperties.EC2InstanceSsmAssociation
+      Stratosphere.ResourceProperties.EC2InstanceVolume
+      Stratosphere.ResourceProperties.EC2NetworkAclEntryIcmp
+      Stratosphere.ResourceProperties.EC2NetworkAclEntryPortRange
+      Stratosphere.ResourceProperties.EC2NetworkInterfaceInstanceIpv6Address
+      Stratosphere.ResourceProperties.EC2NetworkInterfacePrivateIpAddressSpecification
+      Stratosphere.ResourceProperties.EC2SecurityGroupRule
+      Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMappings
+      Stratosphere.ResourceProperties.EC2SpotFleetEbs
+      Stratosphere.ResourceProperties.EC2SpotFleetIamInstanceProfile
+      Stratosphere.ResourceProperties.EC2SpotFleetInstanceIpv6Address
+      Stratosphere.ResourceProperties.EC2SpotFleetLaunchSpecifications
+      Stratosphere.ResourceProperties.EC2SpotFleetMonitoring
+      Stratosphere.ResourceProperties.EC2SpotFleetNetworkInterfaces
+      Stratosphere.ResourceProperties.EC2SpotFleetPlacement
+      Stratosphere.ResourceProperties.EC2SpotFleetPrivateIpAddresses
+      Stratosphere.ResourceProperties.EC2SpotFleetSecurityGroups
+      Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetRequestConfigData
+      Stratosphere.ResourceProperties.ECSServiceDeploymentConfiguration
+      Stratosphere.ResourceProperties.ECSServiceLoadBalancer
+      Stratosphere.ResourceProperties.ECSTaskDefinitionContainerDefinition
+      Stratosphere.ResourceProperties.ECSTaskDefinitionHostEntry
+      Stratosphere.ResourceProperties.ECSTaskDefinitionHostVolumeProperties
+      Stratosphere.ResourceProperties.ECSTaskDefinitionKeyValuePair
+      Stratosphere.ResourceProperties.ECSTaskDefinitionLogConfiguration
+      Stratosphere.ResourceProperties.ECSTaskDefinitionMountPoint
+      Stratosphere.ResourceProperties.ECSTaskDefinitionPortMapping
+      Stratosphere.ResourceProperties.ECSTaskDefinitionUlimit
+      Stratosphere.ResourceProperties.ECSTaskDefinitionVolume
+      Stratosphere.ResourceProperties.ECSTaskDefinitionVolumeFrom
+      Stratosphere.ResourceProperties.EFSFileSystemElasticFileSystemTag
+      Stratosphere.ResourceProperties.ElastiCacheReplicationGroupNodeGroupConfiguration
+      Stratosphere.ResourceProperties.ElasticBeanstalkApplicationVersionSourceBundle
+      Stratosphere.ResourceProperties.ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting
+      Stratosphere.ResourceProperties.ElasticBeanstalkConfigurationTemplateSourceConfiguration
+      Stratosphere.ResourceProperties.ElasticBeanstalkEnvironmentOptionSettings
+      Stratosphere.ResourceProperties.ElasticBeanstalkEnvironmentTier
+      Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerAccessLoggingPolicy
+      Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerAppCookieStickinessPolicy
+      Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerConnectionDrainingPolicy
+      Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerConnectionSettings
+      Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerHealthCheck
+      Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerLBCookieStickinessPolicy
+      Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerListeners
+      Stratosphere.ResourceProperties.ElasticLoadBalancingLoadBalancerPolicies
+      Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerAction
+      Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerCertificate
+      Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerRuleAction
+      Stratosphere.ResourceProperties.ElasticLoadBalancingV2ListenerRuleRuleCondition
+      Stratosphere.ResourceProperties.ElasticLoadBalancingV2LoadBalancerLoadBalancerAttribute
+      Stratosphere.ResourceProperties.ElasticLoadBalancingV2TargetGroupMatcher
+      Stratosphere.ResourceProperties.ElasticLoadBalancingV2TargetGroupTargetDescription
+      Stratosphere.ResourceProperties.ElasticLoadBalancingV2TargetGroupTargetGroupAttribute
+      Stratosphere.ResourceProperties.ElasticsearchDomainEBSOptions
+      Stratosphere.ResourceProperties.ElasticsearchDomainElasticsearchClusterConfig
+      Stratosphere.ResourceProperties.ElasticsearchDomainSnapshotOptions
+      Stratosphere.ResourceProperties.EMRClusterApplication
+      Stratosphere.ResourceProperties.EMRClusterBootstrapActionConfig
+      Stratosphere.ResourceProperties.EMRClusterConfiguration
+      Stratosphere.ResourceProperties.EMRClusterEbsBlockDeviceConfig
+      Stratosphere.ResourceProperties.EMRClusterEbsConfiguration
+      Stratosphere.ResourceProperties.EMRClusterInstanceGroupConfig
+      Stratosphere.ResourceProperties.EMRClusterJobFlowInstancesConfig
+      Stratosphere.ResourceProperties.EMRClusterPlacementType
+      Stratosphere.ResourceProperties.EMRClusterScriptBootstrapActionConfig
+      Stratosphere.ResourceProperties.EMRClusterVolumeSpecification
+      Stratosphere.ResourceProperties.EMRInstanceGroupConfigConfiguration
+      Stratosphere.ResourceProperties.EMRInstanceGroupConfigEbsBlockDeviceConfig
+      Stratosphere.ResourceProperties.EMRInstanceGroupConfigEbsConfiguration
+      Stratosphere.ResourceProperties.EMRInstanceGroupConfigVolumeSpecification
+      Stratosphere.ResourceProperties.EMRStepHadoopJarStepConfig
+      Stratosphere.ResourceProperties.EMRStepKeyValue
+      Stratosphere.ResourceProperties.EventsRuleTarget
+      Stratosphere.ResourceProperties.GameLiftAliasRoutingStrategy
+      Stratosphere.ResourceProperties.GameLiftBuildS3Location
+      Stratosphere.ResourceProperties.GameLiftFleetIpPermission
+      Stratosphere.ResourceProperties.IAMGroupPolicy
+      Stratosphere.ResourceProperties.IAMRolePolicy
+      Stratosphere.ResourceProperties.IAMUserLoginProfile
+      Stratosphere.ResourceProperties.IAMUserPolicy
+      Stratosphere.ResourceProperties.IoTThingAttributePayload
+      Stratosphere.ResourceProperties.IoTTopicRuleAction
+      Stratosphere.ResourceProperties.IoTTopicRuleCloudwatchAlarmAction
+      Stratosphere.ResourceProperties.IoTTopicRuleCloudwatchMetricAction
+      Stratosphere.ResourceProperties.IoTTopicRuleDynamoDBAction
+      Stratosphere.ResourceProperties.IoTTopicRuleElasticsearchAction
+      Stratosphere.ResourceProperties.IoTTopicRuleFirehoseAction
+      Stratosphere.ResourceProperties.IoTTopicRuleKinesisAction
+      Stratosphere.ResourceProperties.IoTTopicRuleLambdaAction
+      Stratosphere.ResourceProperties.IoTTopicRuleRepublishAction
+      Stratosphere.ResourceProperties.IoTTopicRuleS3Action
+      Stratosphere.ResourceProperties.IoTTopicRuleSnsAction
+      Stratosphere.ResourceProperties.IoTTopicRuleSqsAction
+      Stratosphere.ResourceProperties.IoTTopicRuleTopicRulePayload
+      Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamBufferingHints
+      Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions
+      Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCopyCommand
+      Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchBufferingHints
+      Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration
+      Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchRetryOptions
+      Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamEncryptionConfiguration
+      Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamKMSEncryptionConfig
+      Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration
+      Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamS3DestinationConfiguration
       Stratosphere.ResourceProperties.LambdaFunctionCode
-      Stratosphere.ResourceProperties.LambdaFunctionVPCConfig
-      Stratosphere.ResourceProperties.LBCookieStickinessPolicy
-      Stratosphere.ResourceProperties.ListenerProperty
-      Stratosphere.ResourceProperties.NameValuePair
-      Stratosphere.ResourceProperties.NetworkInterface
-      Stratosphere.ResourceProperties.PrivateIpAddressSpecification
-      Stratosphere.ResourceProperties.RDSSecurityGroupRule
-      Stratosphere.ResourceProperties.RecordSetGeoLocation
-      Stratosphere.ResourceProperties.ResourceTag
-      Stratosphere.ResourceProperties.S3CorsConfiguration
-      Stratosphere.ResourceProperties.S3CorsConfigurationRule
-      Stratosphere.ResourceProperties.S3LifecycleConfiguration
-      Stratosphere.ResourceProperties.S3LifecycleRule
-      Stratosphere.ResourceProperties.S3LifecycleRuleNoncurrentVersionTransition
-      Stratosphere.ResourceProperties.S3LifecycleRuleTransition
-      Stratosphere.ResourceProperties.S3LoggingConfiguration
-      Stratosphere.ResourceProperties.S3NotificationConfiguration
-      Stratosphere.ResourceProperties.S3NotificationConfigurationConfigFilter
-      Stratosphere.ResourceProperties.S3NotificationConfigurationConfigFilterS3Key
-      Stratosphere.ResourceProperties.S3NotificationConfigurationConfigFilterS3KeyRules
-      Stratosphere.ResourceProperties.S3NotificationConfigurationLambdaConfiguration
-      Stratosphere.ResourceProperties.S3NotificationConfigurationQueueConfiguration
-      Stratosphere.ResourceProperties.S3NotificationConfigurationTopicConfiguration
-      Stratosphere.ResourceProperties.S3ReplicationConfiguration
-      Stratosphere.ResourceProperties.S3ReplicationConfigurationRule
-      Stratosphere.ResourceProperties.S3ReplicationConfigurationRulesDestination
-      Stratosphere.ResourceProperties.S3VersioningConfiguration
-      Stratosphere.ResourceProperties.S3WebsiteConfiguration
-      Stratosphere.ResourceProperties.S3WebsiteRedirectAllRequestsTo
-      Stratosphere.ResourceProperties.S3WebsiteRedirectRule
-      Stratosphere.ResourceProperties.S3WebsiteRoutingRuleCondition
-      Stratosphere.ResourceProperties.S3WebsiteRoutingRules
-      Stratosphere.ResourceProperties.SecurityGroupEgressRule
-      Stratosphere.ResourceProperties.SecurityGroupIngressRule
+      Stratosphere.ResourceProperties.LambdaFunctionEnvironment
+      Stratosphere.ResourceProperties.LambdaFunctionVpcConfig
+      Stratosphere.ResourceProperties.LogsMetricFilterMetricTransformation
+      Stratosphere.ResourceProperties.OpsWorksAppDataSource
+      Stratosphere.ResourceProperties.OpsWorksAppEnvironmentVariable
+      Stratosphere.ResourceProperties.OpsWorksAppSource
+      Stratosphere.ResourceProperties.OpsWorksAppSslConfiguration
+      Stratosphere.ResourceProperties.OpsWorksInstanceBlockDeviceMapping
+      Stratosphere.ResourceProperties.OpsWorksInstanceEbsBlockDevice
+      Stratosphere.ResourceProperties.OpsWorksInstanceTimeBasedAutoScaling
+      Stratosphere.ResourceProperties.OpsWorksLayerAutoScalingThresholds
+      Stratosphere.ResourceProperties.OpsWorksLayerLifecycleEventConfiguration
+      Stratosphere.ResourceProperties.OpsWorksLayerLoadBasedAutoScaling
+      Stratosphere.ResourceProperties.OpsWorksLayerRecipes
+      Stratosphere.ResourceProperties.OpsWorksLayerShutdownEventConfiguration
+      Stratosphere.ResourceProperties.OpsWorksLayerVolumeConfiguration
+      Stratosphere.ResourceProperties.OpsWorksStackChefConfiguration
+      Stratosphere.ResourceProperties.OpsWorksStackElasticIp
+      Stratosphere.ResourceProperties.OpsWorksStackRdsDbInstance
+      Stratosphere.ResourceProperties.OpsWorksStackSource
+      Stratosphere.ResourceProperties.OpsWorksStackStackConfigurationManager
+      Stratosphere.ResourceProperties.RDSDBSecurityGroupIngressProperty
+      Stratosphere.ResourceProperties.RDSOptionGroupOptionConfiguration
+      Stratosphere.ResourceProperties.RDSOptionGroupOptionSetting
+      Stratosphere.ResourceProperties.RedshiftClusterParameterGroupParameter
+      Stratosphere.ResourceProperties.Route53HealthCheckHealthCheckConfig
+      Stratosphere.ResourceProperties.Route53HealthCheckHealthCheckTag
+      Stratosphere.ResourceProperties.Route53HostedZoneHostedZoneConfig
+      Stratosphere.ResourceProperties.Route53HostedZoneHostedZoneTag
+      Stratosphere.ResourceProperties.Route53HostedZoneVPC
+      Stratosphere.ResourceProperties.Route53RecordSetAliasTarget
+      Stratosphere.ResourceProperties.Route53RecordSetGeoLocation
+      Stratosphere.ResourceProperties.Route53RecordSetGroupAliasTarget
+      Stratosphere.ResourceProperties.Route53RecordSetGroupGeoLocation
+      Stratosphere.ResourceProperties.Route53RecordSetGroupRecordSet
+      Stratosphere.ResourceProperties.S3BucketCorsConfiguration
+      Stratosphere.ResourceProperties.S3BucketCorsRule
+      Stratosphere.ResourceProperties.S3BucketFilterRule
+      Stratosphere.ResourceProperties.S3BucketLambdaConfiguration
+      Stratosphere.ResourceProperties.S3BucketLifecycleConfiguration
+      Stratosphere.ResourceProperties.S3BucketLoggingConfiguration
+      Stratosphere.ResourceProperties.S3BucketNoncurrentVersionTransition
+      Stratosphere.ResourceProperties.S3BucketNotificationConfiguration
+      Stratosphere.ResourceProperties.S3BucketNotificationFilter
+      Stratosphere.ResourceProperties.S3BucketQueueConfiguration
+      Stratosphere.ResourceProperties.S3BucketRedirectAllRequestsTo
+      Stratosphere.ResourceProperties.S3BucketRedirectRule
+      Stratosphere.ResourceProperties.S3BucketReplicationConfiguration
+      Stratosphere.ResourceProperties.S3BucketReplicationDestination
+      Stratosphere.ResourceProperties.S3BucketReplicationRule
+      Stratosphere.ResourceProperties.S3BucketRoutingRule
+      Stratosphere.ResourceProperties.S3BucketRoutingRuleCondition
+      Stratosphere.ResourceProperties.S3BucketRule
+      Stratosphere.ResourceProperties.S3BucketS3KeyFilter
+      Stratosphere.ResourceProperties.S3BucketTopicConfiguration
+      Stratosphere.ResourceProperties.S3BucketTransition
+      Stratosphere.ResourceProperties.S3BucketVersioningConfiguration
+      Stratosphere.ResourceProperties.S3BucketWebsiteConfiguration
       Stratosphere.ResourceProperties.SNSTopicSubscription
-      Stratosphere.ResourceProperties.SQSRedrivePolicy
-      Stratosphere.ResourceProperties.StepAdjustments
-      Stratosphere.ResourceProperties.UserLoginProfile
+      Stratosphere.ResourceProperties.SSMAssociationParameterValues
+      Stratosphere.ResourceProperties.SSMAssociationTarget
+      Stratosphere.ResourceProperties.Tag
+      Stratosphere.ResourceProperties.WAFByteMatchSetByteMatchTuple
+      Stratosphere.ResourceProperties.WAFByteMatchSetFieldToMatch
+      Stratosphere.ResourceProperties.WAFIPSetIPSetDescriptor
+      Stratosphere.ResourceProperties.WAFRulePredicate
+      Stratosphere.ResourceProperties.WAFSizeConstraintSetFieldToMatch
+      Stratosphere.ResourceProperties.WAFSizeConstraintSetSizeConstraint
+      Stratosphere.ResourceProperties.WAFSqlInjectionMatchSetFieldToMatch
+      Stratosphere.ResourceProperties.WAFSqlInjectionMatchSetSqlInjectionMatchTuple
+      Stratosphere.ResourceProperties.WAFWebACLActivatedRule
+      Stratosphere.ResourceProperties.WAFWebACLWafAction
+      Stratosphere.ResourceProperties.WAFXssMatchSetFieldToMatch
+      Stratosphere.ResourceProperties.WAFXssMatchSetXssMatchTuple
       Stratosphere.Resources
-      Stratosphere.Resources.AccessKey
       Stratosphere.Resources.ApiGatewayAccount
+      Stratosphere.Resources.ApiGatewayApiKey
+      Stratosphere.Resources.ApiGatewayAuthorizer
+      Stratosphere.Resources.ApiGatewayBasePathMapping
+      Stratosphere.Resources.ApiGatewayClientCertificate
       Stratosphere.Resources.ApiGatewayDeployment
       Stratosphere.Resources.ApiGatewayMethod
       Stratosphere.Resources.ApiGatewayModel
@@ -153,88 +340,175 @@
       Stratosphere.Resources.ApiGatewayRestApi
       Stratosphere.Resources.ApiGatewayStage
       Stratosphere.Resources.ApiGatewayUsagePlan
-      Stratosphere.Resources.AutoScalingGroup
-      Stratosphere.Resources.Bucket
-      Stratosphere.Resources.CacheCluster
-      Stratosphere.Resources.CacheSubnetGroup
-      Stratosphere.Resources.DBInstance
-      Stratosphere.Resources.DBParameterGroup
-      Stratosphere.Resources.DBSecurityGroup
-      Stratosphere.Resources.DBSecurityGroupIngress
-      Stratosphere.Resources.DBSubnetGroup
-      Stratosphere.Resources.DeliveryStream
+      Stratosphere.Resources.ApplicationAutoScalingScalableTarget
+      Stratosphere.Resources.ApplicationAutoScalingScalingPolicy
+      Stratosphere.Resources.AutoScalingAutoScalingGroup
+      Stratosphere.Resources.AutoScalingLaunchConfiguration
+      Stratosphere.Resources.AutoScalingLifecycleHook
+      Stratosphere.Resources.AutoScalingScalingPolicy
+      Stratosphere.Resources.AutoScalingScheduledAction
+      Stratosphere.Resources.CertificateManagerCertificate
+      Stratosphere.Resources.CloudFormationCustomResource
+      Stratosphere.Resources.CloudFormationStack
+      Stratosphere.Resources.CloudFormationWaitCondition
+      Stratosphere.Resources.CloudFormationWaitConditionHandle
+      Stratosphere.Resources.CloudFrontDistribution
+      Stratosphere.Resources.CloudTrailTrail
+      Stratosphere.Resources.CloudWatchAlarm
+      Stratosphere.Resources.CodeBuildProject
+      Stratosphere.Resources.CodeCommitRepository
+      Stratosphere.Resources.CodeDeployApplication
+      Stratosphere.Resources.CodeDeployDeploymentConfig
+      Stratosphere.Resources.CodeDeployDeploymentGroup
+      Stratosphere.Resources.CodePipelineCustomActionType
+      Stratosphere.Resources.CodePipelinePipeline
+      Stratosphere.Resources.ConfigConfigRule
+      Stratosphere.Resources.ConfigConfigurationRecorder
+      Stratosphere.Resources.ConfigDeliveryChannel
+      Stratosphere.Resources.DataPipelinePipeline
+      Stratosphere.Resources.DirectoryServiceMicrosoftAD
+      Stratosphere.Resources.DirectoryServiceSimpleAD
       Stratosphere.Resources.DynamoDBTable
+      Stratosphere.Resources.EC2CustomerGateway
+      Stratosphere.Resources.EC2DHCPOptions
+      Stratosphere.Resources.EC2EIP
+      Stratosphere.Resources.EC2EIPAssociation
+      Stratosphere.Resources.EC2FlowLog
+      Stratosphere.Resources.EC2Host
       Stratosphere.Resources.EC2Instance
-      Stratosphere.Resources.EIP
-      Stratosphere.Resources.EIPAssociation
+      Stratosphere.Resources.EC2InternetGateway
+      Stratosphere.Resources.EC2NatGateway
+      Stratosphere.Resources.EC2NetworkAcl
+      Stratosphere.Resources.EC2NetworkAclEntry
+      Stratosphere.Resources.EC2NetworkInterface
+      Stratosphere.Resources.EC2NetworkInterfaceAttachment
+      Stratosphere.Resources.EC2PlacementGroup
+      Stratosphere.Resources.EC2Route
+      Stratosphere.Resources.EC2RouteTable
+      Stratosphere.Resources.EC2SecurityGroup
+      Stratosphere.Resources.EC2SecurityGroupEgress
+      Stratosphere.Resources.EC2SecurityGroupIngress
+      Stratosphere.Resources.EC2SpotFleet
+      Stratosphere.Resources.EC2Subnet
+      Stratosphere.Resources.EC2SubnetCidrBlock
+      Stratosphere.Resources.EC2SubnetNetworkAclAssociation
+      Stratosphere.Resources.EC2SubnetRouteTableAssociation
+      Stratosphere.Resources.EC2Volume
+      Stratosphere.Resources.EC2VolumeAttachment
+      Stratosphere.Resources.EC2VPC
+      Stratosphere.Resources.EC2VPCCidrBlock
+      Stratosphere.Resources.EC2VPCDHCPOptionsAssociation
+      Stratosphere.Resources.EC2VPCEndpoint
+      Stratosphere.Resources.EC2VPCGatewayAttachment
+      Stratosphere.Resources.EC2VPCPeeringConnection
+      Stratosphere.Resources.EC2VPNConnection
+      Stratosphere.Resources.EC2VPNConnectionRoute
+      Stratosphere.Resources.EC2VPNGateway
+      Stratosphere.Resources.EC2VPNGatewayRoutePropagation
+      Stratosphere.Resources.ECRRepository
+      Stratosphere.Resources.ECSCluster
+      Stratosphere.Resources.ECSService
+      Stratosphere.Resources.ECSTaskDefinition
+      Stratosphere.Resources.EFSFileSystem
+      Stratosphere.Resources.EFSMountTarget
+      Stratosphere.Resources.ElastiCacheCacheCluster
+      Stratosphere.Resources.ElastiCacheParameterGroup
+      Stratosphere.Resources.ElastiCacheReplicationGroup
+      Stratosphere.Resources.ElastiCacheSecurityGroup
+      Stratosphere.Resources.ElastiCacheSecurityGroupIngress
+      Stratosphere.Resources.ElastiCacheSubnetGroup
+      Stratosphere.Resources.ElasticBeanstalkApplication
+      Stratosphere.Resources.ElasticBeanstalkApplicationVersion
+      Stratosphere.Resources.ElasticBeanstalkConfigurationTemplate
+      Stratosphere.Resources.ElasticBeanstalkEnvironment
+      Stratosphere.Resources.ElasticLoadBalancingLoadBalancer
+      Stratosphere.Resources.ElasticLoadBalancingV2Listener
+      Stratosphere.Resources.ElasticLoadBalancingV2ListenerRule
+      Stratosphere.Resources.ElasticLoadBalancingV2LoadBalancer
+      Stratosphere.Resources.ElasticLoadBalancingV2TargetGroup
+      Stratosphere.Resources.ElasticsearchDomain
+      Stratosphere.Resources.EMRCluster
+      Stratosphere.Resources.EMRInstanceGroupConfig
+      Stratosphere.Resources.EMRStep
       Stratosphere.Resources.EventsRule
-      Stratosphere.Resources.Group
+      Stratosphere.Resources.GameLiftAlias
+      Stratosphere.Resources.GameLiftBuild
+      Stratosphere.Resources.GameLiftFleet
+      Stratosphere.Resources.IAMAccessKey
+      Stratosphere.Resources.IAMGroup
+      Stratosphere.Resources.IAMInstanceProfile
+      Stratosphere.Resources.IAMManagedPolicy
+      Stratosphere.Resources.IAMPolicy
       Stratosphere.Resources.IAMRole
-      Stratosphere.Resources.InstanceProfile
-      Stratosphere.Resources.InternetGateway
+      Stratosphere.Resources.IAMUser
+      Stratosphere.Resources.IAMUserToGroupAddition
+      Stratosphere.Resources.IoTCertificate
+      Stratosphere.Resources.IoTPolicy
+      Stratosphere.Resources.IoTPolicyPrincipalAttachment
+      Stratosphere.Resources.IoTThing
+      Stratosphere.Resources.IoTThingPrincipalAttachment
+      Stratosphere.Resources.IoTTopicRule
+      Stratosphere.Resources.KinesisFirehoseDeliveryStream
       Stratosphere.Resources.KinesisStream
+      Stratosphere.Resources.KMSAlias
+      Stratosphere.Resources.KMSKey
       Stratosphere.Resources.LambdaAlias
+      Stratosphere.Resources.LambdaEventSourceMapping
       Stratosphere.Resources.LambdaFunction
       Stratosphere.Resources.LambdaPermission
       Stratosphere.Resources.LambdaVersion
-      Stratosphere.Resources.LaunchConfiguration
-      Stratosphere.Resources.LifecycleHook
-      Stratosphere.Resources.LoadBalancer
-      Stratosphere.Resources.LogGroup
-      Stratosphere.Resources.LogStream
-      Stratosphere.Resources.ManagedPolicy
-      Stratosphere.Resources.NatGateway
-      Stratosphere.Resources.Policy
-      Stratosphere.Resources.RecordSet
-      Stratosphere.Resources.RecordSetGroup
-      Stratosphere.Resources.Route
-      Stratosphere.Resources.RouteTable
+      Stratosphere.Resources.LogsDestination
+      Stratosphere.Resources.LogsLogGroup
+      Stratosphere.Resources.LogsLogStream
+      Stratosphere.Resources.LogsMetricFilter
+      Stratosphere.Resources.LogsSubscriptionFilter
+      Stratosphere.Resources.OpsWorksApp
+      Stratosphere.Resources.OpsWorksElasticLoadBalancerAttachment
+      Stratosphere.Resources.OpsWorksInstance
+      Stratosphere.Resources.OpsWorksLayer
+      Stratosphere.Resources.OpsWorksStack
+      Stratosphere.Resources.OpsWorksUserProfile
+      Stratosphere.Resources.OpsWorksVolume
+      Stratosphere.Resources.RDSDBCluster
+      Stratosphere.Resources.RDSDBClusterParameterGroup
+      Stratosphere.Resources.RDSDBInstance
+      Stratosphere.Resources.RDSDBParameterGroup
+      Stratosphere.Resources.RDSDBSecurityGroup
+      Stratosphere.Resources.RDSDBSecurityGroupIngress
+      Stratosphere.Resources.RDSDBSubnetGroup
+      Stratosphere.Resources.RDSEventSubscription
+      Stratosphere.Resources.RDSOptionGroup
+      Stratosphere.Resources.RedshiftCluster
+      Stratosphere.Resources.RedshiftClusterParameterGroup
+      Stratosphere.Resources.RedshiftClusterSecurityGroup
+      Stratosphere.Resources.RedshiftClusterSecurityGroupIngress
+      Stratosphere.Resources.RedshiftClusterSubnetGroup
+      Stratosphere.Resources.Route53HealthCheck
+      Stratosphere.Resources.Route53HostedZone
+      Stratosphere.Resources.Route53RecordSet
+      Stratosphere.Resources.Route53RecordSetGroup
+      Stratosphere.Resources.S3Bucket
       Stratosphere.Resources.S3BucketPolicy
-      Stratosphere.Resources.ScalingPolicy
-      Stratosphere.Resources.ScheduledAction
-      Stratosphere.Resources.SecurityGroup
-      Stratosphere.Resources.SecurityGroupEgress
-      Stratosphere.Resources.SecurityGroupIngress
+      Stratosphere.Resources.SDBDomain
       Stratosphere.Resources.SNSSubscription
       Stratosphere.Resources.SNSTopic
       Stratosphere.Resources.SNSTopicPolicy
       Stratosphere.Resources.SQSQueue
       Stratosphere.Resources.SQSQueuePolicy
-      Stratosphere.Resources.Stack
-      Stratosphere.Resources.Subnet
-      Stratosphere.Resources.SubnetRouteTableAssociation
-      Stratosphere.Resources.Trail
-      Stratosphere.Resources.User
-      Stratosphere.Resources.UserToGroupAddition
-      Stratosphere.Resources.Volume
-      Stratosphere.Resources.VolumeAttachment
-      Stratosphere.Resources.VPC
-      Stratosphere.Resources.VPCEndpoint
-      Stratosphere.Resources.VPCGatewayAttachment
+      Stratosphere.Resources.SSMAssociation
+      Stratosphere.Resources.SSMDocument
+      Stratosphere.Resources.WAFByteMatchSet
+      Stratosphere.Resources.WAFIPSet
+      Stratosphere.Resources.WAFRule
+      Stratosphere.Resources.WAFSizeConstraintSet
+      Stratosphere.Resources.WAFSqlInjectionMatchSet
+      Stratosphere.Resources.WAFWebACL
+      Stratosphere.Resources.WAFXssMatchSet
+      Stratosphere.Resources.WorkSpacesWorkspace
   default-language: Haskell2010
 
 executable apigw-lambda-dynamodb
   main-is: apigw-lambda-dynamodb.hs
-  hs-source-dirs:
-      examples
-  ghc-options: -Wall
-  build-depends:
-      base >= 4.8 && < 5
-    , aeson >= 0.11
-    , aeson-pretty >= 0.8
-    , bytestring
-    , hashable
-    , lens >= 4.5
-    , template-haskell >= 2.0
-    , text >= 1.1
-    , unordered-containers >= 0.2
-    , stratosphere
-  if flag(library-only)
-    buildable: False
-  default-language: Haskell2010
-
-executable apigw-lambda-s3
-  main-is: apigw-lambda-s3.hs
   hs-source-dirs:
       examples
   ghc-options: -Wall
diff --git a/tests/HLint.hs b/tests/HLint.hs
--- a/tests/HLint.hs
+++ b/tests/HLint.hs
@@ -1,21 +1,17 @@
 module Main (main) where
 
 import Language.Haskell.HLint (hlint)
-import System.Directory (doesDirectoryExist)
 import System.Exit (exitFailure, exitSuccess)
 
 arguments :: [String]
 arguments =
-    [ "library"
-    , "tests"
-    ]
+  [ "library"
+  , "library-gen"
+  , "tests"
+  , "-i", "Use newtype instead of data"
+  ]
 
 main :: IO ()
 main = do
-    -- Need to check for existence of gen directory, because it is not present
-    -- in the cabal distribution.
-    genExists <- doesDirectoryExist "gen"
-    let args = if genExists then "gen" : arguments else arguments
-
-    hints <- hlint args
-    if null hints then exitSuccess else exitFailure
+  hints <- hlint arguments
+  if null hints then exitSuccess else exitFailure
