diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,20 @@
+Copyright (c) 2016 David Reaver
+Copyright (c) 2022 Markus Schirp
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/gen/Stratosphere/EMR/Cluster.hs b/gen/Stratosphere/EMR/Cluster.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster.hs
@@ -0,0 +1,279 @@
+module Stratosphere.EMR.Cluster (
+        module Exports, Cluster(..), mkCluster
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.ApplicationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.AutoTerminationPolicyProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.BootstrapActionConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.ConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.JobFlowInstancesConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.KerberosAttributesProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.ManagedScalingPolicyProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.PlacementGroupConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.StepConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Cluster
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html>
+    Cluster {haddock_workaround_ :: (),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-additionalinfo>
+             additionalInfo :: (Prelude.Maybe JSON.Object),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-applications>
+             applications :: (Prelude.Maybe [ApplicationProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-autoscalingrole>
+             autoScalingRole :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-autoterminationpolicy>
+             autoTerminationPolicy :: (Prelude.Maybe AutoTerminationPolicyProperty),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-bootstrapactions>
+             bootstrapActions :: (Prelude.Maybe [BootstrapActionConfigProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-configurations>
+             configurations :: (Prelude.Maybe [ConfigurationProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-customamiid>
+             customAmiId :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-ebsrootvolumeiops>
+             ebsRootVolumeIops :: (Prelude.Maybe (Value Prelude.Integer)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-ebsrootvolumesize>
+             ebsRootVolumeSize :: (Prelude.Maybe (Value Prelude.Integer)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-ebsrootvolumethroughput>
+             ebsRootVolumeThroughput :: (Prelude.Maybe (Value Prelude.Integer)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-instances>
+             instances :: JobFlowInstancesConfigProperty,
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-jobflowrole>
+             jobFlowRole :: (Value Prelude.Text),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-kerberosattributes>
+             kerberosAttributes :: (Prelude.Maybe KerberosAttributesProperty),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-logencryptionkmskeyid>
+             logEncryptionKmsKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-loguri>
+             logUri :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-managedscalingpolicy>
+             managedScalingPolicy :: (Prelude.Maybe ManagedScalingPolicyProperty),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-name>
+             name :: (Value Prelude.Text),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-osreleaselabel>
+             oSReleaseLabel :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-placementgroupconfigs>
+             placementGroupConfigs :: (Prelude.Maybe [PlacementGroupConfigProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-releaselabel>
+             releaseLabel :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-scaledownbehavior>
+             scaleDownBehavior :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-securityconfiguration>
+             securityConfiguration :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-servicerole>
+             serviceRole :: (Value Prelude.Text),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-stepconcurrencylevel>
+             stepConcurrencyLevel :: (Prelude.Maybe (Value Prelude.Integer)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-steps>
+             steps :: (Prelude.Maybe [StepConfigProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-tags>
+             tags :: (Prelude.Maybe [Tag]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-visibletoallusers>
+             visibleToAllUsers :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCluster ::
+  JobFlowInstancesConfigProperty
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> Value Prelude.Text -> Cluster
+mkCluster instances jobFlowRole name serviceRole
+  = Cluster
+      {haddock_workaround_ = (), instances = instances,
+       jobFlowRole = jobFlowRole, name = name, serviceRole = serviceRole,
+       additionalInfo = Prelude.Nothing, applications = Prelude.Nothing,
+       autoScalingRole = Prelude.Nothing,
+       autoTerminationPolicy = Prelude.Nothing,
+       bootstrapActions = Prelude.Nothing,
+       configurations = Prelude.Nothing, customAmiId = Prelude.Nothing,
+       ebsRootVolumeIops = Prelude.Nothing,
+       ebsRootVolumeSize = Prelude.Nothing,
+       ebsRootVolumeThroughput = Prelude.Nothing,
+       kerberosAttributes = Prelude.Nothing,
+       logEncryptionKmsKeyId = Prelude.Nothing, logUri = Prelude.Nothing,
+       managedScalingPolicy = Prelude.Nothing,
+       oSReleaseLabel = Prelude.Nothing,
+       placementGroupConfigs = Prelude.Nothing,
+       releaseLabel = Prelude.Nothing,
+       scaleDownBehavior = Prelude.Nothing,
+       securityConfiguration = Prelude.Nothing,
+       stepConcurrencyLevel = Prelude.Nothing, steps = Prelude.Nothing,
+       tags = Prelude.Nothing, visibleToAllUsers = Prelude.Nothing}
+instance ToResourceProperties Cluster where
+  toResourceProperties Cluster {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Instances" JSON..= instances, "JobFlowRole" JSON..= jobFlowRole,
+                            "Name" JSON..= name, "ServiceRole" JSON..= serviceRole]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AdditionalInfo" Prelude.<$> additionalInfo,
+                               (JSON..=) "Applications" Prelude.<$> applications,
+                               (JSON..=) "AutoScalingRole" Prelude.<$> autoScalingRole,
+                               (JSON..=) "AutoTerminationPolicy"
+                                 Prelude.<$> autoTerminationPolicy,
+                               (JSON..=) "BootstrapActions" Prelude.<$> bootstrapActions,
+                               (JSON..=) "Configurations" Prelude.<$> configurations,
+                               (JSON..=) "CustomAmiId" Prelude.<$> customAmiId,
+                               (JSON..=) "EbsRootVolumeIops" Prelude.<$> ebsRootVolumeIops,
+                               (JSON..=) "EbsRootVolumeSize" Prelude.<$> ebsRootVolumeSize,
+                               (JSON..=) "EbsRootVolumeThroughput"
+                                 Prelude.<$> ebsRootVolumeThroughput,
+                               (JSON..=) "KerberosAttributes" Prelude.<$> kerberosAttributes,
+                               (JSON..=) "LogEncryptionKmsKeyId"
+                                 Prelude.<$> logEncryptionKmsKeyId,
+                               (JSON..=) "LogUri" Prelude.<$> logUri,
+                               (JSON..=) "ManagedScalingPolicy" Prelude.<$> managedScalingPolicy,
+                               (JSON..=) "OSReleaseLabel" Prelude.<$> oSReleaseLabel,
+                               (JSON..=) "PlacementGroupConfigs"
+                                 Prelude.<$> placementGroupConfigs,
+                               (JSON..=) "ReleaseLabel" Prelude.<$> releaseLabel,
+                               (JSON..=) "ScaleDownBehavior" Prelude.<$> scaleDownBehavior,
+                               (JSON..=) "SecurityConfiguration"
+                                 Prelude.<$> securityConfiguration,
+                               (JSON..=) "StepConcurrencyLevel" Prelude.<$> stepConcurrencyLevel,
+                               (JSON..=) "Steps" Prelude.<$> steps,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "VisibleToAllUsers" Prelude.<$> visibleToAllUsers]))}
+instance JSON.ToJSON Cluster where
+  toJSON Cluster {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Instances" JSON..= instances, "JobFlowRole" JSON..= jobFlowRole,
+               "Name" JSON..= name, "ServiceRole" JSON..= serviceRole]
+              (Prelude.catMaybes
+                 [(JSON..=) "AdditionalInfo" Prelude.<$> additionalInfo,
+                  (JSON..=) "Applications" Prelude.<$> applications,
+                  (JSON..=) "AutoScalingRole" Prelude.<$> autoScalingRole,
+                  (JSON..=) "AutoTerminationPolicy"
+                    Prelude.<$> autoTerminationPolicy,
+                  (JSON..=) "BootstrapActions" Prelude.<$> bootstrapActions,
+                  (JSON..=) "Configurations" Prelude.<$> configurations,
+                  (JSON..=) "CustomAmiId" Prelude.<$> customAmiId,
+                  (JSON..=) "EbsRootVolumeIops" Prelude.<$> ebsRootVolumeIops,
+                  (JSON..=) "EbsRootVolumeSize" Prelude.<$> ebsRootVolumeSize,
+                  (JSON..=) "EbsRootVolumeThroughput"
+                    Prelude.<$> ebsRootVolumeThroughput,
+                  (JSON..=) "KerberosAttributes" Prelude.<$> kerberosAttributes,
+                  (JSON..=) "LogEncryptionKmsKeyId"
+                    Prelude.<$> logEncryptionKmsKeyId,
+                  (JSON..=) "LogUri" Prelude.<$> logUri,
+                  (JSON..=) "ManagedScalingPolicy" Prelude.<$> managedScalingPolicy,
+                  (JSON..=) "OSReleaseLabel" Prelude.<$> oSReleaseLabel,
+                  (JSON..=) "PlacementGroupConfigs"
+                    Prelude.<$> placementGroupConfigs,
+                  (JSON..=) "ReleaseLabel" Prelude.<$> releaseLabel,
+                  (JSON..=) "ScaleDownBehavior" Prelude.<$> scaleDownBehavior,
+                  (JSON..=) "SecurityConfiguration"
+                    Prelude.<$> securityConfiguration,
+                  (JSON..=) "StepConcurrencyLevel" Prelude.<$> stepConcurrencyLevel,
+                  (JSON..=) "Steps" Prelude.<$> steps,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "VisibleToAllUsers" Prelude.<$> visibleToAllUsers])))
+instance Property "AdditionalInfo" Cluster where
+  type PropertyType "AdditionalInfo" Cluster = JSON.Object
+  set newValue Cluster {..}
+    = Cluster {additionalInfo = Prelude.pure newValue, ..}
+instance Property "Applications" Cluster where
+  type PropertyType "Applications" Cluster = [ApplicationProperty]
+  set newValue Cluster {..}
+    = Cluster {applications = Prelude.pure newValue, ..}
+instance Property "AutoScalingRole" Cluster where
+  type PropertyType "AutoScalingRole" Cluster = Value Prelude.Text
+  set newValue Cluster {..}
+    = Cluster {autoScalingRole = Prelude.pure newValue, ..}
+instance Property "AutoTerminationPolicy" Cluster where
+  type PropertyType "AutoTerminationPolicy" Cluster = AutoTerminationPolicyProperty
+  set newValue Cluster {..}
+    = Cluster {autoTerminationPolicy = Prelude.pure newValue, ..}
+instance Property "BootstrapActions" Cluster where
+  type PropertyType "BootstrapActions" Cluster = [BootstrapActionConfigProperty]
+  set newValue Cluster {..}
+    = Cluster {bootstrapActions = Prelude.pure newValue, ..}
+instance Property "Configurations" Cluster where
+  type PropertyType "Configurations" Cluster = [ConfigurationProperty]
+  set newValue Cluster {..}
+    = Cluster {configurations = Prelude.pure newValue, ..}
+instance Property "CustomAmiId" Cluster where
+  type PropertyType "CustomAmiId" Cluster = Value Prelude.Text
+  set newValue Cluster {..}
+    = Cluster {customAmiId = Prelude.pure newValue, ..}
+instance Property "EbsRootVolumeIops" Cluster where
+  type PropertyType "EbsRootVolumeIops" Cluster = Value Prelude.Integer
+  set newValue Cluster {..}
+    = Cluster {ebsRootVolumeIops = Prelude.pure newValue, ..}
+instance Property "EbsRootVolumeSize" Cluster where
+  type PropertyType "EbsRootVolumeSize" Cluster = Value Prelude.Integer
+  set newValue Cluster {..}
+    = Cluster {ebsRootVolumeSize = Prelude.pure newValue, ..}
+instance Property "EbsRootVolumeThroughput" Cluster where
+  type PropertyType "EbsRootVolumeThroughput" Cluster = Value Prelude.Integer
+  set newValue Cluster {..}
+    = Cluster {ebsRootVolumeThroughput = Prelude.pure newValue, ..}
+instance Property "Instances" Cluster where
+  type PropertyType "Instances" Cluster = JobFlowInstancesConfigProperty
+  set newValue Cluster {..} = Cluster {instances = newValue, ..}
+instance Property "JobFlowRole" Cluster where
+  type PropertyType "JobFlowRole" Cluster = Value Prelude.Text
+  set newValue Cluster {..} = Cluster {jobFlowRole = newValue, ..}
+instance Property "KerberosAttributes" Cluster where
+  type PropertyType "KerberosAttributes" Cluster = KerberosAttributesProperty
+  set newValue Cluster {..}
+    = Cluster {kerberosAttributes = Prelude.pure newValue, ..}
+instance Property "LogEncryptionKmsKeyId" Cluster where
+  type PropertyType "LogEncryptionKmsKeyId" Cluster = Value Prelude.Text
+  set newValue Cluster {..}
+    = Cluster {logEncryptionKmsKeyId = Prelude.pure newValue, ..}
+instance Property "LogUri" Cluster where
+  type PropertyType "LogUri" Cluster = Value Prelude.Text
+  set newValue Cluster {..}
+    = Cluster {logUri = Prelude.pure newValue, ..}
+instance Property "ManagedScalingPolicy" Cluster where
+  type PropertyType "ManagedScalingPolicy" Cluster = ManagedScalingPolicyProperty
+  set newValue Cluster {..}
+    = Cluster {managedScalingPolicy = Prelude.pure newValue, ..}
+instance Property "Name" Cluster where
+  type PropertyType "Name" Cluster = Value Prelude.Text
+  set newValue Cluster {..} = Cluster {name = newValue, ..}
+instance Property "OSReleaseLabel" Cluster where
+  type PropertyType "OSReleaseLabel" Cluster = Value Prelude.Text
+  set newValue Cluster {..}
+    = Cluster {oSReleaseLabel = Prelude.pure newValue, ..}
+instance Property "PlacementGroupConfigs" Cluster where
+  type PropertyType "PlacementGroupConfigs" Cluster = [PlacementGroupConfigProperty]
+  set newValue Cluster {..}
+    = Cluster {placementGroupConfigs = Prelude.pure newValue, ..}
+instance Property "ReleaseLabel" Cluster where
+  type PropertyType "ReleaseLabel" Cluster = Value Prelude.Text
+  set newValue Cluster {..}
+    = Cluster {releaseLabel = Prelude.pure newValue, ..}
+instance Property "ScaleDownBehavior" Cluster where
+  type PropertyType "ScaleDownBehavior" Cluster = Value Prelude.Text
+  set newValue Cluster {..}
+    = Cluster {scaleDownBehavior = Prelude.pure newValue, ..}
+instance Property "SecurityConfiguration" Cluster where
+  type PropertyType "SecurityConfiguration" Cluster = Value Prelude.Text
+  set newValue Cluster {..}
+    = Cluster {securityConfiguration = Prelude.pure newValue, ..}
+instance Property "ServiceRole" Cluster where
+  type PropertyType "ServiceRole" Cluster = Value Prelude.Text
+  set newValue Cluster {..} = Cluster {serviceRole = newValue, ..}
+instance Property "StepConcurrencyLevel" Cluster where
+  type PropertyType "StepConcurrencyLevel" Cluster = Value Prelude.Integer
+  set newValue Cluster {..}
+    = Cluster {stepConcurrencyLevel = Prelude.pure newValue, ..}
+instance Property "Steps" Cluster where
+  type PropertyType "Steps" Cluster = [StepConfigProperty]
+  set newValue Cluster {..}
+    = Cluster {steps = Prelude.pure newValue, ..}
+instance Property "Tags" Cluster where
+  type PropertyType "Tags" Cluster = [Tag]
+  set newValue Cluster {..}
+    = Cluster {tags = Prelude.pure newValue, ..}
+instance Property "VisibleToAllUsers" Cluster where
+  type PropertyType "VisibleToAllUsers" Cluster = Value Prelude.Bool
+  set newValue Cluster {..}
+    = Cluster {visibleToAllUsers = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/ApplicationProperty.hs b/gen/Stratosphere/EMR/Cluster/ApplicationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ApplicationProperty.hs
@@ -0,0 +1,62 @@
+module Stratosphere.EMR.Cluster.ApplicationProperty (
+        ApplicationProperty(..), mkApplicationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ApplicationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-application.html>
+    ApplicationProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-application.html#cfn-elasticmapreduce-cluster-application-additionalinfo>
+                         additionalInfo :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-application.html#cfn-elasticmapreduce-cluster-application-args>
+                         args :: (Prelude.Maybe (ValueList Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-application.html#cfn-elasticmapreduce-cluster-application-name>
+                         name :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-application.html#cfn-elasticmapreduce-cluster-application-version>
+                         version :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkApplicationProperty :: ApplicationProperty
+mkApplicationProperty
+  = ApplicationProperty
+      {haddock_workaround_ = (), additionalInfo = Prelude.Nothing,
+       args = Prelude.Nothing, name = Prelude.Nothing,
+       version = Prelude.Nothing}
+instance ToResourceProperties ApplicationProperty where
+  toResourceProperties ApplicationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.Application",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AdditionalInfo" Prelude.<$> additionalInfo,
+                            (JSON..=) "Args" Prelude.<$> args,
+                            (JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "Version" Prelude.<$> version])}
+instance JSON.ToJSON ApplicationProperty where
+  toJSON ApplicationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AdditionalInfo" Prelude.<$> additionalInfo,
+               (JSON..=) "Args" Prelude.<$> args,
+               (JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "Version" Prelude.<$> version]))
+instance Property "AdditionalInfo" ApplicationProperty where
+  type PropertyType "AdditionalInfo" ApplicationProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue ApplicationProperty {..}
+    = ApplicationProperty {additionalInfo = Prelude.pure newValue, ..}
+instance Property "Args" ApplicationProperty where
+  type PropertyType "Args" ApplicationProperty = ValueList Prelude.Text
+  set newValue ApplicationProperty {..}
+    = ApplicationProperty {args = Prelude.pure newValue, ..}
+instance Property "Name" ApplicationProperty where
+  type PropertyType "Name" ApplicationProperty = Value Prelude.Text
+  set newValue ApplicationProperty {..}
+    = ApplicationProperty {name = Prelude.pure newValue, ..}
+instance Property "Version" ApplicationProperty where
+  type PropertyType "Version" ApplicationProperty = Value Prelude.Text
+  set newValue ApplicationProperty {..}
+    = ApplicationProperty {version = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/ApplicationProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/ApplicationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ApplicationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.ApplicationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ApplicationProperty :: Prelude.Type
+instance ToResourceProperties ApplicationProperty
+instance Prelude.Eq ApplicationProperty
+instance Prelude.Show ApplicationProperty
+instance JSON.ToJSON ApplicationProperty
diff --git a/gen/Stratosphere/EMR/Cluster/AutoScalingPolicyProperty.hs b/gen/Stratosphere/EMR/Cluster/AutoScalingPolicyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/AutoScalingPolicyProperty.hs
@@ -0,0 +1,44 @@
+module Stratosphere.EMR.Cluster.AutoScalingPolicyProperty (
+        module Exports, AutoScalingPolicyProperty(..),
+        mkAutoScalingPolicyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.ScalingConstraintsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.ScalingRuleProperty as Exports
+import Stratosphere.ResourceProperties
+data AutoScalingPolicyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-autoscalingpolicy.html>
+    AutoScalingPolicyProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-autoscalingpolicy.html#cfn-elasticmapreduce-cluster-autoscalingpolicy-constraints>
+                               constraints :: ScalingConstraintsProperty,
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-autoscalingpolicy.html#cfn-elasticmapreduce-cluster-autoscalingpolicy-rules>
+                               rules :: [ScalingRuleProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAutoScalingPolicyProperty ::
+  ScalingConstraintsProperty
+  -> [ScalingRuleProperty] -> AutoScalingPolicyProperty
+mkAutoScalingPolicyProperty constraints rules
+  = AutoScalingPolicyProperty
+      {haddock_workaround_ = (), constraints = constraints,
+       rules = rules}
+instance ToResourceProperties AutoScalingPolicyProperty where
+  toResourceProperties AutoScalingPolicyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.AutoScalingPolicy",
+         supportsTags = Prelude.False,
+         properties = ["Constraints" JSON..= constraints,
+                       "Rules" JSON..= rules]}
+instance JSON.ToJSON AutoScalingPolicyProperty where
+  toJSON AutoScalingPolicyProperty {..}
+    = JSON.object
+        ["Constraints" JSON..= constraints, "Rules" JSON..= rules]
+instance Property "Constraints" AutoScalingPolicyProperty where
+  type PropertyType "Constraints" AutoScalingPolicyProperty = ScalingConstraintsProperty
+  set newValue AutoScalingPolicyProperty {..}
+    = AutoScalingPolicyProperty {constraints = newValue, ..}
+instance Property "Rules" AutoScalingPolicyProperty where
+  type PropertyType "Rules" AutoScalingPolicyProperty = [ScalingRuleProperty]
+  set newValue AutoScalingPolicyProperty {..}
+    = AutoScalingPolicyProperty {rules = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/AutoScalingPolicyProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/AutoScalingPolicyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/AutoScalingPolicyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.AutoScalingPolicyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AutoScalingPolicyProperty :: Prelude.Type
+instance ToResourceProperties AutoScalingPolicyProperty
+instance Prelude.Eq AutoScalingPolicyProperty
+instance Prelude.Show AutoScalingPolicyProperty
+instance JSON.ToJSON AutoScalingPolicyProperty
diff --git a/gen/Stratosphere/EMR/Cluster/AutoTerminationPolicyProperty.hs b/gen/Stratosphere/EMR/Cluster/AutoTerminationPolicyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/AutoTerminationPolicyProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.EMR.Cluster.AutoTerminationPolicyProperty (
+        AutoTerminationPolicyProperty(..), mkAutoTerminationPolicyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AutoTerminationPolicyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-autoterminationpolicy.html>
+    AutoTerminationPolicyProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-autoterminationpolicy.html#cfn-elasticmapreduce-cluster-autoterminationpolicy-idletimeout>
+                                   idleTimeout :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAutoTerminationPolicyProperty :: AutoTerminationPolicyProperty
+mkAutoTerminationPolicyProperty
+  = AutoTerminationPolicyProperty
+      {haddock_workaround_ = (), idleTimeout = Prelude.Nothing}
+instance ToResourceProperties AutoTerminationPolicyProperty where
+  toResourceProperties AutoTerminationPolicyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.AutoTerminationPolicy",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "IdleTimeout" Prelude.<$> idleTimeout])}
+instance JSON.ToJSON AutoTerminationPolicyProperty where
+  toJSON AutoTerminationPolicyProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "IdleTimeout" Prelude.<$> idleTimeout]))
+instance Property "IdleTimeout" AutoTerminationPolicyProperty where
+  type PropertyType "IdleTimeout" AutoTerminationPolicyProperty = Value Prelude.Integer
+  set newValue AutoTerminationPolicyProperty {..}
+    = AutoTerminationPolicyProperty
+        {idleTimeout = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/AutoTerminationPolicyProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/AutoTerminationPolicyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/AutoTerminationPolicyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.AutoTerminationPolicyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AutoTerminationPolicyProperty :: Prelude.Type
+instance ToResourceProperties AutoTerminationPolicyProperty
+instance Prelude.Eq AutoTerminationPolicyProperty
+instance Prelude.Show AutoTerminationPolicyProperty
+instance JSON.ToJSON AutoTerminationPolicyProperty
diff --git a/gen/Stratosphere/EMR/Cluster/BootstrapActionConfigProperty.hs b/gen/Stratosphere/EMR/Cluster/BootstrapActionConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/BootstrapActionConfigProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.EMR.Cluster.BootstrapActionConfigProperty (
+        module Exports, BootstrapActionConfigProperty(..),
+        mkBootstrapActionConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.ScriptBootstrapActionConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BootstrapActionConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-bootstrapactionconfig.html>
+    BootstrapActionConfigProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-bootstrapactionconfig.html#cfn-elasticmapreduce-cluster-bootstrapactionconfig-name>
+                                   name :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-bootstrapactionconfig.html#cfn-elasticmapreduce-cluster-bootstrapactionconfig-scriptbootstrapaction>
+                                   scriptBootstrapAction :: ScriptBootstrapActionConfigProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBootstrapActionConfigProperty ::
+  Value Prelude.Text
+  -> ScriptBootstrapActionConfigProperty
+     -> BootstrapActionConfigProperty
+mkBootstrapActionConfigProperty name scriptBootstrapAction
+  = BootstrapActionConfigProperty
+      {haddock_workaround_ = (), name = name,
+       scriptBootstrapAction = scriptBootstrapAction}
+instance ToResourceProperties BootstrapActionConfigProperty where
+  toResourceProperties BootstrapActionConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.BootstrapActionConfig",
+         supportsTags = Prelude.False,
+         properties = ["Name" JSON..= name,
+                       "ScriptBootstrapAction" JSON..= scriptBootstrapAction]}
+instance JSON.ToJSON BootstrapActionConfigProperty where
+  toJSON BootstrapActionConfigProperty {..}
+    = JSON.object
+        ["Name" JSON..= name,
+         "ScriptBootstrapAction" JSON..= scriptBootstrapAction]
+instance Property "Name" BootstrapActionConfigProperty where
+  type PropertyType "Name" BootstrapActionConfigProperty = Value Prelude.Text
+  set newValue BootstrapActionConfigProperty {..}
+    = BootstrapActionConfigProperty {name = newValue, ..}
+instance Property "ScriptBootstrapAction" BootstrapActionConfigProperty where
+  type PropertyType "ScriptBootstrapAction" BootstrapActionConfigProperty = ScriptBootstrapActionConfigProperty
+  set newValue BootstrapActionConfigProperty {..}
+    = BootstrapActionConfigProperty
+        {scriptBootstrapAction = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/BootstrapActionConfigProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/BootstrapActionConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/BootstrapActionConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.BootstrapActionConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BootstrapActionConfigProperty :: Prelude.Type
+instance ToResourceProperties BootstrapActionConfigProperty
+instance Prelude.Eq BootstrapActionConfigProperty
+instance Prelude.Show BootstrapActionConfigProperty
+instance JSON.ToJSON BootstrapActionConfigProperty
diff --git a/gen/Stratosphere/EMR/Cluster/CloudWatchAlarmDefinitionProperty.hs b/gen/Stratosphere/EMR/Cluster/CloudWatchAlarmDefinitionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/CloudWatchAlarmDefinitionProperty.hs
@@ -0,0 +1,120 @@
+module Stratosphere.EMR.Cluster.CloudWatchAlarmDefinitionProperty (
+        module Exports, CloudWatchAlarmDefinitionProperty(..),
+        mkCloudWatchAlarmDefinitionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.MetricDimensionProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CloudWatchAlarmDefinitionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html>
+    CloudWatchAlarmDefinitionProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-comparisonoperator>
+                                       comparisonOperator :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-dimensions>
+                                       dimensions :: (Prelude.Maybe [MetricDimensionProperty]),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-evaluationperiods>
+                                       evaluationPeriods :: (Prelude.Maybe (Value Prelude.Integer)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-metricname>
+                                       metricName :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-namespace>
+                                       namespace :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-period>
+                                       period :: (Value Prelude.Integer),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-statistic>
+                                       statistic :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-threshold>
+                                       threshold :: (Value Prelude.Double),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-unit>
+                                       unit :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCloudWatchAlarmDefinitionProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Integer
+        -> Value Prelude.Double -> CloudWatchAlarmDefinitionProperty
+mkCloudWatchAlarmDefinitionProperty
+  comparisonOperator
+  metricName
+  period
+  threshold
+  = CloudWatchAlarmDefinitionProperty
+      {haddock_workaround_ = (), comparisonOperator = comparisonOperator,
+       metricName = metricName, period = period, threshold = threshold,
+       dimensions = Prelude.Nothing, evaluationPeriods = Prelude.Nothing,
+       namespace = Prelude.Nothing, statistic = Prelude.Nothing,
+       unit = Prelude.Nothing}
+instance ToResourceProperties CloudWatchAlarmDefinitionProperty where
+  toResourceProperties CloudWatchAlarmDefinitionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.CloudWatchAlarmDefinition",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ComparisonOperator" JSON..= comparisonOperator,
+                            "MetricName" JSON..= metricName, "Period" JSON..= period,
+                            "Threshold" JSON..= threshold]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Dimensions" Prelude.<$> dimensions,
+                               (JSON..=) "EvaluationPeriods" Prelude.<$> evaluationPeriods,
+                               (JSON..=) "Namespace" Prelude.<$> namespace,
+                               (JSON..=) "Statistic" Prelude.<$> statistic,
+                               (JSON..=) "Unit" Prelude.<$> unit]))}
+instance JSON.ToJSON CloudWatchAlarmDefinitionProperty where
+  toJSON CloudWatchAlarmDefinitionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ComparisonOperator" JSON..= comparisonOperator,
+               "MetricName" JSON..= metricName, "Period" JSON..= period,
+               "Threshold" JSON..= threshold]
+              (Prelude.catMaybes
+                 [(JSON..=) "Dimensions" Prelude.<$> dimensions,
+                  (JSON..=) "EvaluationPeriods" Prelude.<$> evaluationPeriods,
+                  (JSON..=) "Namespace" Prelude.<$> namespace,
+                  (JSON..=) "Statistic" Prelude.<$> statistic,
+                  (JSON..=) "Unit" Prelude.<$> unit])))
+instance Property "ComparisonOperator" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "ComparisonOperator" CloudWatchAlarmDefinitionProperty = Value Prelude.Text
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty
+        {comparisonOperator = newValue, ..}
+instance Property "Dimensions" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "Dimensions" CloudWatchAlarmDefinitionProperty = [MetricDimensionProperty]
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty
+        {dimensions = Prelude.pure newValue, ..}
+instance Property "EvaluationPeriods" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "EvaluationPeriods" CloudWatchAlarmDefinitionProperty = Value Prelude.Integer
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty
+        {evaluationPeriods = Prelude.pure newValue, ..}
+instance Property "MetricName" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "MetricName" CloudWatchAlarmDefinitionProperty = Value Prelude.Text
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty {metricName = newValue, ..}
+instance Property "Namespace" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "Namespace" CloudWatchAlarmDefinitionProperty = Value Prelude.Text
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty
+        {namespace = Prelude.pure newValue, ..}
+instance Property "Period" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "Period" CloudWatchAlarmDefinitionProperty = Value Prelude.Integer
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty {period = newValue, ..}
+instance Property "Statistic" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "Statistic" CloudWatchAlarmDefinitionProperty = Value Prelude.Text
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty
+        {statistic = Prelude.pure newValue, ..}
+instance Property "Threshold" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "Threshold" CloudWatchAlarmDefinitionProperty = Value Prelude.Double
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty {threshold = newValue, ..}
+instance Property "Unit" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "Unit" CloudWatchAlarmDefinitionProperty = Value Prelude.Text
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty
+        {unit = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/CloudWatchAlarmDefinitionProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/CloudWatchAlarmDefinitionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/CloudWatchAlarmDefinitionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.CloudWatchAlarmDefinitionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CloudWatchAlarmDefinitionProperty :: Prelude.Type
+instance ToResourceProperties CloudWatchAlarmDefinitionProperty
+instance Prelude.Eq CloudWatchAlarmDefinitionProperty
+instance Prelude.Show CloudWatchAlarmDefinitionProperty
+instance JSON.ToJSON CloudWatchAlarmDefinitionProperty
diff --git a/gen/Stratosphere/EMR/Cluster/ComputeLimitsProperty.hs b/gen/Stratosphere/EMR/Cluster/ComputeLimitsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ComputeLimitsProperty.hs
@@ -0,0 +1,86 @@
+module Stratosphere.EMR.Cluster.ComputeLimitsProperty (
+        ComputeLimitsProperty(..), mkComputeLimitsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ComputeLimitsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-computelimits.html>
+    ComputeLimitsProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-computelimits.html#cfn-elasticmapreduce-cluster-computelimits-maximumcapacityunits>
+                           maximumCapacityUnits :: (Value Prelude.Integer),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-computelimits.html#cfn-elasticmapreduce-cluster-computelimits-maximumcorecapacityunits>
+                           maximumCoreCapacityUnits :: (Prelude.Maybe (Value Prelude.Integer)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-computelimits.html#cfn-elasticmapreduce-cluster-computelimits-maximumondemandcapacityunits>
+                           maximumOnDemandCapacityUnits :: (Prelude.Maybe (Value Prelude.Integer)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-computelimits.html#cfn-elasticmapreduce-cluster-computelimits-minimumcapacityunits>
+                           minimumCapacityUnits :: (Value Prelude.Integer),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-computelimits.html#cfn-elasticmapreduce-cluster-computelimits-unittype>
+                           unitType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkComputeLimitsProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Integer
+     -> Value Prelude.Text -> ComputeLimitsProperty
+mkComputeLimitsProperty
+  maximumCapacityUnits
+  minimumCapacityUnits
+  unitType
+  = ComputeLimitsProperty
+      {haddock_workaround_ = (),
+       maximumCapacityUnits = maximumCapacityUnits,
+       minimumCapacityUnits = minimumCapacityUnits, unitType = unitType,
+       maximumCoreCapacityUnits = Prelude.Nothing,
+       maximumOnDemandCapacityUnits = Prelude.Nothing}
+instance ToResourceProperties ComputeLimitsProperty where
+  toResourceProperties ComputeLimitsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.ComputeLimits",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["MaximumCapacityUnits" JSON..= maximumCapacityUnits,
+                            "MinimumCapacityUnits" JSON..= minimumCapacityUnits,
+                            "UnitType" JSON..= unitType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "MaximumCoreCapacityUnits"
+                                 Prelude.<$> maximumCoreCapacityUnits,
+                               (JSON..=) "MaximumOnDemandCapacityUnits"
+                                 Prelude.<$> maximumOnDemandCapacityUnits]))}
+instance JSON.ToJSON ComputeLimitsProperty where
+  toJSON ComputeLimitsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["MaximumCapacityUnits" JSON..= maximumCapacityUnits,
+               "MinimumCapacityUnits" JSON..= minimumCapacityUnits,
+               "UnitType" JSON..= unitType]
+              (Prelude.catMaybes
+                 [(JSON..=) "MaximumCoreCapacityUnits"
+                    Prelude.<$> maximumCoreCapacityUnits,
+                  (JSON..=) "MaximumOnDemandCapacityUnits"
+                    Prelude.<$> maximumOnDemandCapacityUnits])))
+instance Property "MaximumCapacityUnits" ComputeLimitsProperty where
+  type PropertyType "MaximumCapacityUnits" ComputeLimitsProperty = Value Prelude.Integer
+  set newValue ComputeLimitsProperty {..}
+    = ComputeLimitsProperty {maximumCapacityUnits = newValue, ..}
+instance Property "MaximumCoreCapacityUnits" ComputeLimitsProperty where
+  type PropertyType "MaximumCoreCapacityUnits" ComputeLimitsProperty = Value Prelude.Integer
+  set newValue ComputeLimitsProperty {..}
+    = ComputeLimitsProperty
+        {maximumCoreCapacityUnits = Prelude.pure newValue, ..}
+instance Property "MaximumOnDemandCapacityUnits" ComputeLimitsProperty where
+  type PropertyType "MaximumOnDemandCapacityUnits" ComputeLimitsProperty = Value Prelude.Integer
+  set newValue ComputeLimitsProperty {..}
+    = ComputeLimitsProperty
+        {maximumOnDemandCapacityUnits = Prelude.pure newValue, ..}
+instance Property "MinimumCapacityUnits" ComputeLimitsProperty where
+  type PropertyType "MinimumCapacityUnits" ComputeLimitsProperty = Value Prelude.Integer
+  set newValue ComputeLimitsProperty {..}
+    = ComputeLimitsProperty {minimumCapacityUnits = newValue, ..}
+instance Property "UnitType" ComputeLimitsProperty where
+  type PropertyType "UnitType" ComputeLimitsProperty = Value Prelude.Text
+  set newValue ComputeLimitsProperty {..}
+    = ComputeLimitsProperty {unitType = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/ComputeLimitsProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/ComputeLimitsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ComputeLimitsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.ComputeLimitsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ComputeLimitsProperty :: Prelude.Type
+instance ToResourceProperties ComputeLimitsProperty
+instance Prelude.Eq ComputeLimitsProperty
+instance Prelude.Show ComputeLimitsProperty
+instance JSON.ToJSON ComputeLimitsProperty
diff --git a/gen/Stratosphere/EMR/Cluster/ConfigurationProperty.hs b/gen/Stratosphere/EMR/Cluster/ConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ConfigurationProperty.hs
@@ -0,0 +1,59 @@
+module Stratosphere.EMR.Cluster.ConfigurationProperty (
+        ConfigurationProperty(..), mkConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-configuration.html>
+    ConfigurationProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-configuration.html#cfn-elasticmapreduce-cluster-configuration-classification>
+                           classification :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-configuration.html#cfn-elasticmapreduce-cluster-configuration-configurationproperties>
+                           configurationProperties :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-configuration.html#cfn-elasticmapreduce-cluster-configuration-configurations>
+                           configurations :: (Prelude.Maybe [ConfigurationProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConfigurationProperty :: ConfigurationProperty
+mkConfigurationProperty
+  = ConfigurationProperty
+      {haddock_workaround_ = (), classification = Prelude.Nothing,
+       configurationProperties = Prelude.Nothing,
+       configurations = Prelude.Nothing}
+instance ToResourceProperties ConfigurationProperty where
+  toResourceProperties ConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.Configuration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Classification" Prelude.<$> classification,
+                            (JSON..=) "ConfigurationProperties"
+                              Prelude.<$> configurationProperties,
+                            (JSON..=) "Configurations" Prelude.<$> configurations])}
+instance JSON.ToJSON ConfigurationProperty where
+  toJSON ConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Classification" Prelude.<$> classification,
+               (JSON..=) "ConfigurationProperties"
+                 Prelude.<$> configurationProperties,
+               (JSON..=) "Configurations" Prelude.<$> configurations]))
+instance Property "Classification" ConfigurationProperty where
+  type PropertyType "Classification" ConfigurationProperty = Value Prelude.Text
+  set newValue ConfigurationProperty {..}
+    = ConfigurationProperty
+        {classification = Prelude.pure newValue, ..}
+instance Property "ConfigurationProperties" ConfigurationProperty where
+  type PropertyType "ConfigurationProperties" ConfigurationProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue ConfigurationProperty {..}
+    = ConfigurationProperty
+        {configurationProperties = Prelude.pure newValue, ..}
+instance Property "Configurations" ConfigurationProperty where
+  type PropertyType "Configurations" ConfigurationProperty = [ConfigurationProperty]
+  set newValue ConfigurationProperty {..}
+    = ConfigurationProperty
+        {configurations = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/ConfigurationProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/ConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.ConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ConfigurationProperty
+instance Prelude.Eq ConfigurationProperty
+instance Prelude.Show ConfigurationProperty
+instance JSON.ToJSON ConfigurationProperty
diff --git a/gen/Stratosphere/EMR/Cluster/EbsBlockDeviceConfigProperty.hs b/gen/Stratosphere/EMR/Cluster/EbsBlockDeviceConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/EbsBlockDeviceConfigProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.EMR.Cluster.EbsBlockDeviceConfigProperty (
+        module Exports, EbsBlockDeviceConfigProperty(..),
+        mkEbsBlockDeviceConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.VolumeSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EbsBlockDeviceConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ebsblockdeviceconfig.html>
+    EbsBlockDeviceConfigProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ebsblockdeviceconfig.html#cfn-elasticmapreduce-cluster-ebsblockdeviceconfig-volumespecification>
+                                  volumeSpecification :: VolumeSpecificationProperty,
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ebsblockdeviceconfig.html#cfn-elasticmapreduce-cluster-ebsblockdeviceconfig-volumesperinstance>
+                                  volumesPerInstance :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEbsBlockDeviceConfigProperty ::
+  VolumeSpecificationProperty -> EbsBlockDeviceConfigProperty
+mkEbsBlockDeviceConfigProperty volumeSpecification
+  = EbsBlockDeviceConfigProperty
+      {haddock_workaround_ = (),
+       volumeSpecification = volumeSpecification,
+       volumesPerInstance = Prelude.Nothing}
+instance ToResourceProperties EbsBlockDeviceConfigProperty where
+  toResourceProperties EbsBlockDeviceConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.EbsBlockDeviceConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["VolumeSpecification" JSON..= volumeSpecification]
+                           (Prelude.catMaybes
+                              [(JSON..=) "VolumesPerInstance" Prelude.<$> volumesPerInstance]))}
+instance JSON.ToJSON EbsBlockDeviceConfigProperty where
+  toJSON EbsBlockDeviceConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["VolumeSpecification" JSON..= volumeSpecification]
+              (Prelude.catMaybes
+                 [(JSON..=) "VolumesPerInstance" Prelude.<$> volumesPerInstance])))
+instance Property "VolumeSpecification" EbsBlockDeviceConfigProperty where
+  type PropertyType "VolumeSpecification" EbsBlockDeviceConfigProperty = VolumeSpecificationProperty
+  set newValue EbsBlockDeviceConfigProperty {..}
+    = EbsBlockDeviceConfigProperty {volumeSpecification = newValue, ..}
+instance Property "VolumesPerInstance" EbsBlockDeviceConfigProperty where
+  type PropertyType "VolumesPerInstance" EbsBlockDeviceConfigProperty = Value Prelude.Integer
+  set newValue EbsBlockDeviceConfigProperty {..}
+    = EbsBlockDeviceConfigProperty
+        {volumesPerInstance = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/EbsBlockDeviceConfigProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/EbsBlockDeviceConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/EbsBlockDeviceConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.EbsBlockDeviceConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EbsBlockDeviceConfigProperty :: Prelude.Type
+instance ToResourceProperties EbsBlockDeviceConfigProperty
+instance Prelude.Eq EbsBlockDeviceConfigProperty
+instance Prelude.Show EbsBlockDeviceConfigProperty
+instance JSON.ToJSON EbsBlockDeviceConfigProperty
diff --git a/gen/Stratosphere/EMR/Cluster/EbsConfigurationProperty.hs b/gen/Stratosphere/EMR/Cluster/EbsConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/EbsConfigurationProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.EMR.Cluster.EbsConfigurationProperty (
+        module Exports, EbsConfigurationProperty(..),
+        mkEbsConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.EbsBlockDeviceConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EbsConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ebsconfiguration.html>
+    EbsConfigurationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ebsconfiguration.html#cfn-elasticmapreduce-cluster-ebsconfiguration-ebsblockdeviceconfigs>
+                              ebsBlockDeviceConfigs :: (Prelude.Maybe [EbsBlockDeviceConfigProperty]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ebsconfiguration.html#cfn-elasticmapreduce-cluster-ebsconfiguration-ebsoptimized>
+                              ebsOptimized :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEbsConfigurationProperty :: EbsConfigurationProperty
+mkEbsConfigurationProperty
+  = EbsConfigurationProperty
+      {haddock_workaround_ = (), ebsBlockDeviceConfigs = Prelude.Nothing,
+       ebsOptimized = Prelude.Nothing}
+instance ToResourceProperties EbsConfigurationProperty where
+  toResourceProperties EbsConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.EbsConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EbsBlockDeviceConfigs"
+                              Prelude.<$> ebsBlockDeviceConfigs,
+                            (JSON..=) "EbsOptimized" Prelude.<$> ebsOptimized])}
+instance JSON.ToJSON EbsConfigurationProperty where
+  toJSON EbsConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EbsBlockDeviceConfigs"
+                 Prelude.<$> ebsBlockDeviceConfigs,
+               (JSON..=) "EbsOptimized" Prelude.<$> ebsOptimized]))
+instance Property "EbsBlockDeviceConfigs" EbsConfigurationProperty where
+  type PropertyType "EbsBlockDeviceConfigs" EbsConfigurationProperty = [EbsBlockDeviceConfigProperty]
+  set newValue EbsConfigurationProperty {..}
+    = EbsConfigurationProperty
+        {ebsBlockDeviceConfigs = Prelude.pure newValue, ..}
+instance Property "EbsOptimized" EbsConfigurationProperty where
+  type PropertyType "EbsOptimized" EbsConfigurationProperty = Value Prelude.Bool
+  set newValue EbsConfigurationProperty {..}
+    = EbsConfigurationProperty
+        {ebsOptimized = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/EbsConfigurationProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/EbsConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/EbsConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.EbsConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EbsConfigurationProperty :: Prelude.Type
+instance ToResourceProperties EbsConfigurationProperty
+instance Prelude.Eq EbsConfigurationProperty
+instance Prelude.Show EbsConfigurationProperty
+instance JSON.ToJSON EbsConfigurationProperty
diff --git a/gen/Stratosphere/EMR/Cluster/HadoopJarStepConfigProperty.hs b/gen/Stratosphere/EMR/Cluster/HadoopJarStepConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/HadoopJarStepConfigProperty.hs
@@ -0,0 +1,68 @@
+module Stratosphere.EMR.Cluster.HadoopJarStepConfigProperty (
+        module Exports, HadoopJarStepConfigProperty(..),
+        mkHadoopJarStepConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.KeyValueProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data HadoopJarStepConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-hadoopjarstepconfig.html>
+    HadoopJarStepConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-hadoopjarstepconfig.html#cfn-elasticmapreduce-cluster-hadoopjarstepconfig-args>
+                                 args :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-hadoopjarstepconfig.html#cfn-elasticmapreduce-cluster-hadoopjarstepconfig-jar>
+                                 jar :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-hadoopjarstepconfig.html#cfn-elasticmapreduce-cluster-hadoopjarstepconfig-mainclass>
+                                 mainClass :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-hadoopjarstepconfig.html#cfn-elasticmapreduce-cluster-hadoopjarstepconfig-stepproperties>
+                                 stepProperties :: (Prelude.Maybe [KeyValueProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHadoopJarStepConfigProperty ::
+  Value Prelude.Text -> HadoopJarStepConfigProperty
+mkHadoopJarStepConfigProperty jar
+  = HadoopJarStepConfigProperty
+      {haddock_workaround_ = (), jar = jar, args = Prelude.Nothing,
+       mainClass = Prelude.Nothing, stepProperties = Prelude.Nothing}
+instance ToResourceProperties HadoopJarStepConfigProperty where
+  toResourceProperties HadoopJarStepConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.HadoopJarStepConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Jar" JSON..= jar]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Args" Prelude.<$> args,
+                               (JSON..=) "MainClass" Prelude.<$> mainClass,
+                               (JSON..=) "StepProperties" Prelude.<$> stepProperties]))}
+instance JSON.ToJSON HadoopJarStepConfigProperty where
+  toJSON HadoopJarStepConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Jar" JSON..= jar]
+              (Prelude.catMaybes
+                 [(JSON..=) "Args" Prelude.<$> args,
+                  (JSON..=) "MainClass" Prelude.<$> mainClass,
+                  (JSON..=) "StepProperties" Prelude.<$> stepProperties])))
+instance Property "Args" HadoopJarStepConfigProperty where
+  type PropertyType "Args" HadoopJarStepConfigProperty = ValueList Prelude.Text
+  set newValue HadoopJarStepConfigProperty {..}
+    = HadoopJarStepConfigProperty {args = Prelude.pure newValue, ..}
+instance Property "Jar" HadoopJarStepConfigProperty where
+  type PropertyType "Jar" HadoopJarStepConfigProperty = Value Prelude.Text
+  set newValue HadoopJarStepConfigProperty {..}
+    = HadoopJarStepConfigProperty {jar = newValue, ..}
+instance Property "MainClass" HadoopJarStepConfigProperty where
+  type PropertyType "MainClass" HadoopJarStepConfigProperty = Value Prelude.Text
+  set newValue HadoopJarStepConfigProperty {..}
+    = HadoopJarStepConfigProperty
+        {mainClass = Prelude.pure newValue, ..}
+instance Property "StepProperties" HadoopJarStepConfigProperty where
+  type PropertyType "StepProperties" HadoopJarStepConfigProperty = [KeyValueProperty]
+  set newValue HadoopJarStepConfigProperty {..}
+    = HadoopJarStepConfigProperty
+        {stepProperties = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/HadoopJarStepConfigProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/HadoopJarStepConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/HadoopJarStepConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.HadoopJarStepConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HadoopJarStepConfigProperty :: Prelude.Type
+instance ToResourceProperties HadoopJarStepConfigProperty
+instance Prelude.Eq HadoopJarStepConfigProperty
+instance Prelude.Show HadoopJarStepConfigProperty
+instance JSON.ToJSON HadoopJarStepConfigProperty
diff --git a/gen/Stratosphere/EMR/Cluster/InstanceFleetConfigProperty.hs b/gen/Stratosphere/EMR/Cluster/InstanceFleetConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/InstanceFleetConfigProperty.hs
@@ -0,0 +1,91 @@
+module Stratosphere.EMR.Cluster.InstanceFleetConfigProperty (
+        module Exports, InstanceFleetConfigProperty(..),
+        mkInstanceFleetConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.InstanceFleetProvisioningSpecificationsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.InstanceFleetResizingSpecificationsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.InstanceTypeConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceFleetConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetconfig.html>
+    InstanceFleetConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetconfig.html#cfn-elasticmapreduce-cluster-instancefleetconfig-instancetypeconfigs>
+                                 instanceTypeConfigs :: (Prelude.Maybe [InstanceTypeConfigProperty]),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetconfig.html#cfn-elasticmapreduce-cluster-instancefleetconfig-launchspecifications>
+                                 launchSpecifications :: (Prelude.Maybe InstanceFleetProvisioningSpecificationsProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetconfig.html#cfn-elasticmapreduce-cluster-instancefleetconfig-name>
+                                 name :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetconfig.html#cfn-elasticmapreduce-cluster-instancefleetconfig-resizespecifications>
+                                 resizeSpecifications :: (Prelude.Maybe InstanceFleetResizingSpecificationsProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetconfig.html#cfn-elasticmapreduce-cluster-instancefleetconfig-targetondemandcapacity>
+                                 targetOnDemandCapacity :: (Prelude.Maybe (Value Prelude.Integer)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetconfig.html#cfn-elasticmapreduce-cluster-instancefleetconfig-targetspotcapacity>
+                                 targetSpotCapacity :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceFleetConfigProperty :: InstanceFleetConfigProperty
+mkInstanceFleetConfigProperty
+  = InstanceFleetConfigProperty
+      {haddock_workaround_ = (), instanceTypeConfigs = Prelude.Nothing,
+       launchSpecifications = Prelude.Nothing, name = Prelude.Nothing,
+       resizeSpecifications = Prelude.Nothing,
+       targetOnDemandCapacity = Prelude.Nothing,
+       targetSpotCapacity = Prelude.Nothing}
+instance ToResourceProperties InstanceFleetConfigProperty where
+  toResourceProperties InstanceFleetConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.InstanceFleetConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "InstanceTypeConfigs" Prelude.<$> instanceTypeConfigs,
+                            (JSON..=) "LaunchSpecifications" Prelude.<$> launchSpecifications,
+                            (JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "ResizeSpecifications" Prelude.<$> resizeSpecifications,
+                            (JSON..=) "TargetOnDemandCapacity"
+                              Prelude.<$> targetOnDemandCapacity,
+                            (JSON..=) "TargetSpotCapacity" Prelude.<$> targetSpotCapacity])}
+instance JSON.ToJSON InstanceFleetConfigProperty where
+  toJSON InstanceFleetConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "InstanceTypeConfigs" Prelude.<$> instanceTypeConfigs,
+               (JSON..=) "LaunchSpecifications" Prelude.<$> launchSpecifications,
+               (JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "ResizeSpecifications" Prelude.<$> resizeSpecifications,
+               (JSON..=) "TargetOnDemandCapacity"
+                 Prelude.<$> targetOnDemandCapacity,
+               (JSON..=) "TargetSpotCapacity" Prelude.<$> targetSpotCapacity]))
+instance Property "InstanceTypeConfigs" InstanceFleetConfigProperty where
+  type PropertyType "InstanceTypeConfigs" InstanceFleetConfigProperty = [InstanceTypeConfigProperty]
+  set newValue InstanceFleetConfigProperty {..}
+    = InstanceFleetConfigProperty
+        {instanceTypeConfigs = Prelude.pure newValue, ..}
+instance Property "LaunchSpecifications" InstanceFleetConfigProperty where
+  type PropertyType "LaunchSpecifications" InstanceFleetConfigProperty = InstanceFleetProvisioningSpecificationsProperty
+  set newValue InstanceFleetConfigProperty {..}
+    = InstanceFleetConfigProperty
+        {launchSpecifications = Prelude.pure newValue, ..}
+instance Property "Name" InstanceFleetConfigProperty where
+  type PropertyType "Name" InstanceFleetConfigProperty = Value Prelude.Text
+  set newValue InstanceFleetConfigProperty {..}
+    = InstanceFleetConfigProperty {name = Prelude.pure newValue, ..}
+instance Property "ResizeSpecifications" InstanceFleetConfigProperty where
+  type PropertyType "ResizeSpecifications" InstanceFleetConfigProperty = InstanceFleetResizingSpecificationsProperty
+  set newValue InstanceFleetConfigProperty {..}
+    = InstanceFleetConfigProperty
+        {resizeSpecifications = Prelude.pure newValue, ..}
+instance Property "TargetOnDemandCapacity" InstanceFleetConfigProperty where
+  type PropertyType "TargetOnDemandCapacity" InstanceFleetConfigProperty = Value Prelude.Integer
+  set newValue InstanceFleetConfigProperty {..}
+    = InstanceFleetConfigProperty
+        {targetOnDemandCapacity = Prelude.pure newValue, ..}
+instance Property "TargetSpotCapacity" InstanceFleetConfigProperty where
+  type PropertyType "TargetSpotCapacity" InstanceFleetConfigProperty = Value Prelude.Integer
+  set newValue InstanceFleetConfigProperty {..}
+    = InstanceFleetConfigProperty
+        {targetSpotCapacity = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/InstanceFleetConfigProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/InstanceFleetConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/InstanceFleetConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.InstanceFleetConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceFleetConfigProperty :: Prelude.Type
+instance ToResourceProperties InstanceFleetConfigProperty
+instance Prelude.Eq InstanceFleetConfigProperty
+instance Prelude.Show InstanceFleetConfigProperty
+instance JSON.ToJSON InstanceFleetConfigProperty
diff --git a/gen/Stratosphere/EMR/Cluster/InstanceFleetProvisioningSpecificationsProperty.hs b/gen/Stratosphere/EMR/Cluster/InstanceFleetProvisioningSpecificationsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/InstanceFleetProvisioningSpecificationsProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.EMR.Cluster.InstanceFleetProvisioningSpecificationsProperty (
+        module Exports,
+        InstanceFleetProvisioningSpecificationsProperty(..),
+        mkInstanceFleetProvisioningSpecificationsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.OnDemandProvisioningSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.SpotProvisioningSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+data InstanceFleetProvisioningSpecificationsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetprovisioningspecifications.html>
+    InstanceFleetProvisioningSpecificationsProperty {haddock_workaround_ :: (),
+                                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetprovisioningspecifications.html#cfn-elasticmapreduce-cluster-instancefleetprovisioningspecifications-ondemandspecification>
+                                                     onDemandSpecification :: (Prelude.Maybe OnDemandProvisioningSpecificationProperty),
+                                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetprovisioningspecifications.html#cfn-elasticmapreduce-cluster-instancefleetprovisioningspecifications-spotspecification>
+                                                     spotSpecification :: (Prelude.Maybe SpotProvisioningSpecificationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceFleetProvisioningSpecificationsProperty ::
+  InstanceFleetProvisioningSpecificationsProperty
+mkInstanceFleetProvisioningSpecificationsProperty
+  = InstanceFleetProvisioningSpecificationsProperty
+      {haddock_workaround_ = (), onDemandSpecification = Prelude.Nothing,
+       spotSpecification = Prelude.Nothing}
+instance ToResourceProperties InstanceFleetProvisioningSpecificationsProperty where
+  toResourceProperties
+    InstanceFleetProvisioningSpecificationsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.InstanceFleetProvisioningSpecifications",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "OnDemandSpecification"
+                              Prelude.<$> onDemandSpecification,
+                            (JSON..=) "SpotSpecification" Prelude.<$> spotSpecification])}
+instance JSON.ToJSON InstanceFleetProvisioningSpecificationsProperty where
+  toJSON InstanceFleetProvisioningSpecificationsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "OnDemandSpecification"
+                 Prelude.<$> onDemandSpecification,
+               (JSON..=) "SpotSpecification" Prelude.<$> spotSpecification]))
+instance Property "OnDemandSpecification" InstanceFleetProvisioningSpecificationsProperty where
+  type PropertyType "OnDemandSpecification" InstanceFleetProvisioningSpecificationsProperty = OnDemandProvisioningSpecificationProperty
+  set newValue InstanceFleetProvisioningSpecificationsProperty {..}
+    = InstanceFleetProvisioningSpecificationsProperty
+        {onDemandSpecification = Prelude.pure newValue, ..}
+instance Property "SpotSpecification" InstanceFleetProvisioningSpecificationsProperty where
+  type PropertyType "SpotSpecification" InstanceFleetProvisioningSpecificationsProperty = SpotProvisioningSpecificationProperty
+  set newValue InstanceFleetProvisioningSpecificationsProperty {..}
+    = InstanceFleetProvisioningSpecificationsProperty
+        {spotSpecification = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/InstanceFleetProvisioningSpecificationsProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/InstanceFleetProvisioningSpecificationsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/InstanceFleetProvisioningSpecificationsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.InstanceFleetProvisioningSpecificationsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceFleetProvisioningSpecificationsProperty :: Prelude.Type
+instance ToResourceProperties InstanceFleetProvisioningSpecificationsProperty
+instance Prelude.Eq InstanceFleetProvisioningSpecificationsProperty
+instance Prelude.Show InstanceFleetProvisioningSpecificationsProperty
+instance JSON.ToJSON InstanceFleetProvisioningSpecificationsProperty
diff --git a/gen/Stratosphere/EMR/Cluster/InstanceFleetResizingSpecificationsProperty.hs b/gen/Stratosphere/EMR/Cluster/InstanceFleetResizingSpecificationsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/InstanceFleetResizingSpecificationsProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.EMR.Cluster.InstanceFleetResizingSpecificationsProperty (
+        module Exports, InstanceFleetResizingSpecificationsProperty(..),
+        mkInstanceFleetResizingSpecificationsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.OnDemandResizingSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.SpotResizingSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+data InstanceFleetResizingSpecificationsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetresizingspecifications.html>
+    InstanceFleetResizingSpecificationsProperty {haddock_workaround_ :: (),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetresizingspecifications.html#cfn-elasticmapreduce-cluster-instancefleetresizingspecifications-ondemandresizespecification>
+                                                 onDemandResizeSpecification :: (Prelude.Maybe OnDemandResizingSpecificationProperty),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetresizingspecifications.html#cfn-elasticmapreduce-cluster-instancefleetresizingspecifications-spotresizespecification>
+                                                 spotResizeSpecification :: (Prelude.Maybe SpotResizingSpecificationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceFleetResizingSpecificationsProperty ::
+  InstanceFleetResizingSpecificationsProperty
+mkInstanceFleetResizingSpecificationsProperty
+  = InstanceFleetResizingSpecificationsProperty
+      {haddock_workaround_ = (),
+       onDemandResizeSpecification = Prelude.Nothing,
+       spotResizeSpecification = Prelude.Nothing}
+instance ToResourceProperties InstanceFleetResizingSpecificationsProperty where
+  toResourceProperties
+    InstanceFleetResizingSpecificationsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.InstanceFleetResizingSpecifications",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "OnDemandResizeSpecification"
+                              Prelude.<$> onDemandResizeSpecification,
+                            (JSON..=) "SpotResizeSpecification"
+                              Prelude.<$> spotResizeSpecification])}
+instance JSON.ToJSON InstanceFleetResizingSpecificationsProperty where
+  toJSON InstanceFleetResizingSpecificationsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "OnDemandResizeSpecification"
+                 Prelude.<$> onDemandResizeSpecification,
+               (JSON..=) "SpotResizeSpecification"
+                 Prelude.<$> spotResizeSpecification]))
+instance Property "OnDemandResizeSpecification" InstanceFleetResizingSpecificationsProperty where
+  type PropertyType "OnDemandResizeSpecification" InstanceFleetResizingSpecificationsProperty = OnDemandResizingSpecificationProperty
+  set newValue InstanceFleetResizingSpecificationsProperty {..}
+    = InstanceFleetResizingSpecificationsProperty
+        {onDemandResizeSpecification = Prelude.pure newValue, ..}
+instance Property "SpotResizeSpecification" InstanceFleetResizingSpecificationsProperty where
+  type PropertyType "SpotResizeSpecification" InstanceFleetResizingSpecificationsProperty = SpotResizingSpecificationProperty
+  set newValue InstanceFleetResizingSpecificationsProperty {..}
+    = InstanceFleetResizingSpecificationsProperty
+        {spotResizeSpecification = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/InstanceFleetResizingSpecificationsProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/InstanceFleetResizingSpecificationsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/InstanceFleetResizingSpecificationsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.InstanceFleetResizingSpecificationsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceFleetResizingSpecificationsProperty :: Prelude.Type
+instance ToResourceProperties InstanceFleetResizingSpecificationsProperty
+instance Prelude.Eq InstanceFleetResizingSpecificationsProperty
+instance Prelude.Show InstanceFleetResizingSpecificationsProperty
+instance JSON.ToJSON InstanceFleetResizingSpecificationsProperty
diff --git a/gen/Stratosphere/EMR/Cluster/InstanceGroupConfigProperty.hs b/gen/Stratosphere/EMR/Cluster/InstanceGroupConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/InstanceGroupConfigProperty.hs
@@ -0,0 +1,117 @@
+module Stratosphere.EMR.Cluster.InstanceGroupConfigProperty (
+        module Exports, InstanceGroupConfigProperty(..),
+        mkInstanceGroupConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.AutoScalingPolicyProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.ConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.EbsConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceGroupConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancegroupconfig.html>
+    InstanceGroupConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancegroupconfig.html#cfn-elasticmapreduce-cluster-instancegroupconfig-autoscalingpolicy>
+                                 autoScalingPolicy :: (Prelude.Maybe AutoScalingPolicyProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancegroupconfig.html#cfn-elasticmapreduce-cluster-instancegroupconfig-bidprice>
+                                 bidPrice :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancegroupconfig.html#cfn-elasticmapreduce-cluster-instancegroupconfig-configurations>
+                                 configurations :: (Prelude.Maybe [ConfigurationProperty]),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancegroupconfig.html#cfn-elasticmapreduce-cluster-instancegroupconfig-customamiid>
+                                 customAmiId :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancegroupconfig.html#cfn-elasticmapreduce-cluster-instancegroupconfig-ebsconfiguration>
+                                 ebsConfiguration :: (Prelude.Maybe EbsConfigurationProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancegroupconfig.html#cfn-elasticmapreduce-cluster-instancegroupconfig-instancecount>
+                                 instanceCount :: (Value Prelude.Integer),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancegroupconfig.html#cfn-elasticmapreduce-cluster-instancegroupconfig-instancetype>
+                                 instanceType :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancegroupconfig.html#cfn-elasticmapreduce-cluster-instancegroupconfig-market>
+                                 market :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancegroupconfig.html#cfn-elasticmapreduce-cluster-instancegroupconfig-name>
+                                 name :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceGroupConfigProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Text -> InstanceGroupConfigProperty
+mkInstanceGroupConfigProperty instanceCount instanceType
+  = InstanceGroupConfigProperty
+      {haddock_workaround_ = (), instanceCount = instanceCount,
+       instanceType = instanceType, autoScalingPolicy = Prelude.Nothing,
+       bidPrice = Prelude.Nothing, configurations = Prelude.Nothing,
+       customAmiId = Prelude.Nothing, ebsConfiguration = Prelude.Nothing,
+       market = Prelude.Nothing, name = Prelude.Nothing}
+instance ToResourceProperties InstanceGroupConfigProperty where
+  toResourceProperties InstanceGroupConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.InstanceGroupConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["InstanceCount" JSON..= instanceCount,
+                            "InstanceType" JSON..= instanceType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AutoScalingPolicy" Prelude.<$> autoScalingPolicy,
+                               (JSON..=) "BidPrice" Prelude.<$> bidPrice,
+                               (JSON..=) "Configurations" Prelude.<$> configurations,
+                               (JSON..=) "CustomAmiId" Prelude.<$> customAmiId,
+                               (JSON..=) "EbsConfiguration" Prelude.<$> ebsConfiguration,
+                               (JSON..=) "Market" Prelude.<$> market,
+                               (JSON..=) "Name" Prelude.<$> name]))}
+instance JSON.ToJSON InstanceGroupConfigProperty where
+  toJSON InstanceGroupConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["InstanceCount" JSON..= instanceCount,
+               "InstanceType" JSON..= instanceType]
+              (Prelude.catMaybes
+                 [(JSON..=) "AutoScalingPolicy" Prelude.<$> autoScalingPolicy,
+                  (JSON..=) "BidPrice" Prelude.<$> bidPrice,
+                  (JSON..=) "Configurations" Prelude.<$> configurations,
+                  (JSON..=) "CustomAmiId" Prelude.<$> customAmiId,
+                  (JSON..=) "EbsConfiguration" Prelude.<$> ebsConfiguration,
+                  (JSON..=) "Market" Prelude.<$> market,
+                  (JSON..=) "Name" Prelude.<$> name])))
+instance Property "AutoScalingPolicy" InstanceGroupConfigProperty where
+  type PropertyType "AutoScalingPolicy" InstanceGroupConfigProperty = AutoScalingPolicyProperty
+  set newValue InstanceGroupConfigProperty {..}
+    = InstanceGroupConfigProperty
+        {autoScalingPolicy = Prelude.pure newValue, ..}
+instance Property "BidPrice" InstanceGroupConfigProperty where
+  type PropertyType "BidPrice" InstanceGroupConfigProperty = Value Prelude.Text
+  set newValue InstanceGroupConfigProperty {..}
+    = InstanceGroupConfigProperty
+        {bidPrice = Prelude.pure newValue, ..}
+instance Property "Configurations" InstanceGroupConfigProperty where
+  type PropertyType "Configurations" InstanceGroupConfigProperty = [ConfigurationProperty]
+  set newValue InstanceGroupConfigProperty {..}
+    = InstanceGroupConfigProperty
+        {configurations = Prelude.pure newValue, ..}
+instance Property "CustomAmiId" InstanceGroupConfigProperty where
+  type PropertyType "CustomAmiId" InstanceGroupConfigProperty = Value Prelude.Text
+  set newValue InstanceGroupConfigProperty {..}
+    = InstanceGroupConfigProperty
+        {customAmiId = Prelude.pure newValue, ..}
+instance Property "EbsConfiguration" InstanceGroupConfigProperty where
+  type PropertyType "EbsConfiguration" InstanceGroupConfigProperty = EbsConfigurationProperty
+  set newValue InstanceGroupConfigProperty {..}
+    = InstanceGroupConfigProperty
+        {ebsConfiguration = Prelude.pure newValue, ..}
+instance Property "InstanceCount" InstanceGroupConfigProperty where
+  type PropertyType "InstanceCount" InstanceGroupConfigProperty = Value Prelude.Integer
+  set newValue InstanceGroupConfigProperty {..}
+    = InstanceGroupConfigProperty {instanceCount = newValue, ..}
+instance Property "InstanceType" InstanceGroupConfigProperty where
+  type PropertyType "InstanceType" InstanceGroupConfigProperty = Value Prelude.Text
+  set newValue InstanceGroupConfigProperty {..}
+    = InstanceGroupConfigProperty {instanceType = newValue, ..}
+instance Property "Market" InstanceGroupConfigProperty where
+  type PropertyType "Market" InstanceGroupConfigProperty = Value Prelude.Text
+  set newValue InstanceGroupConfigProperty {..}
+    = InstanceGroupConfigProperty {market = Prelude.pure newValue, ..}
+instance Property "Name" InstanceGroupConfigProperty where
+  type PropertyType "Name" InstanceGroupConfigProperty = Value Prelude.Text
+  set newValue InstanceGroupConfigProperty {..}
+    = InstanceGroupConfigProperty {name = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/InstanceGroupConfigProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/InstanceGroupConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/InstanceGroupConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.InstanceGroupConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceGroupConfigProperty :: Prelude.Type
+instance ToResourceProperties InstanceGroupConfigProperty
+instance Prelude.Eq InstanceGroupConfigProperty
+instance Prelude.Show InstanceGroupConfigProperty
+instance JSON.ToJSON InstanceGroupConfigProperty
diff --git a/gen/Stratosphere/EMR/Cluster/InstanceTypeConfigProperty.hs b/gen/Stratosphere/EMR/Cluster/InstanceTypeConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/InstanceTypeConfigProperty.hs
@@ -0,0 +1,110 @@
+module Stratosphere.EMR.Cluster.InstanceTypeConfigProperty (
+        module Exports, InstanceTypeConfigProperty(..),
+        mkInstanceTypeConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.ConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.EbsConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceTypeConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html>
+    InstanceTypeConfigProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html#cfn-elasticmapreduce-cluster-instancetypeconfig-bidprice>
+                                bidPrice :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html#cfn-elasticmapreduce-cluster-instancetypeconfig-bidpriceaspercentageofondemandprice>
+                                bidPriceAsPercentageOfOnDemandPrice :: (Prelude.Maybe (Value Prelude.Double)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html#cfn-elasticmapreduce-cluster-instancetypeconfig-configurations>
+                                configurations :: (Prelude.Maybe [ConfigurationProperty]),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html#cfn-elasticmapreduce-cluster-instancetypeconfig-customamiid>
+                                customAmiId :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html#cfn-elasticmapreduce-cluster-instancetypeconfig-ebsconfiguration>
+                                ebsConfiguration :: (Prelude.Maybe EbsConfigurationProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html#cfn-elasticmapreduce-cluster-instancetypeconfig-instancetype>
+                                instanceType :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html#cfn-elasticmapreduce-cluster-instancetypeconfig-priority>
+                                priority :: (Prelude.Maybe (Value Prelude.Double)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html#cfn-elasticmapreduce-cluster-instancetypeconfig-weightedcapacity>
+                                weightedCapacity :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceTypeConfigProperty ::
+  Value Prelude.Text -> InstanceTypeConfigProperty
+mkInstanceTypeConfigProperty instanceType
+  = InstanceTypeConfigProperty
+      {haddock_workaround_ = (), instanceType = instanceType,
+       bidPrice = Prelude.Nothing,
+       bidPriceAsPercentageOfOnDemandPrice = Prelude.Nothing,
+       configurations = Prelude.Nothing, customAmiId = Prelude.Nothing,
+       ebsConfiguration = Prelude.Nothing, priority = Prelude.Nothing,
+       weightedCapacity = Prelude.Nothing}
+instance ToResourceProperties InstanceTypeConfigProperty where
+  toResourceProperties InstanceTypeConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.InstanceTypeConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["InstanceType" JSON..= instanceType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "BidPrice" Prelude.<$> bidPrice,
+                               (JSON..=) "BidPriceAsPercentageOfOnDemandPrice"
+                                 Prelude.<$> bidPriceAsPercentageOfOnDemandPrice,
+                               (JSON..=) "Configurations" Prelude.<$> configurations,
+                               (JSON..=) "CustomAmiId" Prelude.<$> customAmiId,
+                               (JSON..=) "EbsConfiguration" Prelude.<$> ebsConfiguration,
+                               (JSON..=) "Priority" Prelude.<$> priority,
+                               (JSON..=) "WeightedCapacity" Prelude.<$> weightedCapacity]))}
+instance JSON.ToJSON InstanceTypeConfigProperty where
+  toJSON InstanceTypeConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["InstanceType" JSON..= instanceType]
+              (Prelude.catMaybes
+                 [(JSON..=) "BidPrice" Prelude.<$> bidPrice,
+                  (JSON..=) "BidPriceAsPercentageOfOnDemandPrice"
+                    Prelude.<$> bidPriceAsPercentageOfOnDemandPrice,
+                  (JSON..=) "Configurations" Prelude.<$> configurations,
+                  (JSON..=) "CustomAmiId" Prelude.<$> customAmiId,
+                  (JSON..=) "EbsConfiguration" Prelude.<$> ebsConfiguration,
+                  (JSON..=) "Priority" Prelude.<$> priority,
+                  (JSON..=) "WeightedCapacity" Prelude.<$> weightedCapacity])))
+instance Property "BidPrice" InstanceTypeConfigProperty where
+  type PropertyType "BidPrice" InstanceTypeConfigProperty = Value Prelude.Text
+  set newValue InstanceTypeConfigProperty {..}
+    = InstanceTypeConfigProperty {bidPrice = Prelude.pure newValue, ..}
+instance Property "BidPriceAsPercentageOfOnDemandPrice" InstanceTypeConfigProperty where
+  type PropertyType "BidPriceAsPercentageOfOnDemandPrice" InstanceTypeConfigProperty = Value Prelude.Double
+  set newValue InstanceTypeConfigProperty {..}
+    = InstanceTypeConfigProperty
+        {bidPriceAsPercentageOfOnDemandPrice = Prelude.pure newValue, ..}
+instance Property "Configurations" InstanceTypeConfigProperty where
+  type PropertyType "Configurations" InstanceTypeConfigProperty = [ConfigurationProperty]
+  set newValue InstanceTypeConfigProperty {..}
+    = InstanceTypeConfigProperty
+        {configurations = Prelude.pure newValue, ..}
+instance Property "CustomAmiId" InstanceTypeConfigProperty where
+  type PropertyType "CustomAmiId" InstanceTypeConfigProperty = Value Prelude.Text
+  set newValue InstanceTypeConfigProperty {..}
+    = InstanceTypeConfigProperty
+        {customAmiId = Prelude.pure newValue, ..}
+instance Property "EbsConfiguration" InstanceTypeConfigProperty where
+  type PropertyType "EbsConfiguration" InstanceTypeConfigProperty = EbsConfigurationProperty
+  set newValue InstanceTypeConfigProperty {..}
+    = InstanceTypeConfigProperty
+        {ebsConfiguration = Prelude.pure newValue, ..}
+instance Property "InstanceType" InstanceTypeConfigProperty where
+  type PropertyType "InstanceType" InstanceTypeConfigProperty = Value Prelude.Text
+  set newValue InstanceTypeConfigProperty {..}
+    = InstanceTypeConfigProperty {instanceType = newValue, ..}
+instance Property "Priority" InstanceTypeConfigProperty where
+  type PropertyType "Priority" InstanceTypeConfigProperty = Value Prelude.Double
+  set newValue InstanceTypeConfigProperty {..}
+    = InstanceTypeConfigProperty {priority = Prelude.pure newValue, ..}
+instance Property "WeightedCapacity" InstanceTypeConfigProperty where
+  type PropertyType "WeightedCapacity" InstanceTypeConfigProperty = Value Prelude.Integer
+  set newValue InstanceTypeConfigProperty {..}
+    = InstanceTypeConfigProperty
+        {weightedCapacity = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/InstanceTypeConfigProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/InstanceTypeConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/InstanceTypeConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.InstanceTypeConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceTypeConfigProperty :: Prelude.Type
+instance ToResourceProperties InstanceTypeConfigProperty
+instance Prelude.Eq InstanceTypeConfigProperty
+instance Prelude.Show InstanceTypeConfigProperty
+instance JSON.ToJSON InstanceTypeConfigProperty
diff --git a/gen/Stratosphere/EMR/Cluster/JobFlowInstancesConfigProperty.hs b/gen/Stratosphere/EMR/Cluster/JobFlowInstancesConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/JobFlowInstancesConfigProperty.hs
@@ -0,0 +1,233 @@
+module Stratosphere.EMR.Cluster.JobFlowInstancesConfigProperty (
+        module Exports, JobFlowInstancesConfigProperty(..),
+        mkJobFlowInstancesConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.InstanceFleetConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.InstanceGroupConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.PlacementTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data JobFlowInstancesConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html>
+    JobFlowInstancesConfigProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-additionalmastersecuritygroups>
+                                    additionalMasterSecurityGroups :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-additionalslavesecuritygroups>
+                                    additionalSlaveSecurityGroups :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-coreinstancefleet>
+                                    coreInstanceFleet :: (Prelude.Maybe InstanceFleetConfigProperty),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-coreinstancegroup>
+                                    coreInstanceGroup :: (Prelude.Maybe InstanceGroupConfigProperty),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-ec2keyname>
+                                    ec2KeyName :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-ec2subnetid>
+                                    ec2SubnetId :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-ec2subnetids>
+                                    ec2SubnetIds :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-emrmanagedmastersecuritygroup>
+                                    emrManagedMasterSecurityGroup :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-emrmanagedslavesecuritygroup>
+                                    emrManagedSlaveSecurityGroup :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-hadoopversion>
+                                    hadoopVersion :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-keepjobflowalivewhennosteps>
+                                    keepJobFlowAliveWhenNoSteps :: (Prelude.Maybe (Value Prelude.Bool)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-masterinstancefleet>
+                                    masterInstanceFleet :: (Prelude.Maybe InstanceFleetConfigProperty),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-masterinstancegroup>
+                                    masterInstanceGroup :: (Prelude.Maybe InstanceGroupConfigProperty),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-placement>
+                                    placement :: (Prelude.Maybe PlacementTypeProperty),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-serviceaccesssecuritygroup>
+                                    serviceAccessSecurityGroup :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-taskinstancefleets>
+                                    taskInstanceFleets :: (Prelude.Maybe [InstanceFleetConfigProperty]),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-taskinstancegroups>
+                                    taskInstanceGroups :: (Prelude.Maybe [InstanceGroupConfigProperty]),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-terminationprotected>
+                                    terminationProtected :: (Prelude.Maybe (Value Prelude.Bool)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-unhealthynodereplacement>
+                                    unhealthyNodeReplacement :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkJobFlowInstancesConfigProperty :: JobFlowInstancesConfigProperty
+mkJobFlowInstancesConfigProperty
+  = JobFlowInstancesConfigProperty
+      {haddock_workaround_ = (),
+       additionalMasterSecurityGroups = Prelude.Nothing,
+       additionalSlaveSecurityGroups = Prelude.Nothing,
+       coreInstanceFleet = Prelude.Nothing,
+       coreInstanceGroup = Prelude.Nothing, ec2KeyName = Prelude.Nothing,
+       ec2SubnetId = Prelude.Nothing, ec2SubnetIds = Prelude.Nothing,
+       emrManagedMasterSecurityGroup = Prelude.Nothing,
+       emrManagedSlaveSecurityGroup = Prelude.Nothing,
+       hadoopVersion = Prelude.Nothing,
+       keepJobFlowAliveWhenNoSteps = Prelude.Nothing,
+       masterInstanceFleet = Prelude.Nothing,
+       masterInstanceGroup = Prelude.Nothing, placement = Prelude.Nothing,
+       serviceAccessSecurityGroup = Prelude.Nothing,
+       taskInstanceFleets = Prelude.Nothing,
+       taskInstanceGroups = Prelude.Nothing,
+       terminationProtected = Prelude.Nothing,
+       unhealthyNodeReplacement = Prelude.Nothing}
+instance ToResourceProperties JobFlowInstancesConfigProperty where
+  toResourceProperties JobFlowInstancesConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.JobFlowInstancesConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AdditionalMasterSecurityGroups"
+                              Prelude.<$> additionalMasterSecurityGroups,
+                            (JSON..=) "AdditionalSlaveSecurityGroups"
+                              Prelude.<$> additionalSlaveSecurityGroups,
+                            (JSON..=) "CoreInstanceFleet" Prelude.<$> coreInstanceFleet,
+                            (JSON..=) "CoreInstanceGroup" Prelude.<$> coreInstanceGroup,
+                            (JSON..=) "Ec2KeyName" Prelude.<$> ec2KeyName,
+                            (JSON..=) "Ec2SubnetId" Prelude.<$> ec2SubnetId,
+                            (JSON..=) "Ec2SubnetIds" Prelude.<$> ec2SubnetIds,
+                            (JSON..=) "EmrManagedMasterSecurityGroup"
+                              Prelude.<$> emrManagedMasterSecurityGroup,
+                            (JSON..=) "EmrManagedSlaveSecurityGroup"
+                              Prelude.<$> emrManagedSlaveSecurityGroup,
+                            (JSON..=) "HadoopVersion" Prelude.<$> hadoopVersion,
+                            (JSON..=) "KeepJobFlowAliveWhenNoSteps"
+                              Prelude.<$> keepJobFlowAliveWhenNoSteps,
+                            (JSON..=) "MasterInstanceFleet" Prelude.<$> masterInstanceFleet,
+                            (JSON..=) "MasterInstanceGroup" Prelude.<$> masterInstanceGroup,
+                            (JSON..=) "Placement" Prelude.<$> placement,
+                            (JSON..=) "ServiceAccessSecurityGroup"
+                              Prelude.<$> serviceAccessSecurityGroup,
+                            (JSON..=) "TaskInstanceFleets" Prelude.<$> taskInstanceFleets,
+                            (JSON..=) "TaskInstanceGroups" Prelude.<$> taskInstanceGroups,
+                            (JSON..=) "TerminationProtected" Prelude.<$> terminationProtected,
+                            (JSON..=) "UnhealthyNodeReplacement"
+                              Prelude.<$> unhealthyNodeReplacement])}
+instance JSON.ToJSON JobFlowInstancesConfigProperty where
+  toJSON JobFlowInstancesConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AdditionalMasterSecurityGroups"
+                 Prelude.<$> additionalMasterSecurityGroups,
+               (JSON..=) "AdditionalSlaveSecurityGroups"
+                 Prelude.<$> additionalSlaveSecurityGroups,
+               (JSON..=) "CoreInstanceFleet" Prelude.<$> coreInstanceFleet,
+               (JSON..=) "CoreInstanceGroup" Prelude.<$> coreInstanceGroup,
+               (JSON..=) "Ec2KeyName" Prelude.<$> ec2KeyName,
+               (JSON..=) "Ec2SubnetId" Prelude.<$> ec2SubnetId,
+               (JSON..=) "Ec2SubnetIds" Prelude.<$> ec2SubnetIds,
+               (JSON..=) "EmrManagedMasterSecurityGroup"
+                 Prelude.<$> emrManagedMasterSecurityGroup,
+               (JSON..=) "EmrManagedSlaveSecurityGroup"
+                 Prelude.<$> emrManagedSlaveSecurityGroup,
+               (JSON..=) "HadoopVersion" Prelude.<$> hadoopVersion,
+               (JSON..=) "KeepJobFlowAliveWhenNoSteps"
+                 Prelude.<$> keepJobFlowAliveWhenNoSteps,
+               (JSON..=) "MasterInstanceFleet" Prelude.<$> masterInstanceFleet,
+               (JSON..=) "MasterInstanceGroup" Prelude.<$> masterInstanceGroup,
+               (JSON..=) "Placement" Prelude.<$> placement,
+               (JSON..=) "ServiceAccessSecurityGroup"
+                 Prelude.<$> serviceAccessSecurityGroup,
+               (JSON..=) "TaskInstanceFleets" Prelude.<$> taskInstanceFleets,
+               (JSON..=) "TaskInstanceGroups" Prelude.<$> taskInstanceGroups,
+               (JSON..=) "TerminationProtected" Prelude.<$> terminationProtected,
+               (JSON..=) "UnhealthyNodeReplacement"
+                 Prelude.<$> unhealthyNodeReplacement]))
+instance Property "AdditionalMasterSecurityGroups" JobFlowInstancesConfigProperty where
+  type PropertyType "AdditionalMasterSecurityGroups" JobFlowInstancesConfigProperty = ValueList Prelude.Text
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {additionalMasterSecurityGroups = Prelude.pure newValue, ..}
+instance Property "AdditionalSlaveSecurityGroups" JobFlowInstancesConfigProperty where
+  type PropertyType "AdditionalSlaveSecurityGroups" JobFlowInstancesConfigProperty = ValueList Prelude.Text
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {additionalSlaveSecurityGroups = Prelude.pure newValue, ..}
+instance Property "CoreInstanceFleet" JobFlowInstancesConfigProperty where
+  type PropertyType "CoreInstanceFleet" JobFlowInstancesConfigProperty = InstanceFleetConfigProperty
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {coreInstanceFleet = Prelude.pure newValue, ..}
+instance Property "CoreInstanceGroup" JobFlowInstancesConfigProperty where
+  type PropertyType "CoreInstanceGroup" JobFlowInstancesConfigProperty = InstanceGroupConfigProperty
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {coreInstanceGroup = Prelude.pure newValue, ..}
+instance Property "Ec2KeyName" JobFlowInstancesConfigProperty where
+  type PropertyType "Ec2KeyName" JobFlowInstancesConfigProperty = Value Prelude.Text
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {ec2KeyName = Prelude.pure newValue, ..}
+instance Property "Ec2SubnetId" JobFlowInstancesConfigProperty where
+  type PropertyType "Ec2SubnetId" JobFlowInstancesConfigProperty = Value Prelude.Text
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {ec2SubnetId = Prelude.pure newValue, ..}
+instance Property "Ec2SubnetIds" JobFlowInstancesConfigProperty where
+  type PropertyType "Ec2SubnetIds" JobFlowInstancesConfigProperty = ValueList Prelude.Text
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {ec2SubnetIds = Prelude.pure newValue, ..}
+instance Property "EmrManagedMasterSecurityGroup" JobFlowInstancesConfigProperty where
+  type PropertyType "EmrManagedMasterSecurityGroup" JobFlowInstancesConfigProperty = Value Prelude.Text
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {emrManagedMasterSecurityGroup = Prelude.pure newValue, ..}
+instance Property "EmrManagedSlaveSecurityGroup" JobFlowInstancesConfigProperty where
+  type PropertyType "EmrManagedSlaveSecurityGroup" JobFlowInstancesConfigProperty = Value Prelude.Text
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {emrManagedSlaveSecurityGroup = Prelude.pure newValue, ..}
+instance Property "HadoopVersion" JobFlowInstancesConfigProperty where
+  type PropertyType "HadoopVersion" JobFlowInstancesConfigProperty = Value Prelude.Text
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {hadoopVersion = Prelude.pure newValue, ..}
+instance Property "KeepJobFlowAliveWhenNoSteps" JobFlowInstancesConfigProperty where
+  type PropertyType "KeepJobFlowAliveWhenNoSteps" JobFlowInstancesConfigProperty = Value Prelude.Bool
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {keepJobFlowAliveWhenNoSteps = Prelude.pure newValue, ..}
+instance Property "MasterInstanceFleet" JobFlowInstancesConfigProperty where
+  type PropertyType "MasterInstanceFleet" JobFlowInstancesConfigProperty = InstanceFleetConfigProperty
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {masterInstanceFleet = Prelude.pure newValue, ..}
+instance Property "MasterInstanceGroup" JobFlowInstancesConfigProperty where
+  type PropertyType "MasterInstanceGroup" JobFlowInstancesConfigProperty = InstanceGroupConfigProperty
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {masterInstanceGroup = Prelude.pure newValue, ..}
+instance Property "Placement" JobFlowInstancesConfigProperty where
+  type PropertyType "Placement" JobFlowInstancesConfigProperty = PlacementTypeProperty
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {placement = Prelude.pure newValue, ..}
+instance Property "ServiceAccessSecurityGroup" JobFlowInstancesConfigProperty where
+  type PropertyType "ServiceAccessSecurityGroup" JobFlowInstancesConfigProperty = Value Prelude.Text
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {serviceAccessSecurityGroup = Prelude.pure newValue, ..}
+instance Property "TaskInstanceFleets" JobFlowInstancesConfigProperty where
+  type PropertyType "TaskInstanceFleets" JobFlowInstancesConfigProperty = [InstanceFleetConfigProperty]
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {taskInstanceFleets = Prelude.pure newValue, ..}
+instance Property "TaskInstanceGroups" JobFlowInstancesConfigProperty where
+  type PropertyType "TaskInstanceGroups" JobFlowInstancesConfigProperty = [InstanceGroupConfigProperty]
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {taskInstanceGroups = Prelude.pure newValue, ..}
+instance Property "TerminationProtected" JobFlowInstancesConfigProperty where
+  type PropertyType "TerminationProtected" JobFlowInstancesConfigProperty = Value Prelude.Bool
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {terminationProtected = Prelude.pure newValue, ..}
+instance Property "UnhealthyNodeReplacement" JobFlowInstancesConfigProperty where
+  type PropertyType "UnhealthyNodeReplacement" JobFlowInstancesConfigProperty = Value Prelude.Bool
+  set newValue JobFlowInstancesConfigProperty {..}
+    = JobFlowInstancesConfigProperty
+        {unhealthyNodeReplacement = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/JobFlowInstancesConfigProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/JobFlowInstancesConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/JobFlowInstancesConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.JobFlowInstancesConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data JobFlowInstancesConfigProperty :: Prelude.Type
+instance ToResourceProperties JobFlowInstancesConfigProperty
+instance Prelude.Eq JobFlowInstancesConfigProperty
+instance Prelude.Show JobFlowInstancesConfigProperty
+instance JSON.ToJSON JobFlowInstancesConfigProperty
diff --git a/gen/Stratosphere/EMR/Cluster/KerberosAttributesProperty.hs b/gen/Stratosphere/EMR/Cluster/KerberosAttributesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/KerberosAttributesProperty.hs
@@ -0,0 +1,80 @@
+module Stratosphere.EMR.Cluster.KerberosAttributesProperty (
+        KerberosAttributesProperty(..), mkKerberosAttributesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KerberosAttributesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-kerberosattributes.html>
+    KerberosAttributesProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-kerberosattributes.html#cfn-elasticmapreduce-cluster-kerberosattributes-addomainjoinpassword>
+                                aDDomainJoinPassword :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-kerberosattributes.html#cfn-elasticmapreduce-cluster-kerberosattributes-addomainjoinuser>
+                                aDDomainJoinUser :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-kerberosattributes.html#cfn-elasticmapreduce-cluster-kerberosattributes-crossrealmtrustprincipalpassword>
+                                crossRealmTrustPrincipalPassword :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-kerberosattributes.html#cfn-elasticmapreduce-cluster-kerberosattributes-kdcadminpassword>
+                                kdcAdminPassword :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-kerberosattributes.html#cfn-elasticmapreduce-cluster-kerberosattributes-realm>
+                                realm :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKerberosAttributesProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> KerberosAttributesProperty
+mkKerberosAttributesProperty kdcAdminPassword realm
+  = KerberosAttributesProperty
+      {haddock_workaround_ = (), kdcAdminPassword = kdcAdminPassword,
+       realm = realm, aDDomainJoinPassword = Prelude.Nothing,
+       aDDomainJoinUser = Prelude.Nothing,
+       crossRealmTrustPrincipalPassword = Prelude.Nothing}
+instance ToResourceProperties KerberosAttributesProperty where
+  toResourceProperties KerberosAttributesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.KerberosAttributes",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["KdcAdminPassword" JSON..= kdcAdminPassword,
+                            "Realm" JSON..= realm]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ADDomainJoinPassword" Prelude.<$> aDDomainJoinPassword,
+                               (JSON..=) "ADDomainJoinUser" Prelude.<$> aDDomainJoinUser,
+                               (JSON..=) "CrossRealmTrustPrincipalPassword"
+                                 Prelude.<$> crossRealmTrustPrincipalPassword]))}
+instance JSON.ToJSON KerberosAttributesProperty where
+  toJSON KerberosAttributesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["KdcAdminPassword" JSON..= kdcAdminPassword,
+               "Realm" JSON..= realm]
+              (Prelude.catMaybes
+                 [(JSON..=) "ADDomainJoinPassword" Prelude.<$> aDDomainJoinPassword,
+                  (JSON..=) "ADDomainJoinUser" Prelude.<$> aDDomainJoinUser,
+                  (JSON..=) "CrossRealmTrustPrincipalPassword"
+                    Prelude.<$> crossRealmTrustPrincipalPassword])))
+instance Property "ADDomainJoinPassword" KerberosAttributesProperty where
+  type PropertyType "ADDomainJoinPassword" KerberosAttributesProperty = Value Prelude.Text
+  set newValue KerberosAttributesProperty {..}
+    = KerberosAttributesProperty
+        {aDDomainJoinPassword = Prelude.pure newValue, ..}
+instance Property "ADDomainJoinUser" KerberosAttributesProperty where
+  type PropertyType "ADDomainJoinUser" KerberosAttributesProperty = Value Prelude.Text
+  set newValue KerberosAttributesProperty {..}
+    = KerberosAttributesProperty
+        {aDDomainJoinUser = Prelude.pure newValue, ..}
+instance Property "CrossRealmTrustPrincipalPassword" KerberosAttributesProperty where
+  type PropertyType "CrossRealmTrustPrincipalPassword" KerberosAttributesProperty = Value Prelude.Text
+  set newValue KerberosAttributesProperty {..}
+    = KerberosAttributesProperty
+        {crossRealmTrustPrincipalPassword = Prelude.pure newValue, ..}
+instance Property "KdcAdminPassword" KerberosAttributesProperty where
+  type PropertyType "KdcAdminPassword" KerberosAttributesProperty = Value Prelude.Text
+  set newValue KerberosAttributesProperty {..}
+    = KerberosAttributesProperty {kdcAdminPassword = newValue, ..}
+instance Property "Realm" KerberosAttributesProperty where
+  type PropertyType "Realm" KerberosAttributesProperty = Value Prelude.Text
+  set newValue KerberosAttributesProperty {..}
+    = KerberosAttributesProperty {realm = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/KerberosAttributesProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/KerberosAttributesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/KerberosAttributesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.KerberosAttributesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data KerberosAttributesProperty :: Prelude.Type
+instance ToResourceProperties KerberosAttributesProperty
+instance Prelude.Eq KerberosAttributesProperty
+instance Prelude.Show KerberosAttributesProperty
+instance JSON.ToJSON KerberosAttributesProperty
diff --git a/gen/Stratosphere/EMR/Cluster/KeyValueProperty.hs b/gen/Stratosphere/EMR/Cluster/KeyValueProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/KeyValueProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EMR.Cluster.KeyValueProperty (
+        KeyValueProperty(..), mkKeyValueProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KeyValueProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-keyvalue.html>
+    KeyValueProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-keyvalue.html#cfn-elasticmapreduce-cluster-keyvalue-key>
+                      key :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-keyvalue.html#cfn-elasticmapreduce-cluster-keyvalue-value>
+                      value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKeyValueProperty :: KeyValueProperty
+mkKeyValueProperty
+  = KeyValueProperty
+      {haddock_workaround_ = (), key = Prelude.Nothing,
+       value = Prelude.Nothing}
+instance ToResourceProperties KeyValueProperty where
+  toResourceProperties KeyValueProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.KeyValue",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Key" Prelude.<$> key,
+                            (JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON KeyValueProperty where
+  toJSON KeyValueProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Key" Prelude.<$> key,
+               (JSON..=) "Value" Prelude.<$> value]))
+instance Property "Key" KeyValueProperty where
+  type PropertyType "Key" KeyValueProperty = Value Prelude.Text
+  set newValue KeyValueProperty {..}
+    = KeyValueProperty {key = Prelude.pure newValue, ..}
+instance Property "Value" KeyValueProperty where
+  type PropertyType "Value" KeyValueProperty = Value Prelude.Text
+  set newValue KeyValueProperty {..}
+    = KeyValueProperty {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/KeyValueProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/KeyValueProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/KeyValueProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.KeyValueProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data KeyValueProperty :: Prelude.Type
+instance ToResourceProperties KeyValueProperty
+instance Prelude.Eq KeyValueProperty
+instance Prelude.Show KeyValueProperty
+instance JSON.ToJSON KeyValueProperty
diff --git a/gen/Stratosphere/EMR/Cluster/ManagedScalingPolicyProperty.hs b/gen/Stratosphere/EMR/Cluster/ManagedScalingPolicyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ManagedScalingPolicyProperty.hs
@@ -0,0 +1,61 @@
+module Stratosphere.EMR.Cluster.ManagedScalingPolicyProperty (
+        module Exports, ManagedScalingPolicyProperty(..),
+        mkManagedScalingPolicyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.ComputeLimitsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ManagedScalingPolicyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-managedscalingpolicy.html>
+    ManagedScalingPolicyProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-managedscalingpolicy.html#cfn-elasticmapreduce-cluster-managedscalingpolicy-computelimits>
+                                  computeLimits :: (Prelude.Maybe ComputeLimitsProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-managedscalingpolicy.html#cfn-elasticmapreduce-cluster-managedscalingpolicy-scalingstrategy>
+                                  scalingStrategy :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-managedscalingpolicy.html#cfn-elasticmapreduce-cluster-managedscalingpolicy-utilizationperformanceindex>
+                                  utilizationPerformanceIndex :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkManagedScalingPolicyProperty :: ManagedScalingPolicyProperty
+mkManagedScalingPolicyProperty
+  = ManagedScalingPolicyProperty
+      {haddock_workaround_ = (), computeLimits = Prelude.Nothing,
+       scalingStrategy = Prelude.Nothing,
+       utilizationPerformanceIndex = Prelude.Nothing}
+instance ToResourceProperties ManagedScalingPolicyProperty where
+  toResourceProperties ManagedScalingPolicyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.ManagedScalingPolicy",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ComputeLimits" Prelude.<$> computeLimits,
+                            (JSON..=) "ScalingStrategy" Prelude.<$> scalingStrategy,
+                            (JSON..=) "UtilizationPerformanceIndex"
+                              Prelude.<$> utilizationPerformanceIndex])}
+instance JSON.ToJSON ManagedScalingPolicyProperty where
+  toJSON ManagedScalingPolicyProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ComputeLimits" Prelude.<$> computeLimits,
+               (JSON..=) "ScalingStrategy" Prelude.<$> scalingStrategy,
+               (JSON..=) "UtilizationPerformanceIndex"
+                 Prelude.<$> utilizationPerformanceIndex]))
+instance Property "ComputeLimits" ManagedScalingPolicyProperty where
+  type PropertyType "ComputeLimits" ManagedScalingPolicyProperty = ComputeLimitsProperty
+  set newValue ManagedScalingPolicyProperty {..}
+    = ManagedScalingPolicyProperty
+        {computeLimits = Prelude.pure newValue, ..}
+instance Property "ScalingStrategy" ManagedScalingPolicyProperty where
+  type PropertyType "ScalingStrategy" ManagedScalingPolicyProperty = Value Prelude.Text
+  set newValue ManagedScalingPolicyProperty {..}
+    = ManagedScalingPolicyProperty
+        {scalingStrategy = Prelude.pure newValue, ..}
+instance Property "UtilizationPerformanceIndex" ManagedScalingPolicyProperty where
+  type PropertyType "UtilizationPerformanceIndex" ManagedScalingPolicyProperty = Value Prelude.Integer
+  set newValue ManagedScalingPolicyProperty {..}
+    = ManagedScalingPolicyProperty
+        {utilizationPerformanceIndex = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/ManagedScalingPolicyProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/ManagedScalingPolicyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ManagedScalingPolicyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.ManagedScalingPolicyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ManagedScalingPolicyProperty :: Prelude.Type
+instance ToResourceProperties ManagedScalingPolicyProperty
+instance Prelude.Eq ManagedScalingPolicyProperty
+instance Prelude.Show ManagedScalingPolicyProperty
+instance JSON.ToJSON ManagedScalingPolicyProperty
diff --git a/gen/Stratosphere/EMR/Cluster/MetricDimensionProperty.hs b/gen/Stratosphere/EMR/Cluster/MetricDimensionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/MetricDimensionProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.EMR.Cluster.MetricDimensionProperty (
+        MetricDimensionProperty(..), mkMetricDimensionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MetricDimensionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-metricdimension.html>
+    MetricDimensionProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-metricdimension.html#cfn-elasticmapreduce-cluster-metricdimension-key>
+                             key :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-metricdimension.html#cfn-elasticmapreduce-cluster-metricdimension-value>
+                             value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMetricDimensionProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> MetricDimensionProperty
+mkMetricDimensionProperty key value
+  = MetricDimensionProperty
+      {haddock_workaround_ = (), key = key, value = value}
+instance ToResourceProperties MetricDimensionProperty where
+  toResourceProperties MetricDimensionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.MetricDimension",
+         supportsTags = Prelude.False,
+         properties = ["Key" JSON..= key, "Value" JSON..= value]}
+instance JSON.ToJSON MetricDimensionProperty where
+  toJSON MetricDimensionProperty {..}
+    = JSON.object ["Key" JSON..= key, "Value" JSON..= value]
+instance Property "Key" MetricDimensionProperty where
+  type PropertyType "Key" MetricDimensionProperty = Value Prelude.Text
+  set newValue MetricDimensionProperty {..}
+    = MetricDimensionProperty {key = newValue, ..}
+instance Property "Value" MetricDimensionProperty where
+  type PropertyType "Value" MetricDimensionProperty = Value Prelude.Text
+  set newValue MetricDimensionProperty {..}
+    = MetricDimensionProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/MetricDimensionProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/MetricDimensionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/MetricDimensionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.MetricDimensionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MetricDimensionProperty :: Prelude.Type
+instance ToResourceProperties MetricDimensionProperty
+instance Prelude.Eq MetricDimensionProperty
+instance Prelude.Show MetricDimensionProperty
+instance JSON.ToJSON MetricDimensionProperty
diff --git a/gen/Stratosphere/EMR/Cluster/OnDemandCapacityReservationOptionsProperty.hs b/gen/Stratosphere/EMR/Cluster/OnDemandCapacityReservationOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/OnDemandCapacityReservationOptionsProperty.hs
@@ -0,0 +1,65 @@
+module Stratosphere.EMR.Cluster.OnDemandCapacityReservationOptionsProperty (
+        OnDemandCapacityReservationOptionsProperty(..),
+        mkOnDemandCapacityReservationOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OnDemandCapacityReservationOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ondemandcapacityreservationoptions.html>
+    OnDemandCapacityReservationOptionsProperty {haddock_workaround_ :: (),
+                                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ondemandcapacityreservationoptions.html#cfn-elasticmapreduce-cluster-ondemandcapacityreservationoptions-capacityreservationpreference>
+                                                capacityReservationPreference :: (Prelude.Maybe (Value Prelude.Text)),
+                                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ondemandcapacityreservationoptions.html#cfn-elasticmapreduce-cluster-ondemandcapacityreservationoptions-capacityreservationresourcegrouparn>
+                                                capacityReservationResourceGroupArn :: (Prelude.Maybe (Value Prelude.Text)),
+                                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ondemandcapacityreservationoptions.html#cfn-elasticmapreduce-cluster-ondemandcapacityreservationoptions-usagestrategy>
+                                                usageStrategy :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOnDemandCapacityReservationOptionsProperty ::
+  OnDemandCapacityReservationOptionsProperty
+mkOnDemandCapacityReservationOptionsProperty
+  = OnDemandCapacityReservationOptionsProperty
+      {haddock_workaround_ = (),
+       capacityReservationPreference = Prelude.Nothing,
+       capacityReservationResourceGroupArn = Prelude.Nothing,
+       usageStrategy = Prelude.Nothing}
+instance ToResourceProperties OnDemandCapacityReservationOptionsProperty where
+  toResourceProperties
+    OnDemandCapacityReservationOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.OnDemandCapacityReservationOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CapacityReservationPreference"
+                              Prelude.<$> capacityReservationPreference,
+                            (JSON..=) "CapacityReservationResourceGroupArn"
+                              Prelude.<$> capacityReservationResourceGroupArn,
+                            (JSON..=) "UsageStrategy" Prelude.<$> usageStrategy])}
+instance JSON.ToJSON OnDemandCapacityReservationOptionsProperty where
+  toJSON OnDemandCapacityReservationOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CapacityReservationPreference"
+                 Prelude.<$> capacityReservationPreference,
+               (JSON..=) "CapacityReservationResourceGroupArn"
+                 Prelude.<$> capacityReservationResourceGroupArn,
+               (JSON..=) "UsageStrategy" Prelude.<$> usageStrategy]))
+instance Property "CapacityReservationPreference" OnDemandCapacityReservationOptionsProperty where
+  type PropertyType "CapacityReservationPreference" OnDemandCapacityReservationOptionsProperty = Value Prelude.Text
+  set newValue OnDemandCapacityReservationOptionsProperty {..}
+    = OnDemandCapacityReservationOptionsProperty
+        {capacityReservationPreference = Prelude.pure newValue, ..}
+instance Property "CapacityReservationResourceGroupArn" OnDemandCapacityReservationOptionsProperty where
+  type PropertyType "CapacityReservationResourceGroupArn" OnDemandCapacityReservationOptionsProperty = Value Prelude.Text
+  set newValue OnDemandCapacityReservationOptionsProperty {..}
+    = OnDemandCapacityReservationOptionsProperty
+        {capacityReservationResourceGroupArn = Prelude.pure newValue, ..}
+instance Property "UsageStrategy" OnDemandCapacityReservationOptionsProperty where
+  type PropertyType "UsageStrategy" OnDemandCapacityReservationOptionsProperty = Value Prelude.Text
+  set newValue OnDemandCapacityReservationOptionsProperty {..}
+    = OnDemandCapacityReservationOptionsProperty
+        {usageStrategy = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/OnDemandCapacityReservationOptionsProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/OnDemandCapacityReservationOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/OnDemandCapacityReservationOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.OnDemandCapacityReservationOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OnDemandCapacityReservationOptionsProperty :: Prelude.Type
+instance ToResourceProperties OnDemandCapacityReservationOptionsProperty
+instance Prelude.Eq OnDemandCapacityReservationOptionsProperty
+instance Prelude.Show OnDemandCapacityReservationOptionsProperty
+instance JSON.ToJSON OnDemandCapacityReservationOptionsProperty
diff --git a/gen/Stratosphere/EMR/Cluster/OnDemandProvisioningSpecificationProperty.hs b/gen/Stratosphere/EMR/Cluster/OnDemandProvisioningSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/OnDemandProvisioningSpecificationProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.EMR.Cluster.OnDemandProvisioningSpecificationProperty (
+        module Exports, OnDemandProvisioningSpecificationProperty(..),
+        mkOnDemandProvisioningSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.OnDemandCapacityReservationOptionsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OnDemandProvisioningSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ondemandprovisioningspecification.html>
+    OnDemandProvisioningSpecificationProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ondemandprovisioningspecification.html#cfn-elasticmapreduce-cluster-ondemandprovisioningspecification-allocationstrategy>
+                                               allocationStrategy :: (Value Prelude.Text),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ondemandprovisioningspecification.html#cfn-elasticmapreduce-cluster-ondemandprovisioningspecification-capacityreservationoptions>
+                                               capacityReservationOptions :: (Prelude.Maybe OnDemandCapacityReservationOptionsProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOnDemandProvisioningSpecificationProperty ::
+  Value Prelude.Text -> OnDemandProvisioningSpecificationProperty
+mkOnDemandProvisioningSpecificationProperty allocationStrategy
+  = OnDemandProvisioningSpecificationProperty
+      {haddock_workaround_ = (), allocationStrategy = allocationStrategy,
+       capacityReservationOptions = Prelude.Nothing}
+instance ToResourceProperties OnDemandProvisioningSpecificationProperty where
+  toResourceProperties OnDemandProvisioningSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.OnDemandProvisioningSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AllocationStrategy" JSON..= allocationStrategy]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CapacityReservationOptions"
+                                 Prelude.<$> capacityReservationOptions]))}
+instance JSON.ToJSON OnDemandProvisioningSpecificationProperty where
+  toJSON OnDemandProvisioningSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AllocationStrategy" JSON..= allocationStrategy]
+              (Prelude.catMaybes
+                 [(JSON..=) "CapacityReservationOptions"
+                    Prelude.<$> capacityReservationOptions])))
+instance Property "AllocationStrategy" OnDemandProvisioningSpecificationProperty where
+  type PropertyType "AllocationStrategy" OnDemandProvisioningSpecificationProperty = Value Prelude.Text
+  set newValue OnDemandProvisioningSpecificationProperty {..}
+    = OnDemandProvisioningSpecificationProperty
+        {allocationStrategy = newValue, ..}
+instance Property "CapacityReservationOptions" OnDemandProvisioningSpecificationProperty where
+  type PropertyType "CapacityReservationOptions" OnDemandProvisioningSpecificationProperty = OnDemandCapacityReservationOptionsProperty
+  set newValue OnDemandProvisioningSpecificationProperty {..}
+    = OnDemandProvisioningSpecificationProperty
+        {capacityReservationOptions = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/OnDemandProvisioningSpecificationProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/OnDemandProvisioningSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/OnDemandProvisioningSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.OnDemandProvisioningSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OnDemandProvisioningSpecificationProperty :: Prelude.Type
+instance ToResourceProperties OnDemandProvisioningSpecificationProperty
+instance Prelude.Eq OnDemandProvisioningSpecificationProperty
+instance Prelude.Show OnDemandProvisioningSpecificationProperty
+instance JSON.ToJSON OnDemandProvisioningSpecificationProperty
diff --git a/gen/Stratosphere/EMR/Cluster/OnDemandResizingSpecificationProperty.hs b/gen/Stratosphere/EMR/Cluster/OnDemandResizingSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/OnDemandResizingSpecificationProperty.hs
@@ -0,0 +1,64 @@
+module Stratosphere.EMR.Cluster.OnDemandResizingSpecificationProperty (
+        module Exports, OnDemandResizingSpecificationProperty(..),
+        mkOnDemandResizingSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.OnDemandCapacityReservationOptionsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OnDemandResizingSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ondemandresizingspecification.html>
+    OnDemandResizingSpecificationProperty {haddock_workaround_ :: (),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ondemandresizingspecification.html#cfn-elasticmapreduce-cluster-ondemandresizingspecification-allocationstrategy>
+                                           allocationStrategy :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ondemandresizingspecification.html#cfn-elasticmapreduce-cluster-ondemandresizingspecification-capacityreservationoptions>
+                                           capacityReservationOptions :: (Prelude.Maybe OnDemandCapacityReservationOptionsProperty),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ondemandresizingspecification.html#cfn-elasticmapreduce-cluster-ondemandresizingspecification-timeoutdurationminutes>
+                                           timeoutDurationMinutes :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOnDemandResizingSpecificationProperty ::
+  OnDemandResizingSpecificationProperty
+mkOnDemandResizingSpecificationProperty
+  = OnDemandResizingSpecificationProperty
+      {haddock_workaround_ = (), allocationStrategy = Prelude.Nothing,
+       capacityReservationOptions = Prelude.Nothing,
+       timeoutDurationMinutes = Prelude.Nothing}
+instance ToResourceProperties OnDemandResizingSpecificationProperty where
+  toResourceProperties OnDemandResizingSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.OnDemandResizingSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+                            (JSON..=) "CapacityReservationOptions"
+                              Prelude.<$> capacityReservationOptions,
+                            (JSON..=) "TimeoutDurationMinutes"
+                              Prelude.<$> timeoutDurationMinutes])}
+instance JSON.ToJSON OnDemandResizingSpecificationProperty where
+  toJSON OnDemandResizingSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+               (JSON..=) "CapacityReservationOptions"
+                 Prelude.<$> capacityReservationOptions,
+               (JSON..=) "TimeoutDurationMinutes"
+                 Prelude.<$> timeoutDurationMinutes]))
+instance Property "AllocationStrategy" OnDemandResizingSpecificationProperty where
+  type PropertyType "AllocationStrategy" OnDemandResizingSpecificationProperty = Value Prelude.Text
+  set newValue OnDemandResizingSpecificationProperty {..}
+    = OnDemandResizingSpecificationProperty
+        {allocationStrategy = Prelude.pure newValue, ..}
+instance Property "CapacityReservationOptions" OnDemandResizingSpecificationProperty where
+  type PropertyType "CapacityReservationOptions" OnDemandResizingSpecificationProperty = OnDemandCapacityReservationOptionsProperty
+  set newValue OnDemandResizingSpecificationProperty {..}
+    = OnDemandResizingSpecificationProperty
+        {capacityReservationOptions = Prelude.pure newValue, ..}
+instance Property "TimeoutDurationMinutes" OnDemandResizingSpecificationProperty where
+  type PropertyType "TimeoutDurationMinutes" OnDemandResizingSpecificationProperty = Value Prelude.Integer
+  set newValue OnDemandResizingSpecificationProperty {..}
+    = OnDemandResizingSpecificationProperty
+        {timeoutDurationMinutes = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/OnDemandResizingSpecificationProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/OnDemandResizingSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/OnDemandResizingSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.OnDemandResizingSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OnDemandResizingSpecificationProperty :: Prelude.Type
+instance ToResourceProperties OnDemandResizingSpecificationProperty
+instance Prelude.Eq OnDemandResizingSpecificationProperty
+instance Prelude.Show OnDemandResizingSpecificationProperty
+instance JSON.ToJSON OnDemandResizingSpecificationProperty
diff --git a/gen/Stratosphere/EMR/Cluster/PlacementGroupConfigProperty.hs b/gen/Stratosphere/EMR/Cluster/PlacementGroupConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/PlacementGroupConfigProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EMR.Cluster.PlacementGroupConfigProperty (
+        PlacementGroupConfigProperty(..), mkPlacementGroupConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PlacementGroupConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-placementgroupconfig.html>
+    PlacementGroupConfigProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-placementgroupconfig.html#cfn-elasticmapreduce-cluster-placementgroupconfig-instancerole>
+                                  instanceRole :: (Value Prelude.Text),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-placementgroupconfig.html#cfn-elasticmapreduce-cluster-placementgroupconfig-placementstrategy>
+                                  placementStrategy :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPlacementGroupConfigProperty ::
+  Value Prelude.Text -> PlacementGroupConfigProperty
+mkPlacementGroupConfigProperty instanceRole
+  = PlacementGroupConfigProperty
+      {haddock_workaround_ = (), instanceRole = instanceRole,
+       placementStrategy = Prelude.Nothing}
+instance ToResourceProperties PlacementGroupConfigProperty where
+  toResourceProperties PlacementGroupConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.PlacementGroupConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["InstanceRole" JSON..= instanceRole]
+                           (Prelude.catMaybes
+                              [(JSON..=) "PlacementStrategy" Prelude.<$> placementStrategy]))}
+instance JSON.ToJSON PlacementGroupConfigProperty where
+  toJSON PlacementGroupConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["InstanceRole" JSON..= instanceRole]
+              (Prelude.catMaybes
+                 [(JSON..=) "PlacementStrategy" Prelude.<$> placementStrategy])))
+instance Property "InstanceRole" PlacementGroupConfigProperty where
+  type PropertyType "InstanceRole" PlacementGroupConfigProperty = Value Prelude.Text
+  set newValue PlacementGroupConfigProperty {..}
+    = PlacementGroupConfigProperty {instanceRole = newValue, ..}
+instance Property "PlacementStrategy" PlacementGroupConfigProperty where
+  type PropertyType "PlacementStrategy" PlacementGroupConfigProperty = Value Prelude.Text
+  set newValue PlacementGroupConfigProperty {..}
+    = PlacementGroupConfigProperty
+        {placementStrategy = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/PlacementGroupConfigProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/PlacementGroupConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/PlacementGroupConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.PlacementGroupConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PlacementGroupConfigProperty :: Prelude.Type
+instance ToResourceProperties PlacementGroupConfigProperty
+instance Prelude.Eq PlacementGroupConfigProperty
+instance Prelude.Show PlacementGroupConfigProperty
+instance JSON.ToJSON PlacementGroupConfigProperty
diff --git a/gen/Stratosphere/EMR/Cluster/PlacementTypeProperty.hs b/gen/Stratosphere/EMR/Cluster/PlacementTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/PlacementTypeProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.EMR.Cluster.PlacementTypeProperty (
+        PlacementTypeProperty(..), mkPlacementTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PlacementTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-placementtype.html>
+    PlacementTypeProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-placementtype.html#cfn-elasticmapreduce-cluster-placementtype-availabilityzone>
+                           availabilityZone :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPlacementTypeProperty ::
+  Value Prelude.Text -> PlacementTypeProperty
+mkPlacementTypeProperty availabilityZone
+  = PlacementTypeProperty
+      {haddock_workaround_ = (), availabilityZone = availabilityZone}
+instance ToResourceProperties PlacementTypeProperty where
+  toResourceProperties PlacementTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.PlacementType",
+         supportsTags = Prelude.False,
+         properties = ["AvailabilityZone" JSON..= availabilityZone]}
+instance JSON.ToJSON PlacementTypeProperty where
+  toJSON PlacementTypeProperty {..}
+    = JSON.object ["AvailabilityZone" JSON..= availabilityZone]
+instance Property "AvailabilityZone" PlacementTypeProperty where
+  type PropertyType "AvailabilityZone" PlacementTypeProperty = Value Prelude.Text
+  set newValue PlacementTypeProperty {..}
+    = PlacementTypeProperty {availabilityZone = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/PlacementTypeProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/PlacementTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/PlacementTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.PlacementTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PlacementTypeProperty :: Prelude.Type
+instance ToResourceProperties PlacementTypeProperty
+instance Prelude.Eq PlacementTypeProperty
+instance Prelude.Show PlacementTypeProperty
+instance JSON.ToJSON PlacementTypeProperty
diff --git a/gen/Stratosphere/EMR/Cluster/ScalingActionProperty.hs b/gen/Stratosphere/EMR/Cluster/ScalingActionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ScalingActionProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.EMR.Cluster.ScalingActionProperty (
+        module Exports, ScalingActionProperty(..), mkScalingActionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.SimpleScalingPolicyConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ScalingActionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingaction.html>
+    ScalingActionProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingaction.html#cfn-elasticmapreduce-cluster-scalingaction-market>
+                           market :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingaction.html#cfn-elasticmapreduce-cluster-scalingaction-simplescalingpolicyconfiguration>
+                           simpleScalingPolicyConfiguration :: SimpleScalingPolicyConfigurationProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScalingActionProperty ::
+  SimpleScalingPolicyConfigurationProperty -> ScalingActionProperty
+mkScalingActionProperty simpleScalingPolicyConfiguration
+  = ScalingActionProperty
+      {haddock_workaround_ = (),
+       simpleScalingPolicyConfiguration = simpleScalingPolicyConfiguration,
+       market = Prelude.Nothing}
+instance ToResourceProperties ScalingActionProperty where
+  toResourceProperties ScalingActionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.ScalingAction",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SimpleScalingPolicyConfiguration"
+                              JSON..= simpleScalingPolicyConfiguration]
+                           (Prelude.catMaybes [(JSON..=) "Market" Prelude.<$> market]))}
+instance JSON.ToJSON ScalingActionProperty where
+  toJSON ScalingActionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SimpleScalingPolicyConfiguration"
+                 JSON..= simpleScalingPolicyConfiguration]
+              (Prelude.catMaybes [(JSON..=) "Market" Prelude.<$> market])))
+instance Property "Market" ScalingActionProperty where
+  type PropertyType "Market" ScalingActionProperty = Value Prelude.Text
+  set newValue ScalingActionProperty {..}
+    = ScalingActionProperty {market = Prelude.pure newValue, ..}
+instance Property "SimpleScalingPolicyConfiguration" ScalingActionProperty where
+  type PropertyType "SimpleScalingPolicyConfiguration" ScalingActionProperty = SimpleScalingPolicyConfigurationProperty
+  set newValue ScalingActionProperty {..}
+    = ScalingActionProperty
+        {simpleScalingPolicyConfiguration = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/ScalingActionProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/ScalingActionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ScalingActionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.ScalingActionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScalingActionProperty :: Prelude.Type
+instance ToResourceProperties ScalingActionProperty
+instance Prelude.Eq ScalingActionProperty
+instance Prelude.Show ScalingActionProperty
+instance JSON.ToJSON ScalingActionProperty
diff --git a/gen/Stratosphere/EMR/Cluster/ScalingConstraintsProperty.hs b/gen/Stratosphere/EMR/Cluster/ScalingConstraintsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ScalingConstraintsProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.EMR.Cluster.ScalingConstraintsProperty (
+        ScalingConstraintsProperty(..), mkScalingConstraintsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ScalingConstraintsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingconstraints.html>
+    ScalingConstraintsProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingconstraints.html#cfn-elasticmapreduce-cluster-scalingconstraints-maxcapacity>
+                                maxCapacity :: (Value Prelude.Integer),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingconstraints.html#cfn-elasticmapreduce-cluster-scalingconstraints-mincapacity>
+                                minCapacity :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScalingConstraintsProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Integer -> ScalingConstraintsProperty
+mkScalingConstraintsProperty maxCapacity minCapacity
+  = ScalingConstraintsProperty
+      {haddock_workaround_ = (), maxCapacity = maxCapacity,
+       minCapacity = minCapacity}
+instance ToResourceProperties ScalingConstraintsProperty where
+  toResourceProperties ScalingConstraintsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.ScalingConstraints",
+         supportsTags = Prelude.False,
+         properties = ["MaxCapacity" JSON..= maxCapacity,
+                       "MinCapacity" JSON..= minCapacity]}
+instance JSON.ToJSON ScalingConstraintsProperty where
+  toJSON ScalingConstraintsProperty {..}
+    = JSON.object
+        ["MaxCapacity" JSON..= maxCapacity,
+         "MinCapacity" JSON..= minCapacity]
+instance Property "MaxCapacity" ScalingConstraintsProperty where
+  type PropertyType "MaxCapacity" ScalingConstraintsProperty = Value Prelude.Integer
+  set newValue ScalingConstraintsProperty {..}
+    = ScalingConstraintsProperty {maxCapacity = newValue, ..}
+instance Property "MinCapacity" ScalingConstraintsProperty where
+  type PropertyType "MinCapacity" ScalingConstraintsProperty = Value Prelude.Integer
+  set newValue ScalingConstraintsProperty {..}
+    = ScalingConstraintsProperty {minCapacity = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/ScalingConstraintsProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/ScalingConstraintsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ScalingConstraintsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.ScalingConstraintsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScalingConstraintsProperty :: Prelude.Type
+instance ToResourceProperties ScalingConstraintsProperty
+instance Prelude.Eq ScalingConstraintsProperty
+instance Prelude.Show ScalingConstraintsProperty
+instance JSON.ToJSON ScalingConstraintsProperty
diff --git a/gen/Stratosphere/EMR/Cluster/ScalingRuleProperty.hs b/gen/Stratosphere/EMR/Cluster/ScalingRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ScalingRuleProperty.hs
@@ -0,0 +1,66 @@
+module Stratosphere.EMR.Cluster.ScalingRuleProperty (
+        module Exports, ScalingRuleProperty(..), mkScalingRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.ScalingActionProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.ScalingTriggerProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ScalingRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingrule.html>
+    ScalingRuleProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingrule.html#cfn-elasticmapreduce-cluster-scalingrule-action>
+                         action :: ScalingActionProperty,
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingrule.html#cfn-elasticmapreduce-cluster-scalingrule-description>
+                         description :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingrule.html#cfn-elasticmapreduce-cluster-scalingrule-name>
+                         name :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingrule.html#cfn-elasticmapreduce-cluster-scalingrule-trigger>
+                         trigger :: ScalingTriggerProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScalingRuleProperty ::
+  ScalingActionProperty
+  -> Value Prelude.Text
+     -> ScalingTriggerProperty -> ScalingRuleProperty
+mkScalingRuleProperty action name trigger
+  = ScalingRuleProperty
+      {haddock_workaround_ = (), action = action, name = name,
+       trigger = trigger, description = Prelude.Nothing}
+instance ToResourceProperties ScalingRuleProperty where
+  toResourceProperties ScalingRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.ScalingRule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Action" JSON..= action, "Name" JSON..= name,
+                            "Trigger" JSON..= trigger]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description]))}
+instance JSON.ToJSON ScalingRuleProperty where
+  toJSON ScalingRuleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Action" JSON..= action, "Name" JSON..= name,
+               "Trigger" JSON..= trigger]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description])))
+instance Property "Action" ScalingRuleProperty where
+  type PropertyType "Action" ScalingRuleProperty = ScalingActionProperty
+  set newValue ScalingRuleProperty {..}
+    = ScalingRuleProperty {action = newValue, ..}
+instance Property "Description" ScalingRuleProperty where
+  type PropertyType "Description" ScalingRuleProperty = Value Prelude.Text
+  set newValue ScalingRuleProperty {..}
+    = ScalingRuleProperty {description = Prelude.pure newValue, ..}
+instance Property "Name" ScalingRuleProperty where
+  type PropertyType "Name" ScalingRuleProperty = Value Prelude.Text
+  set newValue ScalingRuleProperty {..}
+    = ScalingRuleProperty {name = newValue, ..}
+instance Property "Trigger" ScalingRuleProperty where
+  type PropertyType "Trigger" ScalingRuleProperty = ScalingTriggerProperty
+  set newValue ScalingRuleProperty {..}
+    = ScalingRuleProperty {trigger = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/ScalingRuleProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/ScalingRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ScalingRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.ScalingRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScalingRuleProperty :: Prelude.Type
+instance ToResourceProperties ScalingRuleProperty
+instance Prelude.Eq ScalingRuleProperty
+instance Prelude.Show ScalingRuleProperty
+instance JSON.ToJSON ScalingRuleProperty
diff --git a/gen/Stratosphere/EMR/Cluster/ScalingTriggerProperty.hs b/gen/Stratosphere/EMR/Cluster/ScalingTriggerProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ScalingTriggerProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.EMR.Cluster.ScalingTriggerProperty (
+        module Exports, ScalingTriggerProperty(..),
+        mkScalingTriggerProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.CloudWatchAlarmDefinitionProperty as Exports
+import Stratosphere.ResourceProperties
+data ScalingTriggerProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingtrigger.html>
+    ScalingTriggerProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingtrigger.html#cfn-elasticmapreduce-cluster-scalingtrigger-cloudwatchalarmdefinition>
+                            cloudWatchAlarmDefinition :: CloudWatchAlarmDefinitionProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScalingTriggerProperty ::
+  CloudWatchAlarmDefinitionProperty -> ScalingTriggerProperty
+mkScalingTriggerProperty cloudWatchAlarmDefinition
+  = ScalingTriggerProperty
+      {haddock_workaround_ = (),
+       cloudWatchAlarmDefinition = cloudWatchAlarmDefinition}
+instance ToResourceProperties ScalingTriggerProperty where
+  toResourceProperties ScalingTriggerProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.ScalingTrigger",
+         supportsTags = Prelude.False,
+         properties = ["CloudWatchAlarmDefinition"
+                         JSON..= cloudWatchAlarmDefinition]}
+instance JSON.ToJSON ScalingTriggerProperty where
+  toJSON ScalingTriggerProperty {..}
+    = JSON.object
+        ["CloudWatchAlarmDefinition" JSON..= cloudWatchAlarmDefinition]
+instance Property "CloudWatchAlarmDefinition" ScalingTriggerProperty where
+  type PropertyType "CloudWatchAlarmDefinition" ScalingTriggerProperty = CloudWatchAlarmDefinitionProperty
+  set newValue ScalingTriggerProperty {..}
+    = ScalingTriggerProperty {cloudWatchAlarmDefinition = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/ScalingTriggerProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/ScalingTriggerProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ScalingTriggerProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.ScalingTriggerProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScalingTriggerProperty :: Prelude.Type
+instance ToResourceProperties ScalingTriggerProperty
+instance Prelude.Eq ScalingTriggerProperty
+instance Prelude.Show ScalingTriggerProperty
+instance JSON.ToJSON ScalingTriggerProperty
diff --git a/gen/Stratosphere/EMR/Cluster/ScriptBootstrapActionConfigProperty.hs b/gen/Stratosphere/EMR/Cluster/ScriptBootstrapActionConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ScriptBootstrapActionConfigProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.EMR.Cluster.ScriptBootstrapActionConfigProperty (
+        ScriptBootstrapActionConfigProperty(..),
+        mkScriptBootstrapActionConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ScriptBootstrapActionConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scriptbootstrapactionconfig.html>
+    ScriptBootstrapActionConfigProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scriptbootstrapactionconfig.html#cfn-elasticmapreduce-cluster-scriptbootstrapactionconfig-args>
+                                         args :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scriptbootstrapactionconfig.html#cfn-elasticmapreduce-cluster-scriptbootstrapactionconfig-path>
+                                         path :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScriptBootstrapActionConfigProperty ::
+  Value Prelude.Text -> ScriptBootstrapActionConfigProperty
+mkScriptBootstrapActionConfigProperty path
+  = ScriptBootstrapActionConfigProperty
+      {haddock_workaround_ = (), path = path, args = Prelude.Nothing}
+instance ToResourceProperties ScriptBootstrapActionConfigProperty where
+  toResourceProperties ScriptBootstrapActionConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.ScriptBootstrapActionConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Path" JSON..= path]
+                           (Prelude.catMaybes [(JSON..=) "Args" Prelude.<$> args]))}
+instance JSON.ToJSON ScriptBootstrapActionConfigProperty where
+  toJSON ScriptBootstrapActionConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Path" JSON..= path]
+              (Prelude.catMaybes [(JSON..=) "Args" Prelude.<$> args])))
+instance Property "Args" ScriptBootstrapActionConfigProperty where
+  type PropertyType "Args" ScriptBootstrapActionConfigProperty = ValueList Prelude.Text
+  set newValue ScriptBootstrapActionConfigProperty {..}
+    = ScriptBootstrapActionConfigProperty
+        {args = Prelude.pure newValue, ..}
+instance Property "Path" ScriptBootstrapActionConfigProperty where
+  type PropertyType "Path" ScriptBootstrapActionConfigProperty = Value Prelude.Text
+  set newValue ScriptBootstrapActionConfigProperty {..}
+    = ScriptBootstrapActionConfigProperty {path = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/ScriptBootstrapActionConfigProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/ScriptBootstrapActionConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/ScriptBootstrapActionConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.ScriptBootstrapActionConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScriptBootstrapActionConfigProperty :: Prelude.Type
+instance ToResourceProperties ScriptBootstrapActionConfigProperty
+instance Prelude.Eq ScriptBootstrapActionConfigProperty
+instance Prelude.Show ScriptBootstrapActionConfigProperty
+instance JSON.ToJSON ScriptBootstrapActionConfigProperty
diff --git a/gen/Stratosphere/EMR/Cluster/SimpleScalingPolicyConfigurationProperty.hs b/gen/Stratosphere/EMR/Cluster/SimpleScalingPolicyConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/SimpleScalingPolicyConfigurationProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.EMR.Cluster.SimpleScalingPolicyConfigurationProperty (
+        SimpleScalingPolicyConfigurationProperty(..),
+        mkSimpleScalingPolicyConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SimpleScalingPolicyConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-simplescalingpolicyconfiguration.html>
+    SimpleScalingPolicyConfigurationProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-simplescalingpolicyconfiguration.html#cfn-elasticmapreduce-cluster-simplescalingpolicyconfiguration-adjustmenttype>
+                                              adjustmentType :: (Prelude.Maybe (Value Prelude.Text)),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-simplescalingpolicyconfiguration.html#cfn-elasticmapreduce-cluster-simplescalingpolicyconfiguration-cooldown>
+                                              coolDown :: (Prelude.Maybe (Value Prelude.Integer)),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-simplescalingpolicyconfiguration.html#cfn-elasticmapreduce-cluster-simplescalingpolicyconfiguration-scalingadjustment>
+                                              scalingAdjustment :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSimpleScalingPolicyConfigurationProperty ::
+  Value Prelude.Integer -> SimpleScalingPolicyConfigurationProperty
+mkSimpleScalingPolicyConfigurationProperty scalingAdjustment
+  = SimpleScalingPolicyConfigurationProperty
+      {haddock_workaround_ = (), scalingAdjustment = scalingAdjustment,
+       adjustmentType = Prelude.Nothing, coolDown = Prelude.Nothing}
+instance ToResourceProperties SimpleScalingPolicyConfigurationProperty where
+  toResourceProperties SimpleScalingPolicyConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.SimpleScalingPolicyConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ScalingAdjustment" JSON..= scalingAdjustment]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AdjustmentType" Prelude.<$> adjustmentType,
+                               (JSON..=) "CoolDown" Prelude.<$> coolDown]))}
+instance JSON.ToJSON SimpleScalingPolicyConfigurationProperty where
+  toJSON SimpleScalingPolicyConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ScalingAdjustment" JSON..= scalingAdjustment]
+              (Prelude.catMaybes
+                 [(JSON..=) "AdjustmentType" Prelude.<$> adjustmentType,
+                  (JSON..=) "CoolDown" Prelude.<$> coolDown])))
+instance Property "AdjustmentType" SimpleScalingPolicyConfigurationProperty where
+  type PropertyType "AdjustmentType" SimpleScalingPolicyConfigurationProperty = Value Prelude.Text
+  set newValue SimpleScalingPolicyConfigurationProperty {..}
+    = SimpleScalingPolicyConfigurationProperty
+        {adjustmentType = Prelude.pure newValue, ..}
+instance Property "CoolDown" SimpleScalingPolicyConfigurationProperty where
+  type PropertyType "CoolDown" SimpleScalingPolicyConfigurationProperty = Value Prelude.Integer
+  set newValue SimpleScalingPolicyConfigurationProperty {..}
+    = SimpleScalingPolicyConfigurationProperty
+        {coolDown = Prelude.pure newValue, ..}
+instance Property "ScalingAdjustment" SimpleScalingPolicyConfigurationProperty where
+  type PropertyType "ScalingAdjustment" SimpleScalingPolicyConfigurationProperty = Value Prelude.Integer
+  set newValue SimpleScalingPolicyConfigurationProperty {..}
+    = SimpleScalingPolicyConfigurationProperty
+        {scalingAdjustment = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/SimpleScalingPolicyConfigurationProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/SimpleScalingPolicyConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/SimpleScalingPolicyConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.SimpleScalingPolicyConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SimpleScalingPolicyConfigurationProperty :: Prelude.Type
+instance ToResourceProperties SimpleScalingPolicyConfigurationProperty
+instance Prelude.Eq SimpleScalingPolicyConfigurationProperty
+instance Prelude.Show SimpleScalingPolicyConfigurationProperty
+instance JSON.ToJSON SimpleScalingPolicyConfigurationProperty
diff --git a/gen/Stratosphere/EMR/Cluster/SpotProvisioningSpecificationProperty.hs b/gen/Stratosphere/EMR/Cluster/SpotProvisioningSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/SpotProvisioningSpecificationProperty.hs
@@ -0,0 +1,76 @@
+module Stratosphere.EMR.Cluster.SpotProvisioningSpecificationProperty (
+        SpotProvisioningSpecificationProperty(..),
+        mkSpotProvisioningSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SpotProvisioningSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-spotprovisioningspecification.html>
+    SpotProvisioningSpecificationProperty {haddock_workaround_ :: (),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-spotprovisioningspecification.html#cfn-elasticmapreduce-cluster-spotprovisioningspecification-allocationstrategy>
+                                           allocationStrategy :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-spotprovisioningspecification.html#cfn-elasticmapreduce-cluster-spotprovisioningspecification-blockdurationminutes>
+                                           blockDurationMinutes :: (Prelude.Maybe (Value Prelude.Integer)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-spotprovisioningspecification.html#cfn-elasticmapreduce-cluster-spotprovisioningspecification-timeoutaction>
+                                           timeoutAction :: (Value Prelude.Text),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-spotprovisioningspecification.html#cfn-elasticmapreduce-cluster-spotprovisioningspecification-timeoutdurationminutes>
+                                           timeoutDurationMinutes :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSpotProvisioningSpecificationProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Integer -> SpotProvisioningSpecificationProperty
+mkSpotProvisioningSpecificationProperty
+  timeoutAction
+  timeoutDurationMinutes
+  = SpotProvisioningSpecificationProperty
+      {haddock_workaround_ = (), timeoutAction = timeoutAction,
+       timeoutDurationMinutes = timeoutDurationMinutes,
+       allocationStrategy = Prelude.Nothing,
+       blockDurationMinutes = Prelude.Nothing}
+instance ToResourceProperties SpotProvisioningSpecificationProperty where
+  toResourceProperties SpotProvisioningSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.SpotProvisioningSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["TimeoutAction" JSON..= timeoutAction,
+                            "TimeoutDurationMinutes" JSON..= timeoutDurationMinutes]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+                               (JSON..=) "BlockDurationMinutes"
+                                 Prelude.<$> blockDurationMinutes]))}
+instance JSON.ToJSON SpotProvisioningSpecificationProperty where
+  toJSON SpotProvisioningSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["TimeoutAction" JSON..= timeoutAction,
+               "TimeoutDurationMinutes" JSON..= timeoutDurationMinutes]
+              (Prelude.catMaybes
+                 [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+                  (JSON..=) "BlockDurationMinutes"
+                    Prelude.<$> blockDurationMinutes])))
+instance Property "AllocationStrategy" SpotProvisioningSpecificationProperty where
+  type PropertyType "AllocationStrategy" SpotProvisioningSpecificationProperty = Value Prelude.Text
+  set newValue SpotProvisioningSpecificationProperty {..}
+    = SpotProvisioningSpecificationProperty
+        {allocationStrategy = Prelude.pure newValue, ..}
+instance Property "BlockDurationMinutes" SpotProvisioningSpecificationProperty where
+  type PropertyType "BlockDurationMinutes" SpotProvisioningSpecificationProperty = Value Prelude.Integer
+  set newValue SpotProvisioningSpecificationProperty {..}
+    = SpotProvisioningSpecificationProperty
+        {blockDurationMinutes = Prelude.pure newValue, ..}
+instance Property "TimeoutAction" SpotProvisioningSpecificationProperty where
+  type PropertyType "TimeoutAction" SpotProvisioningSpecificationProperty = Value Prelude.Text
+  set newValue SpotProvisioningSpecificationProperty {..}
+    = SpotProvisioningSpecificationProperty
+        {timeoutAction = newValue, ..}
+instance Property "TimeoutDurationMinutes" SpotProvisioningSpecificationProperty where
+  type PropertyType "TimeoutDurationMinutes" SpotProvisioningSpecificationProperty = Value Prelude.Integer
+  set newValue SpotProvisioningSpecificationProperty {..}
+    = SpotProvisioningSpecificationProperty
+        {timeoutDurationMinutes = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/SpotProvisioningSpecificationProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/SpotProvisioningSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/SpotProvisioningSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.SpotProvisioningSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SpotProvisioningSpecificationProperty :: Prelude.Type
+instance ToResourceProperties SpotProvisioningSpecificationProperty
+instance Prelude.Eq SpotProvisioningSpecificationProperty
+instance Prelude.Show SpotProvisioningSpecificationProperty
+instance JSON.ToJSON SpotProvisioningSpecificationProperty
diff --git a/gen/Stratosphere/EMR/Cluster/SpotResizingSpecificationProperty.hs b/gen/Stratosphere/EMR/Cluster/SpotResizingSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/SpotResizingSpecificationProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.EMR.Cluster.SpotResizingSpecificationProperty (
+        SpotResizingSpecificationProperty(..),
+        mkSpotResizingSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SpotResizingSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-spotresizingspecification.html>
+    SpotResizingSpecificationProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-spotresizingspecification.html#cfn-elasticmapreduce-cluster-spotresizingspecification-allocationstrategy>
+                                       allocationStrategy :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-spotresizingspecification.html#cfn-elasticmapreduce-cluster-spotresizingspecification-timeoutdurationminutes>
+                                       timeoutDurationMinutes :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSpotResizingSpecificationProperty ::
+  SpotResizingSpecificationProperty
+mkSpotResizingSpecificationProperty
+  = SpotResizingSpecificationProperty
+      {haddock_workaround_ = (), allocationStrategy = Prelude.Nothing,
+       timeoutDurationMinutes = Prelude.Nothing}
+instance ToResourceProperties SpotResizingSpecificationProperty where
+  toResourceProperties SpotResizingSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.SpotResizingSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+                            (JSON..=) "TimeoutDurationMinutes"
+                              Prelude.<$> timeoutDurationMinutes])}
+instance JSON.ToJSON SpotResizingSpecificationProperty where
+  toJSON SpotResizingSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+               (JSON..=) "TimeoutDurationMinutes"
+                 Prelude.<$> timeoutDurationMinutes]))
+instance Property "AllocationStrategy" SpotResizingSpecificationProperty where
+  type PropertyType "AllocationStrategy" SpotResizingSpecificationProperty = Value Prelude.Text
+  set newValue SpotResizingSpecificationProperty {..}
+    = SpotResizingSpecificationProperty
+        {allocationStrategy = Prelude.pure newValue, ..}
+instance Property "TimeoutDurationMinutes" SpotResizingSpecificationProperty where
+  type PropertyType "TimeoutDurationMinutes" SpotResizingSpecificationProperty = Value Prelude.Integer
+  set newValue SpotResizingSpecificationProperty {..}
+    = SpotResizingSpecificationProperty
+        {timeoutDurationMinutes = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/SpotResizingSpecificationProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/SpotResizingSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/SpotResizingSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.SpotResizingSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SpotResizingSpecificationProperty :: Prelude.Type
+instance ToResourceProperties SpotResizingSpecificationProperty
+instance Prelude.Eq SpotResizingSpecificationProperty
+instance Prelude.Show SpotResizingSpecificationProperty
+instance JSON.ToJSON SpotResizingSpecificationProperty
diff --git a/gen/Stratosphere/EMR/Cluster/StepConfigProperty.hs b/gen/Stratosphere/EMR/Cluster/StepConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/StepConfigProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.EMR.Cluster.StepConfigProperty (
+        module Exports, StepConfigProperty(..), mkStepConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Cluster.HadoopJarStepConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data StepConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-stepconfig.html>
+    StepConfigProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-stepconfig.html#cfn-elasticmapreduce-cluster-stepconfig-actiononfailure>
+                        actionOnFailure :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-stepconfig.html#cfn-elasticmapreduce-cluster-stepconfig-hadoopjarstep>
+                        hadoopJarStep :: HadoopJarStepConfigProperty,
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-stepconfig.html#cfn-elasticmapreduce-cluster-stepconfig-name>
+                        name :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStepConfigProperty ::
+  HadoopJarStepConfigProperty
+  -> Value Prelude.Text -> StepConfigProperty
+mkStepConfigProperty hadoopJarStep name
+  = StepConfigProperty
+      {haddock_workaround_ = (), hadoopJarStep = hadoopJarStep,
+       name = name, actionOnFailure = Prelude.Nothing}
+instance ToResourceProperties StepConfigProperty where
+  toResourceProperties StepConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.StepConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["HadoopJarStep" JSON..= hadoopJarStep, "Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ActionOnFailure" Prelude.<$> actionOnFailure]))}
+instance JSON.ToJSON StepConfigProperty where
+  toJSON StepConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["HadoopJarStep" JSON..= hadoopJarStep, "Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "ActionOnFailure" Prelude.<$> actionOnFailure])))
+instance Property "ActionOnFailure" StepConfigProperty where
+  type PropertyType "ActionOnFailure" StepConfigProperty = Value Prelude.Text
+  set newValue StepConfigProperty {..}
+    = StepConfigProperty {actionOnFailure = Prelude.pure newValue, ..}
+instance Property "HadoopJarStep" StepConfigProperty where
+  type PropertyType "HadoopJarStep" StepConfigProperty = HadoopJarStepConfigProperty
+  set newValue StepConfigProperty {..}
+    = StepConfigProperty {hadoopJarStep = newValue, ..}
+instance Property "Name" StepConfigProperty where
+  type PropertyType "Name" StepConfigProperty = Value Prelude.Text
+  set newValue StepConfigProperty {..}
+    = StepConfigProperty {name = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/StepConfigProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/StepConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/StepConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.StepConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data StepConfigProperty :: Prelude.Type
+instance ToResourceProperties StepConfigProperty
+instance Prelude.Eq StepConfigProperty
+instance Prelude.Show StepConfigProperty
+instance JSON.ToJSON StepConfigProperty
diff --git a/gen/Stratosphere/EMR/Cluster/VolumeSpecificationProperty.hs b/gen/Stratosphere/EMR/Cluster/VolumeSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/VolumeSpecificationProperty.hs
@@ -0,0 +1,65 @@
+module Stratosphere.EMR.Cluster.VolumeSpecificationProperty (
+        VolumeSpecificationProperty(..), mkVolumeSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VolumeSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-volumespecification.html>
+    VolumeSpecificationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-volumespecification.html#cfn-elasticmapreduce-cluster-volumespecification-iops>
+                                 iops :: (Prelude.Maybe (Value Prelude.Integer)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-volumespecification.html#cfn-elasticmapreduce-cluster-volumespecification-sizeingb>
+                                 sizeInGB :: (Value Prelude.Integer),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-volumespecification.html#cfn-elasticmapreduce-cluster-volumespecification-throughput>
+                                 throughput :: (Prelude.Maybe (Value Prelude.Integer)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-volumespecification.html#cfn-elasticmapreduce-cluster-volumespecification-volumetype>
+                                 volumeType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVolumeSpecificationProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Text -> VolumeSpecificationProperty
+mkVolumeSpecificationProperty sizeInGB volumeType
+  = VolumeSpecificationProperty
+      {haddock_workaround_ = (), sizeInGB = sizeInGB,
+       volumeType = volumeType, iops = Prelude.Nothing,
+       throughput = Prelude.Nothing}
+instance ToResourceProperties VolumeSpecificationProperty where
+  toResourceProperties VolumeSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Cluster.VolumeSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SizeInGB" JSON..= sizeInGB, "VolumeType" JSON..= volumeType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Iops" Prelude.<$> iops,
+                               (JSON..=) "Throughput" Prelude.<$> throughput]))}
+instance JSON.ToJSON VolumeSpecificationProperty where
+  toJSON VolumeSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SizeInGB" JSON..= sizeInGB, "VolumeType" JSON..= volumeType]
+              (Prelude.catMaybes
+                 [(JSON..=) "Iops" Prelude.<$> iops,
+                  (JSON..=) "Throughput" Prelude.<$> throughput])))
+instance Property "Iops" VolumeSpecificationProperty where
+  type PropertyType "Iops" VolumeSpecificationProperty = Value Prelude.Integer
+  set newValue VolumeSpecificationProperty {..}
+    = VolumeSpecificationProperty {iops = Prelude.pure newValue, ..}
+instance Property "SizeInGB" VolumeSpecificationProperty where
+  type PropertyType "SizeInGB" VolumeSpecificationProperty = Value Prelude.Integer
+  set newValue VolumeSpecificationProperty {..}
+    = VolumeSpecificationProperty {sizeInGB = newValue, ..}
+instance Property "Throughput" VolumeSpecificationProperty where
+  type PropertyType "Throughput" VolumeSpecificationProperty = Value Prelude.Integer
+  set newValue VolumeSpecificationProperty {..}
+    = VolumeSpecificationProperty
+        {throughput = Prelude.pure newValue, ..}
+instance Property "VolumeType" VolumeSpecificationProperty where
+  type PropertyType "VolumeType" VolumeSpecificationProperty = Value Prelude.Text
+  set newValue VolumeSpecificationProperty {..}
+    = VolumeSpecificationProperty {volumeType = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Cluster/VolumeSpecificationProperty.hs-boot b/gen/Stratosphere/EMR/Cluster/VolumeSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Cluster/VolumeSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Cluster.VolumeSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VolumeSpecificationProperty :: Prelude.Type
+instance ToResourceProperties VolumeSpecificationProperty
+instance Prelude.Eq VolumeSpecificationProperty
+instance Prelude.Show VolumeSpecificationProperty
+instance JSON.ToJSON VolumeSpecificationProperty
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig.hs b/gen/Stratosphere/EMR/InstanceFleetConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig.hs
@@ -0,0 +1,111 @@
+module Stratosphere.EMR.InstanceFleetConfig (
+        module Exports, InstanceFleetConfig(..), mkInstanceFleetConfig
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.InstanceFleetConfig.InstanceFleetProvisioningSpecificationsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.InstanceFleetConfig.InstanceFleetResizingSpecificationsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.InstanceFleetConfig.InstanceTypeConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceFleetConfig
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html>
+    InstanceFleetConfig {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html#cfn-elasticmapreduce-instancefleetconfig-clusterid>
+                         clusterId :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancefleettype>
+                         instanceFleetType :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancetypeconfigs>
+                         instanceTypeConfigs :: (Prelude.Maybe [InstanceTypeConfigProperty]),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html#cfn-elasticmapreduce-instancefleetconfig-launchspecifications>
+                         launchSpecifications :: (Prelude.Maybe InstanceFleetProvisioningSpecificationsProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html#cfn-elasticmapreduce-instancefleetconfig-name>
+                         name :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html#cfn-elasticmapreduce-instancefleetconfig-resizespecifications>
+                         resizeSpecifications :: (Prelude.Maybe InstanceFleetResizingSpecificationsProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html#cfn-elasticmapreduce-instancefleetconfig-targetondemandcapacity>
+                         targetOnDemandCapacity :: (Prelude.Maybe (Value Prelude.Integer)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html#cfn-elasticmapreduce-instancefleetconfig-targetspotcapacity>
+                         targetSpotCapacity :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceFleetConfig ::
+  Value Prelude.Text -> Value Prelude.Text -> InstanceFleetConfig
+mkInstanceFleetConfig clusterId instanceFleetType
+  = InstanceFleetConfig
+      {haddock_workaround_ = (), clusterId = clusterId,
+       instanceFleetType = instanceFleetType,
+       instanceTypeConfigs = Prelude.Nothing,
+       launchSpecifications = Prelude.Nothing, name = Prelude.Nothing,
+       resizeSpecifications = Prelude.Nothing,
+       targetOnDemandCapacity = Prelude.Nothing,
+       targetSpotCapacity = Prelude.Nothing}
+instance ToResourceProperties InstanceFleetConfig where
+  toResourceProperties InstanceFleetConfig {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceFleetConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ClusterId" JSON..= clusterId,
+                            "InstanceFleetType" JSON..= instanceFleetType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "InstanceTypeConfigs" Prelude.<$> instanceTypeConfigs,
+                               (JSON..=) "LaunchSpecifications" Prelude.<$> launchSpecifications,
+                               (JSON..=) "Name" Prelude.<$> name,
+                               (JSON..=) "ResizeSpecifications" Prelude.<$> resizeSpecifications,
+                               (JSON..=) "TargetOnDemandCapacity"
+                                 Prelude.<$> targetOnDemandCapacity,
+                               (JSON..=) "TargetSpotCapacity" Prelude.<$> targetSpotCapacity]))}
+instance JSON.ToJSON InstanceFleetConfig where
+  toJSON InstanceFleetConfig {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ClusterId" JSON..= clusterId,
+               "InstanceFleetType" JSON..= instanceFleetType]
+              (Prelude.catMaybes
+                 [(JSON..=) "InstanceTypeConfigs" Prelude.<$> instanceTypeConfigs,
+                  (JSON..=) "LaunchSpecifications" Prelude.<$> launchSpecifications,
+                  (JSON..=) "Name" Prelude.<$> name,
+                  (JSON..=) "ResizeSpecifications" Prelude.<$> resizeSpecifications,
+                  (JSON..=) "TargetOnDemandCapacity"
+                    Prelude.<$> targetOnDemandCapacity,
+                  (JSON..=) "TargetSpotCapacity" Prelude.<$> targetSpotCapacity])))
+instance Property "ClusterId" InstanceFleetConfig where
+  type PropertyType "ClusterId" InstanceFleetConfig = Value Prelude.Text
+  set newValue InstanceFleetConfig {..}
+    = InstanceFleetConfig {clusterId = newValue, ..}
+instance Property "InstanceFleetType" InstanceFleetConfig where
+  type PropertyType "InstanceFleetType" InstanceFleetConfig = Value Prelude.Text
+  set newValue InstanceFleetConfig {..}
+    = InstanceFleetConfig {instanceFleetType = newValue, ..}
+instance Property "InstanceTypeConfigs" InstanceFleetConfig where
+  type PropertyType "InstanceTypeConfigs" InstanceFleetConfig = [InstanceTypeConfigProperty]
+  set newValue InstanceFleetConfig {..}
+    = InstanceFleetConfig
+        {instanceTypeConfigs = Prelude.pure newValue, ..}
+instance Property "LaunchSpecifications" InstanceFleetConfig where
+  type PropertyType "LaunchSpecifications" InstanceFleetConfig = InstanceFleetProvisioningSpecificationsProperty
+  set newValue InstanceFleetConfig {..}
+    = InstanceFleetConfig
+        {launchSpecifications = Prelude.pure newValue, ..}
+instance Property "Name" InstanceFleetConfig where
+  type PropertyType "Name" InstanceFleetConfig = Value Prelude.Text
+  set newValue InstanceFleetConfig {..}
+    = InstanceFleetConfig {name = Prelude.pure newValue, ..}
+instance Property "ResizeSpecifications" InstanceFleetConfig where
+  type PropertyType "ResizeSpecifications" InstanceFleetConfig = InstanceFleetResizingSpecificationsProperty
+  set newValue InstanceFleetConfig {..}
+    = InstanceFleetConfig
+        {resizeSpecifications = Prelude.pure newValue, ..}
+instance Property "TargetOnDemandCapacity" InstanceFleetConfig where
+  type PropertyType "TargetOnDemandCapacity" InstanceFleetConfig = Value Prelude.Integer
+  set newValue InstanceFleetConfig {..}
+    = InstanceFleetConfig
+        {targetOnDemandCapacity = Prelude.pure newValue, ..}
+instance Property "TargetSpotCapacity" InstanceFleetConfig where
+  type PropertyType "TargetSpotCapacity" InstanceFleetConfig = Value Prelude.Integer
+  set newValue InstanceFleetConfig {..}
+    = InstanceFleetConfig
+        {targetSpotCapacity = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/ConfigurationProperty.hs b/gen/Stratosphere/EMR/InstanceFleetConfig/ConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/ConfigurationProperty.hs
@@ -0,0 +1,59 @@
+module Stratosphere.EMR.InstanceFleetConfig.ConfigurationProperty (
+        ConfigurationProperty(..), mkConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-configuration.html>
+    ConfigurationProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-configuration.html#cfn-elasticmapreduce-instancefleetconfig-configuration-classification>
+                           classification :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-configuration.html#cfn-elasticmapreduce-instancefleetconfig-configuration-configurationproperties>
+                           configurationProperties :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-configuration.html#cfn-elasticmapreduce-instancefleetconfig-configuration-configurations>
+                           configurations :: (Prelude.Maybe [ConfigurationProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConfigurationProperty :: ConfigurationProperty
+mkConfigurationProperty
+  = ConfigurationProperty
+      {haddock_workaround_ = (), classification = Prelude.Nothing,
+       configurationProperties = Prelude.Nothing,
+       configurations = Prelude.Nothing}
+instance ToResourceProperties ConfigurationProperty where
+  toResourceProperties ConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceFleetConfig.Configuration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Classification" Prelude.<$> classification,
+                            (JSON..=) "ConfigurationProperties"
+                              Prelude.<$> configurationProperties,
+                            (JSON..=) "Configurations" Prelude.<$> configurations])}
+instance JSON.ToJSON ConfigurationProperty where
+  toJSON ConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Classification" Prelude.<$> classification,
+               (JSON..=) "ConfigurationProperties"
+                 Prelude.<$> configurationProperties,
+               (JSON..=) "Configurations" Prelude.<$> configurations]))
+instance Property "Classification" ConfigurationProperty where
+  type PropertyType "Classification" ConfigurationProperty = Value Prelude.Text
+  set newValue ConfigurationProperty {..}
+    = ConfigurationProperty
+        {classification = Prelude.pure newValue, ..}
+instance Property "ConfigurationProperties" ConfigurationProperty where
+  type PropertyType "ConfigurationProperties" ConfigurationProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue ConfigurationProperty {..}
+    = ConfigurationProperty
+        {configurationProperties = Prelude.pure newValue, ..}
+instance Property "Configurations" ConfigurationProperty where
+  type PropertyType "Configurations" ConfigurationProperty = [ConfigurationProperty]
+  set newValue ConfigurationProperty {..}
+    = ConfigurationProperty
+        {configurations = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/ConfigurationProperty.hs-boot b/gen/Stratosphere/EMR/InstanceFleetConfig/ConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/ConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceFleetConfig.ConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ConfigurationProperty
+instance Prelude.Eq ConfigurationProperty
+instance Prelude.Show ConfigurationProperty
+instance JSON.ToJSON ConfigurationProperty
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/EbsBlockDeviceConfigProperty.hs b/gen/Stratosphere/EMR/InstanceFleetConfig/EbsBlockDeviceConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/EbsBlockDeviceConfigProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.EMR.InstanceFleetConfig.EbsBlockDeviceConfigProperty (
+        module Exports, EbsBlockDeviceConfigProperty(..),
+        mkEbsBlockDeviceConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.InstanceFleetConfig.VolumeSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EbsBlockDeviceConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ebsblockdeviceconfig.html>
+    EbsBlockDeviceConfigProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ebsblockdeviceconfig.html#cfn-elasticmapreduce-instancefleetconfig-ebsblockdeviceconfig-volumespecification>
+                                  volumeSpecification :: VolumeSpecificationProperty,
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ebsblockdeviceconfig.html#cfn-elasticmapreduce-instancefleetconfig-ebsblockdeviceconfig-volumesperinstance>
+                                  volumesPerInstance :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEbsBlockDeviceConfigProperty ::
+  VolumeSpecificationProperty -> EbsBlockDeviceConfigProperty
+mkEbsBlockDeviceConfigProperty volumeSpecification
+  = EbsBlockDeviceConfigProperty
+      {haddock_workaround_ = (),
+       volumeSpecification = volumeSpecification,
+       volumesPerInstance = Prelude.Nothing}
+instance ToResourceProperties EbsBlockDeviceConfigProperty where
+  toResourceProperties EbsBlockDeviceConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceFleetConfig.EbsBlockDeviceConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["VolumeSpecification" JSON..= volumeSpecification]
+                           (Prelude.catMaybes
+                              [(JSON..=) "VolumesPerInstance" Prelude.<$> volumesPerInstance]))}
+instance JSON.ToJSON EbsBlockDeviceConfigProperty where
+  toJSON EbsBlockDeviceConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["VolumeSpecification" JSON..= volumeSpecification]
+              (Prelude.catMaybes
+                 [(JSON..=) "VolumesPerInstance" Prelude.<$> volumesPerInstance])))
+instance Property "VolumeSpecification" EbsBlockDeviceConfigProperty where
+  type PropertyType "VolumeSpecification" EbsBlockDeviceConfigProperty = VolumeSpecificationProperty
+  set newValue EbsBlockDeviceConfigProperty {..}
+    = EbsBlockDeviceConfigProperty {volumeSpecification = newValue, ..}
+instance Property "VolumesPerInstance" EbsBlockDeviceConfigProperty where
+  type PropertyType "VolumesPerInstance" EbsBlockDeviceConfigProperty = Value Prelude.Integer
+  set newValue EbsBlockDeviceConfigProperty {..}
+    = EbsBlockDeviceConfigProperty
+        {volumesPerInstance = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/EbsBlockDeviceConfigProperty.hs-boot b/gen/Stratosphere/EMR/InstanceFleetConfig/EbsBlockDeviceConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/EbsBlockDeviceConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceFleetConfig.EbsBlockDeviceConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EbsBlockDeviceConfigProperty :: Prelude.Type
+instance ToResourceProperties EbsBlockDeviceConfigProperty
+instance Prelude.Eq EbsBlockDeviceConfigProperty
+instance Prelude.Show EbsBlockDeviceConfigProperty
+instance JSON.ToJSON EbsBlockDeviceConfigProperty
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/EbsConfigurationProperty.hs b/gen/Stratosphere/EMR/InstanceFleetConfig/EbsConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/EbsConfigurationProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.EMR.InstanceFleetConfig.EbsConfigurationProperty (
+        module Exports, EbsConfigurationProperty(..),
+        mkEbsConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.InstanceFleetConfig.EbsBlockDeviceConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EbsConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ebsconfiguration.html>
+    EbsConfigurationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ebsconfiguration.html#cfn-elasticmapreduce-instancefleetconfig-ebsconfiguration-ebsblockdeviceconfigs>
+                              ebsBlockDeviceConfigs :: (Prelude.Maybe [EbsBlockDeviceConfigProperty]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ebsconfiguration.html#cfn-elasticmapreduce-instancefleetconfig-ebsconfiguration-ebsoptimized>
+                              ebsOptimized :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEbsConfigurationProperty :: EbsConfigurationProperty
+mkEbsConfigurationProperty
+  = EbsConfigurationProperty
+      {haddock_workaround_ = (), ebsBlockDeviceConfigs = Prelude.Nothing,
+       ebsOptimized = Prelude.Nothing}
+instance ToResourceProperties EbsConfigurationProperty where
+  toResourceProperties EbsConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceFleetConfig.EbsConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EbsBlockDeviceConfigs"
+                              Prelude.<$> ebsBlockDeviceConfigs,
+                            (JSON..=) "EbsOptimized" Prelude.<$> ebsOptimized])}
+instance JSON.ToJSON EbsConfigurationProperty where
+  toJSON EbsConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EbsBlockDeviceConfigs"
+                 Prelude.<$> ebsBlockDeviceConfigs,
+               (JSON..=) "EbsOptimized" Prelude.<$> ebsOptimized]))
+instance Property "EbsBlockDeviceConfigs" EbsConfigurationProperty where
+  type PropertyType "EbsBlockDeviceConfigs" EbsConfigurationProperty = [EbsBlockDeviceConfigProperty]
+  set newValue EbsConfigurationProperty {..}
+    = EbsConfigurationProperty
+        {ebsBlockDeviceConfigs = Prelude.pure newValue, ..}
+instance Property "EbsOptimized" EbsConfigurationProperty where
+  type PropertyType "EbsOptimized" EbsConfigurationProperty = Value Prelude.Bool
+  set newValue EbsConfigurationProperty {..}
+    = EbsConfigurationProperty
+        {ebsOptimized = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/EbsConfigurationProperty.hs-boot b/gen/Stratosphere/EMR/InstanceFleetConfig/EbsConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/EbsConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceFleetConfig.EbsConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EbsConfigurationProperty :: Prelude.Type
+instance ToResourceProperties EbsConfigurationProperty
+instance Prelude.Eq EbsConfigurationProperty
+instance Prelude.Show EbsConfigurationProperty
+instance JSON.ToJSON EbsConfigurationProperty
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceFleetProvisioningSpecificationsProperty.hs b/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceFleetProvisioningSpecificationsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceFleetProvisioningSpecificationsProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.EMR.InstanceFleetConfig.InstanceFleetProvisioningSpecificationsProperty (
+        module Exports,
+        InstanceFleetProvisioningSpecificationsProperty(..),
+        mkInstanceFleetProvisioningSpecificationsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.InstanceFleetConfig.OnDemandProvisioningSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.InstanceFleetConfig.SpotProvisioningSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+data InstanceFleetProvisioningSpecificationsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancefleetprovisioningspecifications.html>
+    InstanceFleetProvisioningSpecificationsProperty {haddock_workaround_ :: (),
+                                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancefleetprovisioningspecifications.html#cfn-elasticmapreduce-instancefleetconfig-instancefleetprovisioningspecifications-ondemandspecification>
+                                                     onDemandSpecification :: (Prelude.Maybe OnDemandProvisioningSpecificationProperty),
+                                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancefleetprovisioningspecifications.html#cfn-elasticmapreduce-instancefleetconfig-instancefleetprovisioningspecifications-spotspecification>
+                                                     spotSpecification :: (Prelude.Maybe SpotProvisioningSpecificationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceFleetProvisioningSpecificationsProperty ::
+  InstanceFleetProvisioningSpecificationsProperty
+mkInstanceFleetProvisioningSpecificationsProperty
+  = InstanceFleetProvisioningSpecificationsProperty
+      {haddock_workaround_ = (), onDemandSpecification = Prelude.Nothing,
+       spotSpecification = Prelude.Nothing}
+instance ToResourceProperties InstanceFleetProvisioningSpecificationsProperty where
+  toResourceProperties
+    InstanceFleetProvisioningSpecificationsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceFleetConfig.InstanceFleetProvisioningSpecifications",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "OnDemandSpecification"
+                              Prelude.<$> onDemandSpecification,
+                            (JSON..=) "SpotSpecification" Prelude.<$> spotSpecification])}
+instance JSON.ToJSON InstanceFleetProvisioningSpecificationsProperty where
+  toJSON InstanceFleetProvisioningSpecificationsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "OnDemandSpecification"
+                 Prelude.<$> onDemandSpecification,
+               (JSON..=) "SpotSpecification" Prelude.<$> spotSpecification]))
+instance Property "OnDemandSpecification" InstanceFleetProvisioningSpecificationsProperty where
+  type PropertyType "OnDemandSpecification" InstanceFleetProvisioningSpecificationsProperty = OnDemandProvisioningSpecificationProperty
+  set newValue InstanceFleetProvisioningSpecificationsProperty {..}
+    = InstanceFleetProvisioningSpecificationsProperty
+        {onDemandSpecification = Prelude.pure newValue, ..}
+instance Property "SpotSpecification" InstanceFleetProvisioningSpecificationsProperty where
+  type PropertyType "SpotSpecification" InstanceFleetProvisioningSpecificationsProperty = SpotProvisioningSpecificationProperty
+  set newValue InstanceFleetProvisioningSpecificationsProperty {..}
+    = InstanceFleetProvisioningSpecificationsProperty
+        {spotSpecification = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceFleetProvisioningSpecificationsProperty.hs-boot b/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceFleetProvisioningSpecificationsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceFleetProvisioningSpecificationsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceFleetConfig.InstanceFleetProvisioningSpecificationsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceFleetProvisioningSpecificationsProperty :: Prelude.Type
+instance ToResourceProperties InstanceFleetProvisioningSpecificationsProperty
+instance Prelude.Eq InstanceFleetProvisioningSpecificationsProperty
+instance Prelude.Show InstanceFleetProvisioningSpecificationsProperty
+instance JSON.ToJSON InstanceFleetProvisioningSpecificationsProperty
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceFleetResizingSpecificationsProperty.hs b/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceFleetResizingSpecificationsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceFleetResizingSpecificationsProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.EMR.InstanceFleetConfig.InstanceFleetResizingSpecificationsProperty (
+        module Exports, InstanceFleetResizingSpecificationsProperty(..),
+        mkInstanceFleetResizingSpecificationsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.InstanceFleetConfig.OnDemandResizingSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.InstanceFleetConfig.SpotResizingSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+data InstanceFleetResizingSpecificationsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancefleetresizingspecifications.html>
+    InstanceFleetResizingSpecificationsProperty {haddock_workaround_ :: (),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancefleetresizingspecifications.html#cfn-elasticmapreduce-instancefleetconfig-instancefleetresizingspecifications-ondemandresizespecification>
+                                                 onDemandResizeSpecification :: (Prelude.Maybe OnDemandResizingSpecificationProperty),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancefleetresizingspecifications.html#cfn-elasticmapreduce-instancefleetconfig-instancefleetresizingspecifications-spotresizespecification>
+                                                 spotResizeSpecification :: (Prelude.Maybe SpotResizingSpecificationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceFleetResizingSpecificationsProperty ::
+  InstanceFleetResizingSpecificationsProperty
+mkInstanceFleetResizingSpecificationsProperty
+  = InstanceFleetResizingSpecificationsProperty
+      {haddock_workaround_ = (),
+       onDemandResizeSpecification = Prelude.Nothing,
+       spotResizeSpecification = Prelude.Nothing}
+instance ToResourceProperties InstanceFleetResizingSpecificationsProperty where
+  toResourceProperties
+    InstanceFleetResizingSpecificationsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceFleetConfig.InstanceFleetResizingSpecifications",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "OnDemandResizeSpecification"
+                              Prelude.<$> onDemandResizeSpecification,
+                            (JSON..=) "SpotResizeSpecification"
+                              Prelude.<$> spotResizeSpecification])}
+instance JSON.ToJSON InstanceFleetResizingSpecificationsProperty where
+  toJSON InstanceFleetResizingSpecificationsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "OnDemandResizeSpecification"
+                 Prelude.<$> onDemandResizeSpecification,
+               (JSON..=) "SpotResizeSpecification"
+                 Prelude.<$> spotResizeSpecification]))
+instance Property "OnDemandResizeSpecification" InstanceFleetResizingSpecificationsProperty where
+  type PropertyType "OnDemandResizeSpecification" InstanceFleetResizingSpecificationsProperty = OnDemandResizingSpecificationProperty
+  set newValue InstanceFleetResizingSpecificationsProperty {..}
+    = InstanceFleetResizingSpecificationsProperty
+        {onDemandResizeSpecification = Prelude.pure newValue, ..}
+instance Property "SpotResizeSpecification" InstanceFleetResizingSpecificationsProperty where
+  type PropertyType "SpotResizeSpecification" InstanceFleetResizingSpecificationsProperty = SpotResizingSpecificationProperty
+  set newValue InstanceFleetResizingSpecificationsProperty {..}
+    = InstanceFleetResizingSpecificationsProperty
+        {spotResizeSpecification = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceFleetResizingSpecificationsProperty.hs-boot b/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceFleetResizingSpecificationsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceFleetResizingSpecificationsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceFleetConfig.InstanceFleetResizingSpecificationsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceFleetResizingSpecificationsProperty :: Prelude.Type
+instance ToResourceProperties InstanceFleetResizingSpecificationsProperty
+instance Prelude.Eq InstanceFleetResizingSpecificationsProperty
+instance Prelude.Show InstanceFleetResizingSpecificationsProperty
+instance JSON.ToJSON InstanceFleetResizingSpecificationsProperty
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceTypeConfigProperty.hs b/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceTypeConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceTypeConfigProperty.hs
@@ -0,0 +1,110 @@
+module Stratosphere.EMR.InstanceFleetConfig.InstanceTypeConfigProperty (
+        module Exports, InstanceTypeConfigProperty(..),
+        mkInstanceTypeConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.InstanceFleetConfig.ConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.InstanceFleetConfig.EbsConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceTypeConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html>
+    InstanceTypeConfigProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancetypeconfig-bidprice>
+                                bidPrice :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancetypeconfig-bidpriceaspercentageofondemandprice>
+                                bidPriceAsPercentageOfOnDemandPrice :: (Prelude.Maybe (Value Prelude.Double)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancetypeconfig-configurations>
+                                configurations :: (Prelude.Maybe [ConfigurationProperty]),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancetypeconfig-customamiid>
+                                customAmiId :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancetypeconfig-ebsconfiguration>
+                                ebsConfiguration :: (Prelude.Maybe EbsConfigurationProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancetypeconfig-instancetype>
+                                instanceType :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancetypeconfig-priority>
+                                priority :: (Prelude.Maybe (Value Prelude.Double)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancetypeconfig-weightedcapacity>
+                                weightedCapacity :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceTypeConfigProperty ::
+  Value Prelude.Text -> InstanceTypeConfigProperty
+mkInstanceTypeConfigProperty instanceType
+  = InstanceTypeConfigProperty
+      {haddock_workaround_ = (), instanceType = instanceType,
+       bidPrice = Prelude.Nothing,
+       bidPriceAsPercentageOfOnDemandPrice = Prelude.Nothing,
+       configurations = Prelude.Nothing, customAmiId = Prelude.Nothing,
+       ebsConfiguration = Prelude.Nothing, priority = Prelude.Nothing,
+       weightedCapacity = Prelude.Nothing}
+instance ToResourceProperties InstanceTypeConfigProperty where
+  toResourceProperties InstanceTypeConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceFleetConfig.InstanceTypeConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["InstanceType" JSON..= instanceType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "BidPrice" Prelude.<$> bidPrice,
+                               (JSON..=) "BidPriceAsPercentageOfOnDemandPrice"
+                                 Prelude.<$> bidPriceAsPercentageOfOnDemandPrice,
+                               (JSON..=) "Configurations" Prelude.<$> configurations,
+                               (JSON..=) "CustomAmiId" Prelude.<$> customAmiId,
+                               (JSON..=) "EbsConfiguration" Prelude.<$> ebsConfiguration,
+                               (JSON..=) "Priority" Prelude.<$> priority,
+                               (JSON..=) "WeightedCapacity" Prelude.<$> weightedCapacity]))}
+instance JSON.ToJSON InstanceTypeConfigProperty where
+  toJSON InstanceTypeConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["InstanceType" JSON..= instanceType]
+              (Prelude.catMaybes
+                 [(JSON..=) "BidPrice" Prelude.<$> bidPrice,
+                  (JSON..=) "BidPriceAsPercentageOfOnDemandPrice"
+                    Prelude.<$> bidPriceAsPercentageOfOnDemandPrice,
+                  (JSON..=) "Configurations" Prelude.<$> configurations,
+                  (JSON..=) "CustomAmiId" Prelude.<$> customAmiId,
+                  (JSON..=) "EbsConfiguration" Prelude.<$> ebsConfiguration,
+                  (JSON..=) "Priority" Prelude.<$> priority,
+                  (JSON..=) "WeightedCapacity" Prelude.<$> weightedCapacity])))
+instance Property "BidPrice" InstanceTypeConfigProperty where
+  type PropertyType "BidPrice" InstanceTypeConfigProperty = Value Prelude.Text
+  set newValue InstanceTypeConfigProperty {..}
+    = InstanceTypeConfigProperty {bidPrice = Prelude.pure newValue, ..}
+instance Property "BidPriceAsPercentageOfOnDemandPrice" InstanceTypeConfigProperty where
+  type PropertyType "BidPriceAsPercentageOfOnDemandPrice" InstanceTypeConfigProperty = Value Prelude.Double
+  set newValue InstanceTypeConfigProperty {..}
+    = InstanceTypeConfigProperty
+        {bidPriceAsPercentageOfOnDemandPrice = Prelude.pure newValue, ..}
+instance Property "Configurations" InstanceTypeConfigProperty where
+  type PropertyType "Configurations" InstanceTypeConfigProperty = [ConfigurationProperty]
+  set newValue InstanceTypeConfigProperty {..}
+    = InstanceTypeConfigProperty
+        {configurations = Prelude.pure newValue, ..}
+instance Property "CustomAmiId" InstanceTypeConfigProperty where
+  type PropertyType "CustomAmiId" InstanceTypeConfigProperty = Value Prelude.Text
+  set newValue InstanceTypeConfigProperty {..}
+    = InstanceTypeConfigProperty
+        {customAmiId = Prelude.pure newValue, ..}
+instance Property "EbsConfiguration" InstanceTypeConfigProperty where
+  type PropertyType "EbsConfiguration" InstanceTypeConfigProperty = EbsConfigurationProperty
+  set newValue InstanceTypeConfigProperty {..}
+    = InstanceTypeConfigProperty
+        {ebsConfiguration = Prelude.pure newValue, ..}
+instance Property "InstanceType" InstanceTypeConfigProperty where
+  type PropertyType "InstanceType" InstanceTypeConfigProperty = Value Prelude.Text
+  set newValue InstanceTypeConfigProperty {..}
+    = InstanceTypeConfigProperty {instanceType = newValue, ..}
+instance Property "Priority" InstanceTypeConfigProperty where
+  type PropertyType "Priority" InstanceTypeConfigProperty = Value Prelude.Double
+  set newValue InstanceTypeConfigProperty {..}
+    = InstanceTypeConfigProperty {priority = Prelude.pure newValue, ..}
+instance Property "WeightedCapacity" InstanceTypeConfigProperty where
+  type PropertyType "WeightedCapacity" InstanceTypeConfigProperty = Value Prelude.Integer
+  set newValue InstanceTypeConfigProperty {..}
+    = InstanceTypeConfigProperty
+        {weightedCapacity = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceTypeConfigProperty.hs-boot b/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceTypeConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/InstanceTypeConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceFleetConfig.InstanceTypeConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceTypeConfigProperty :: Prelude.Type
+instance ToResourceProperties InstanceTypeConfigProperty
+instance Prelude.Eq InstanceTypeConfigProperty
+instance Prelude.Show InstanceTypeConfigProperty
+instance JSON.ToJSON InstanceTypeConfigProperty
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandCapacityReservationOptionsProperty.hs b/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandCapacityReservationOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandCapacityReservationOptionsProperty.hs
@@ -0,0 +1,65 @@
+module Stratosphere.EMR.InstanceFleetConfig.OnDemandCapacityReservationOptionsProperty (
+        OnDemandCapacityReservationOptionsProperty(..),
+        mkOnDemandCapacityReservationOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OnDemandCapacityReservationOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ondemandcapacityreservationoptions.html>
+    OnDemandCapacityReservationOptionsProperty {haddock_workaround_ :: (),
+                                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ondemandcapacityreservationoptions.html#cfn-elasticmapreduce-instancefleetconfig-ondemandcapacityreservationoptions-capacityreservationpreference>
+                                                capacityReservationPreference :: (Prelude.Maybe (Value Prelude.Text)),
+                                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ondemandcapacityreservationoptions.html#cfn-elasticmapreduce-instancefleetconfig-ondemandcapacityreservationoptions-capacityreservationresourcegrouparn>
+                                                capacityReservationResourceGroupArn :: (Prelude.Maybe (Value Prelude.Text)),
+                                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ondemandcapacityreservationoptions.html#cfn-elasticmapreduce-instancefleetconfig-ondemandcapacityreservationoptions-usagestrategy>
+                                                usageStrategy :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOnDemandCapacityReservationOptionsProperty ::
+  OnDemandCapacityReservationOptionsProperty
+mkOnDemandCapacityReservationOptionsProperty
+  = OnDemandCapacityReservationOptionsProperty
+      {haddock_workaround_ = (),
+       capacityReservationPreference = Prelude.Nothing,
+       capacityReservationResourceGroupArn = Prelude.Nothing,
+       usageStrategy = Prelude.Nothing}
+instance ToResourceProperties OnDemandCapacityReservationOptionsProperty where
+  toResourceProperties
+    OnDemandCapacityReservationOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceFleetConfig.OnDemandCapacityReservationOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CapacityReservationPreference"
+                              Prelude.<$> capacityReservationPreference,
+                            (JSON..=) "CapacityReservationResourceGroupArn"
+                              Prelude.<$> capacityReservationResourceGroupArn,
+                            (JSON..=) "UsageStrategy" Prelude.<$> usageStrategy])}
+instance JSON.ToJSON OnDemandCapacityReservationOptionsProperty where
+  toJSON OnDemandCapacityReservationOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CapacityReservationPreference"
+                 Prelude.<$> capacityReservationPreference,
+               (JSON..=) "CapacityReservationResourceGroupArn"
+                 Prelude.<$> capacityReservationResourceGroupArn,
+               (JSON..=) "UsageStrategy" Prelude.<$> usageStrategy]))
+instance Property "CapacityReservationPreference" OnDemandCapacityReservationOptionsProperty where
+  type PropertyType "CapacityReservationPreference" OnDemandCapacityReservationOptionsProperty = Value Prelude.Text
+  set newValue OnDemandCapacityReservationOptionsProperty {..}
+    = OnDemandCapacityReservationOptionsProperty
+        {capacityReservationPreference = Prelude.pure newValue, ..}
+instance Property "CapacityReservationResourceGroupArn" OnDemandCapacityReservationOptionsProperty where
+  type PropertyType "CapacityReservationResourceGroupArn" OnDemandCapacityReservationOptionsProperty = Value Prelude.Text
+  set newValue OnDemandCapacityReservationOptionsProperty {..}
+    = OnDemandCapacityReservationOptionsProperty
+        {capacityReservationResourceGroupArn = Prelude.pure newValue, ..}
+instance Property "UsageStrategy" OnDemandCapacityReservationOptionsProperty where
+  type PropertyType "UsageStrategy" OnDemandCapacityReservationOptionsProperty = Value Prelude.Text
+  set newValue OnDemandCapacityReservationOptionsProperty {..}
+    = OnDemandCapacityReservationOptionsProperty
+        {usageStrategy = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandCapacityReservationOptionsProperty.hs-boot b/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandCapacityReservationOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandCapacityReservationOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceFleetConfig.OnDemandCapacityReservationOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OnDemandCapacityReservationOptionsProperty :: Prelude.Type
+instance ToResourceProperties OnDemandCapacityReservationOptionsProperty
+instance Prelude.Eq OnDemandCapacityReservationOptionsProperty
+instance Prelude.Show OnDemandCapacityReservationOptionsProperty
+instance JSON.ToJSON OnDemandCapacityReservationOptionsProperty
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandProvisioningSpecificationProperty.hs b/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandProvisioningSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandProvisioningSpecificationProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.EMR.InstanceFleetConfig.OnDemandProvisioningSpecificationProperty (
+        module Exports, OnDemandProvisioningSpecificationProperty(..),
+        mkOnDemandProvisioningSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.InstanceFleetConfig.OnDemandCapacityReservationOptionsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OnDemandProvisioningSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ondemandprovisioningspecification.html>
+    OnDemandProvisioningSpecificationProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ondemandprovisioningspecification.html#cfn-elasticmapreduce-instancefleetconfig-ondemandprovisioningspecification-allocationstrategy>
+                                               allocationStrategy :: (Value Prelude.Text),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ondemandprovisioningspecification.html#cfn-elasticmapreduce-instancefleetconfig-ondemandprovisioningspecification-capacityreservationoptions>
+                                               capacityReservationOptions :: (Prelude.Maybe OnDemandCapacityReservationOptionsProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOnDemandProvisioningSpecificationProperty ::
+  Value Prelude.Text -> OnDemandProvisioningSpecificationProperty
+mkOnDemandProvisioningSpecificationProperty allocationStrategy
+  = OnDemandProvisioningSpecificationProperty
+      {haddock_workaround_ = (), allocationStrategy = allocationStrategy,
+       capacityReservationOptions = Prelude.Nothing}
+instance ToResourceProperties OnDemandProvisioningSpecificationProperty where
+  toResourceProperties OnDemandProvisioningSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceFleetConfig.OnDemandProvisioningSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AllocationStrategy" JSON..= allocationStrategy]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CapacityReservationOptions"
+                                 Prelude.<$> capacityReservationOptions]))}
+instance JSON.ToJSON OnDemandProvisioningSpecificationProperty where
+  toJSON OnDemandProvisioningSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AllocationStrategy" JSON..= allocationStrategy]
+              (Prelude.catMaybes
+                 [(JSON..=) "CapacityReservationOptions"
+                    Prelude.<$> capacityReservationOptions])))
+instance Property "AllocationStrategy" OnDemandProvisioningSpecificationProperty where
+  type PropertyType "AllocationStrategy" OnDemandProvisioningSpecificationProperty = Value Prelude.Text
+  set newValue OnDemandProvisioningSpecificationProperty {..}
+    = OnDemandProvisioningSpecificationProperty
+        {allocationStrategy = newValue, ..}
+instance Property "CapacityReservationOptions" OnDemandProvisioningSpecificationProperty where
+  type PropertyType "CapacityReservationOptions" OnDemandProvisioningSpecificationProperty = OnDemandCapacityReservationOptionsProperty
+  set newValue OnDemandProvisioningSpecificationProperty {..}
+    = OnDemandProvisioningSpecificationProperty
+        {capacityReservationOptions = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandProvisioningSpecificationProperty.hs-boot b/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandProvisioningSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandProvisioningSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceFleetConfig.OnDemandProvisioningSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OnDemandProvisioningSpecificationProperty :: Prelude.Type
+instance ToResourceProperties OnDemandProvisioningSpecificationProperty
+instance Prelude.Eq OnDemandProvisioningSpecificationProperty
+instance Prelude.Show OnDemandProvisioningSpecificationProperty
+instance JSON.ToJSON OnDemandProvisioningSpecificationProperty
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandResizingSpecificationProperty.hs b/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandResizingSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandResizingSpecificationProperty.hs
@@ -0,0 +1,64 @@
+module Stratosphere.EMR.InstanceFleetConfig.OnDemandResizingSpecificationProperty (
+        module Exports, OnDemandResizingSpecificationProperty(..),
+        mkOnDemandResizingSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.InstanceFleetConfig.OnDemandCapacityReservationOptionsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OnDemandResizingSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ondemandresizingspecification.html>
+    OnDemandResizingSpecificationProperty {haddock_workaround_ :: (),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ondemandresizingspecification.html#cfn-elasticmapreduce-instancefleetconfig-ondemandresizingspecification-allocationstrategy>
+                                           allocationStrategy :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ondemandresizingspecification.html#cfn-elasticmapreduce-instancefleetconfig-ondemandresizingspecification-capacityreservationoptions>
+                                           capacityReservationOptions :: (Prelude.Maybe OnDemandCapacityReservationOptionsProperty),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ondemandresizingspecification.html#cfn-elasticmapreduce-instancefleetconfig-ondemandresizingspecification-timeoutdurationminutes>
+                                           timeoutDurationMinutes :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOnDemandResizingSpecificationProperty ::
+  OnDemandResizingSpecificationProperty
+mkOnDemandResizingSpecificationProperty
+  = OnDemandResizingSpecificationProperty
+      {haddock_workaround_ = (), allocationStrategy = Prelude.Nothing,
+       capacityReservationOptions = Prelude.Nothing,
+       timeoutDurationMinutes = Prelude.Nothing}
+instance ToResourceProperties OnDemandResizingSpecificationProperty where
+  toResourceProperties OnDemandResizingSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceFleetConfig.OnDemandResizingSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+                            (JSON..=) "CapacityReservationOptions"
+                              Prelude.<$> capacityReservationOptions,
+                            (JSON..=) "TimeoutDurationMinutes"
+                              Prelude.<$> timeoutDurationMinutes])}
+instance JSON.ToJSON OnDemandResizingSpecificationProperty where
+  toJSON OnDemandResizingSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+               (JSON..=) "CapacityReservationOptions"
+                 Prelude.<$> capacityReservationOptions,
+               (JSON..=) "TimeoutDurationMinutes"
+                 Prelude.<$> timeoutDurationMinutes]))
+instance Property "AllocationStrategy" OnDemandResizingSpecificationProperty where
+  type PropertyType "AllocationStrategy" OnDemandResizingSpecificationProperty = Value Prelude.Text
+  set newValue OnDemandResizingSpecificationProperty {..}
+    = OnDemandResizingSpecificationProperty
+        {allocationStrategy = Prelude.pure newValue, ..}
+instance Property "CapacityReservationOptions" OnDemandResizingSpecificationProperty where
+  type PropertyType "CapacityReservationOptions" OnDemandResizingSpecificationProperty = OnDemandCapacityReservationOptionsProperty
+  set newValue OnDemandResizingSpecificationProperty {..}
+    = OnDemandResizingSpecificationProperty
+        {capacityReservationOptions = Prelude.pure newValue, ..}
+instance Property "TimeoutDurationMinutes" OnDemandResizingSpecificationProperty where
+  type PropertyType "TimeoutDurationMinutes" OnDemandResizingSpecificationProperty = Value Prelude.Integer
+  set newValue OnDemandResizingSpecificationProperty {..}
+    = OnDemandResizingSpecificationProperty
+        {timeoutDurationMinutes = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandResizingSpecificationProperty.hs-boot b/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandResizingSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/OnDemandResizingSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceFleetConfig.OnDemandResizingSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OnDemandResizingSpecificationProperty :: Prelude.Type
+instance ToResourceProperties OnDemandResizingSpecificationProperty
+instance Prelude.Eq OnDemandResizingSpecificationProperty
+instance Prelude.Show OnDemandResizingSpecificationProperty
+instance JSON.ToJSON OnDemandResizingSpecificationProperty
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/SpotProvisioningSpecificationProperty.hs b/gen/Stratosphere/EMR/InstanceFleetConfig/SpotProvisioningSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/SpotProvisioningSpecificationProperty.hs
@@ -0,0 +1,76 @@
+module Stratosphere.EMR.InstanceFleetConfig.SpotProvisioningSpecificationProperty (
+        SpotProvisioningSpecificationProperty(..),
+        mkSpotProvisioningSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SpotProvisioningSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotprovisioningspecification.html>
+    SpotProvisioningSpecificationProperty {haddock_workaround_ :: (),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotprovisioningspecification.html#cfn-elasticmapreduce-instancefleetconfig-spotprovisioningspecification-allocationstrategy>
+                                           allocationStrategy :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotprovisioningspecification.html#cfn-elasticmapreduce-instancefleetconfig-spotprovisioningspecification-blockdurationminutes>
+                                           blockDurationMinutes :: (Prelude.Maybe (Value Prelude.Integer)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotprovisioningspecification.html#cfn-elasticmapreduce-instancefleetconfig-spotprovisioningspecification-timeoutaction>
+                                           timeoutAction :: (Value Prelude.Text),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotprovisioningspecification.html#cfn-elasticmapreduce-instancefleetconfig-spotprovisioningspecification-timeoutdurationminutes>
+                                           timeoutDurationMinutes :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSpotProvisioningSpecificationProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Integer -> SpotProvisioningSpecificationProperty
+mkSpotProvisioningSpecificationProperty
+  timeoutAction
+  timeoutDurationMinutes
+  = SpotProvisioningSpecificationProperty
+      {haddock_workaround_ = (), timeoutAction = timeoutAction,
+       timeoutDurationMinutes = timeoutDurationMinutes,
+       allocationStrategy = Prelude.Nothing,
+       blockDurationMinutes = Prelude.Nothing}
+instance ToResourceProperties SpotProvisioningSpecificationProperty where
+  toResourceProperties SpotProvisioningSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceFleetConfig.SpotProvisioningSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["TimeoutAction" JSON..= timeoutAction,
+                            "TimeoutDurationMinutes" JSON..= timeoutDurationMinutes]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+                               (JSON..=) "BlockDurationMinutes"
+                                 Prelude.<$> blockDurationMinutes]))}
+instance JSON.ToJSON SpotProvisioningSpecificationProperty where
+  toJSON SpotProvisioningSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["TimeoutAction" JSON..= timeoutAction,
+               "TimeoutDurationMinutes" JSON..= timeoutDurationMinutes]
+              (Prelude.catMaybes
+                 [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+                  (JSON..=) "BlockDurationMinutes"
+                    Prelude.<$> blockDurationMinutes])))
+instance Property "AllocationStrategy" SpotProvisioningSpecificationProperty where
+  type PropertyType "AllocationStrategy" SpotProvisioningSpecificationProperty = Value Prelude.Text
+  set newValue SpotProvisioningSpecificationProperty {..}
+    = SpotProvisioningSpecificationProperty
+        {allocationStrategy = Prelude.pure newValue, ..}
+instance Property "BlockDurationMinutes" SpotProvisioningSpecificationProperty where
+  type PropertyType "BlockDurationMinutes" SpotProvisioningSpecificationProperty = Value Prelude.Integer
+  set newValue SpotProvisioningSpecificationProperty {..}
+    = SpotProvisioningSpecificationProperty
+        {blockDurationMinutes = Prelude.pure newValue, ..}
+instance Property "TimeoutAction" SpotProvisioningSpecificationProperty where
+  type PropertyType "TimeoutAction" SpotProvisioningSpecificationProperty = Value Prelude.Text
+  set newValue SpotProvisioningSpecificationProperty {..}
+    = SpotProvisioningSpecificationProperty
+        {timeoutAction = newValue, ..}
+instance Property "TimeoutDurationMinutes" SpotProvisioningSpecificationProperty where
+  type PropertyType "TimeoutDurationMinutes" SpotProvisioningSpecificationProperty = Value Prelude.Integer
+  set newValue SpotProvisioningSpecificationProperty {..}
+    = SpotProvisioningSpecificationProperty
+        {timeoutDurationMinutes = newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/SpotProvisioningSpecificationProperty.hs-boot b/gen/Stratosphere/EMR/InstanceFleetConfig/SpotProvisioningSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/SpotProvisioningSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceFleetConfig.SpotProvisioningSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SpotProvisioningSpecificationProperty :: Prelude.Type
+instance ToResourceProperties SpotProvisioningSpecificationProperty
+instance Prelude.Eq SpotProvisioningSpecificationProperty
+instance Prelude.Show SpotProvisioningSpecificationProperty
+instance JSON.ToJSON SpotProvisioningSpecificationProperty
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/SpotResizingSpecificationProperty.hs b/gen/Stratosphere/EMR/InstanceFleetConfig/SpotResizingSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/SpotResizingSpecificationProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.EMR.InstanceFleetConfig.SpotResizingSpecificationProperty (
+        SpotResizingSpecificationProperty(..),
+        mkSpotResizingSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SpotResizingSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotresizingspecification.html>
+    SpotResizingSpecificationProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotresizingspecification.html#cfn-elasticmapreduce-instancefleetconfig-spotresizingspecification-allocationstrategy>
+                                       allocationStrategy :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotresizingspecification.html#cfn-elasticmapreduce-instancefleetconfig-spotresizingspecification-timeoutdurationminutes>
+                                       timeoutDurationMinutes :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSpotResizingSpecificationProperty ::
+  SpotResizingSpecificationProperty
+mkSpotResizingSpecificationProperty
+  = SpotResizingSpecificationProperty
+      {haddock_workaround_ = (), allocationStrategy = Prelude.Nothing,
+       timeoutDurationMinutes = Prelude.Nothing}
+instance ToResourceProperties SpotResizingSpecificationProperty where
+  toResourceProperties SpotResizingSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceFleetConfig.SpotResizingSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+                            (JSON..=) "TimeoutDurationMinutes"
+                              Prelude.<$> timeoutDurationMinutes])}
+instance JSON.ToJSON SpotResizingSpecificationProperty where
+  toJSON SpotResizingSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+               (JSON..=) "TimeoutDurationMinutes"
+                 Prelude.<$> timeoutDurationMinutes]))
+instance Property "AllocationStrategy" SpotResizingSpecificationProperty where
+  type PropertyType "AllocationStrategy" SpotResizingSpecificationProperty = Value Prelude.Text
+  set newValue SpotResizingSpecificationProperty {..}
+    = SpotResizingSpecificationProperty
+        {allocationStrategy = Prelude.pure newValue, ..}
+instance Property "TimeoutDurationMinutes" SpotResizingSpecificationProperty where
+  type PropertyType "TimeoutDurationMinutes" SpotResizingSpecificationProperty = Value Prelude.Integer
+  set newValue SpotResizingSpecificationProperty {..}
+    = SpotResizingSpecificationProperty
+        {timeoutDurationMinutes = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/SpotResizingSpecificationProperty.hs-boot b/gen/Stratosphere/EMR/InstanceFleetConfig/SpotResizingSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/SpotResizingSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceFleetConfig.SpotResizingSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SpotResizingSpecificationProperty :: Prelude.Type
+instance ToResourceProperties SpotResizingSpecificationProperty
+instance Prelude.Eq SpotResizingSpecificationProperty
+instance Prelude.Show SpotResizingSpecificationProperty
+instance JSON.ToJSON SpotResizingSpecificationProperty
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/VolumeSpecificationProperty.hs b/gen/Stratosphere/EMR/InstanceFleetConfig/VolumeSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/VolumeSpecificationProperty.hs
@@ -0,0 +1,65 @@
+module Stratosphere.EMR.InstanceFleetConfig.VolumeSpecificationProperty (
+        VolumeSpecificationProperty(..), mkVolumeSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VolumeSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-volumespecification.html>
+    VolumeSpecificationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-volumespecification.html#cfn-elasticmapreduce-instancefleetconfig-volumespecification-iops>
+                                 iops :: (Prelude.Maybe (Value Prelude.Integer)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-volumespecification.html#cfn-elasticmapreduce-instancefleetconfig-volumespecification-sizeingb>
+                                 sizeInGB :: (Value Prelude.Integer),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-volumespecification.html#cfn-elasticmapreduce-instancefleetconfig-volumespecification-throughput>
+                                 throughput :: (Prelude.Maybe (Value Prelude.Integer)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-volumespecification.html#cfn-elasticmapreduce-instancefleetconfig-volumespecification-volumetype>
+                                 volumeType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVolumeSpecificationProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Text -> VolumeSpecificationProperty
+mkVolumeSpecificationProperty sizeInGB volumeType
+  = VolumeSpecificationProperty
+      {haddock_workaround_ = (), sizeInGB = sizeInGB,
+       volumeType = volumeType, iops = Prelude.Nothing,
+       throughput = Prelude.Nothing}
+instance ToResourceProperties VolumeSpecificationProperty where
+  toResourceProperties VolumeSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceFleetConfig.VolumeSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SizeInGB" JSON..= sizeInGB, "VolumeType" JSON..= volumeType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Iops" Prelude.<$> iops,
+                               (JSON..=) "Throughput" Prelude.<$> throughput]))}
+instance JSON.ToJSON VolumeSpecificationProperty where
+  toJSON VolumeSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SizeInGB" JSON..= sizeInGB, "VolumeType" JSON..= volumeType]
+              (Prelude.catMaybes
+                 [(JSON..=) "Iops" Prelude.<$> iops,
+                  (JSON..=) "Throughput" Prelude.<$> throughput])))
+instance Property "Iops" VolumeSpecificationProperty where
+  type PropertyType "Iops" VolumeSpecificationProperty = Value Prelude.Integer
+  set newValue VolumeSpecificationProperty {..}
+    = VolumeSpecificationProperty {iops = Prelude.pure newValue, ..}
+instance Property "SizeInGB" VolumeSpecificationProperty where
+  type PropertyType "SizeInGB" VolumeSpecificationProperty = Value Prelude.Integer
+  set newValue VolumeSpecificationProperty {..}
+    = VolumeSpecificationProperty {sizeInGB = newValue, ..}
+instance Property "Throughput" VolumeSpecificationProperty where
+  type PropertyType "Throughput" VolumeSpecificationProperty = Value Prelude.Integer
+  set newValue VolumeSpecificationProperty {..}
+    = VolumeSpecificationProperty
+        {throughput = Prelude.pure newValue, ..}
+instance Property "VolumeType" VolumeSpecificationProperty where
+  type PropertyType "VolumeType" VolumeSpecificationProperty = Value Prelude.Text
+  set newValue VolumeSpecificationProperty {..}
+    = VolumeSpecificationProperty {volumeType = newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceFleetConfig/VolumeSpecificationProperty.hs-boot b/gen/Stratosphere/EMR/InstanceFleetConfig/VolumeSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceFleetConfig/VolumeSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceFleetConfig.VolumeSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VolumeSpecificationProperty :: Prelude.Type
+instance ToResourceProperties VolumeSpecificationProperty
+instance Prelude.Eq VolumeSpecificationProperty
+instance Prelude.Show VolumeSpecificationProperty
+instance JSON.ToJSON VolumeSpecificationProperty
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig.hs b/gen/Stratosphere/EMR/InstanceGroupConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig.hs
@@ -0,0 +1,133 @@
+module Stratosphere.EMR.InstanceGroupConfig (
+        module Exports, InstanceGroupConfig(..), mkInstanceGroupConfig
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.InstanceGroupConfig.AutoScalingPolicyProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.InstanceGroupConfig.ConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.InstanceGroupConfig.EbsConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceGroupConfig
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html>
+    InstanceGroupConfig {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-elasticmapreduce-instancegroupconfig-autoscalingpolicy>
+                         autoScalingPolicy :: (Prelude.Maybe AutoScalingPolicyProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-bidprice>
+                         bidPrice :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-configurations>
+                         configurations :: (Prelude.Maybe [ConfigurationProperty]),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-customamiid>
+                         customAmiId :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-ebsconfiguration>
+                         ebsConfiguration :: (Prelude.Maybe EbsConfigurationProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfiginstancecount->
+                         instanceCount :: (Value Prelude.Integer),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-instancerole>
+                         instanceRole :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-instancetype>
+                         instanceType :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-jobflowid>
+                         jobFlowId :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-market>
+                         market :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-name>
+                         name :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceGroupConfig ::
+  Value Prelude.Integer
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> Value Prelude.Text -> InstanceGroupConfig
+mkInstanceGroupConfig
+  instanceCount
+  instanceRole
+  instanceType
+  jobFlowId
+  = InstanceGroupConfig
+      {haddock_workaround_ = (), instanceCount = instanceCount,
+       instanceRole = instanceRole, instanceType = instanceType,
+       jobFlowId = jobFlowId, autoScalingPolicy = Prelude.Nothing,
+       bidPrice = Prelude.Nothing, configurations = Prelude.Nothing,
+       customAmiId = Prelude.Nothing, ebsConfiguration = Prelude.Nothing,
+       market = Prelude.Nothing, name = Prelude.Nothing}
+instance ToResourceProperties InstanceGroupConfig where
+  toResourceProperties InstanceGroupConfig {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceGroupConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["InstanceCount" JSON..= instanceCount,
+                            "InstanceRole" JSON..= instanceRole,
+                            "InstanceType" JSON..= instanceType, "JobFlowId" JSON..= jobFlowId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AutoScalingPolicy" Prelude.<$> autoScalingPolicy,
+                               (JSON..=) "BidPrice" Prelude.<$> bidPrice,
+                               (JSON..=) "Configurations" Prelude.<$> configurations,
+                               (JSON..=) "CustomAmiId" Prelude.<$> customAmiId,
+                               (JSON..=) "EbsConfiguration" Prelude.<$> ebsConfiguration,
+                               (JSON..=) "Market" Prelude.<$> market,
+                               (JSON..=) "Name" Prelude.<$> name]))}
+instance JSON.ToJSON InstanceGroupConfig where
+  toJSON InstanceGroupConfig {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["InstanceCount" JSON..= instanceCount,
+               "InstanceRole" JSON..= instanceRole,
+               "InstanceType" JSON..= instanceType, "JobFlowId" JSON..= jobFlowId]
+              (Prelude.catMaybes
+                 [(JSON..=) "AutoScalingPolicy" Prelude.<$> autoScalingPolicy,
+                  (JSON..=) "BidPrice" Prelude.<$> bidPrice,
+                  (JSON..=) "Configurations" Prelude.<$> configurations,
+                  (JSON..=) "CustomAmiId" Prelude.<$> customAmiId,
+                  (JSON..=) "EbsConfiguration" Prelude.<$> ebsConfiguration,
+                  (JSON..=) "Market" Prelude.<$> market,
+                  (JSON..=) "Name" Prelude.<$> name])))
+instance Property "AutoScalingPolicy" InstanceGroupConfig where
+  type PropertyType "AutoScalingPolicy" InstanceGroupConfig = AutoScalingPolicyProperty
+  set newValue InstanceGroupConfig {..}
+    = InstanceGroupConfig
+        {autoScalingPolicy = Prelude.pure newValue, ..}
+instance Property "BidPrice" InstanceGroupConfig where
+  type PropertyType "BidPrice" InstanceGroupConfig = Value Prelude.Text
+  set newValue InstanceGroupConfig {..}
+    = InstanceGroupConfig {bidPrice = Prelude.pure newValue, ..}
+instance Property "Configurations" InstanceGroupConfig where
+  type PropertyType "Configurations" InstanceGroupConfig = [ConfigurationProperty]
+  set newValue InstanceGroupConfig {..}
+    = InstanceGroupConfig {configurations = Prelude.pure newValue, ..}
+instance Property "CustomAmiId" InstanceGroupConfig where
+  type PropertyType "CustomAmiId" InstanceGroupConfig = Value Prelude.Text
+  set newValue InstanceGroupConfig {..}
+    = InstanceGroupConfig {customAmiId = Prelude.pure newValue, ..}
+instance Property "EbsConfiguration" InstanceGroupConfig where
+  type PropertyType "EbsConfiguration" InstanceGroupConfig = EbsConfigurationProperty
+  set newValue InstanceGroupConfig {..}
+    = InstanceGroupConfig
+        {ebsConfiguration = Prelude.pure newValue, ..}
+instance Property "InstanceCount" InstanceGroupConfig where
+  type PropertyType "InstanceCount" InstanceGroupConfig = Value Prelude.Integer
+  set newValue InstanceGroupConfig {..}
+    = InstanceGroupConfig {instanceCount = newValue, ..}
+instance Property "InstanceRole" InstanceGroupConfig where
+  type PropertyType "InstanceRole" InstanceGroupConfig = Value Prelude.Text
+  set newValue InstanceGroupConfig {..}
+    = InstanceGroupConfig {instanceRole = newValue, ..}
+instance Property "InstanceType" InstanceGroupConfig where
+  type PropertyType "InstanceType" InstanceGroupConfig = Value Prelude.Text
+  set newValue InstanceGroupConfig {..}
+    = InstanceGroupConfig {instanceType = newValue, ..}
+instance Property "JobFlowId" InstanceGroupConfig where
+  type PropertyType "JobFlowId" InstanceGroupConfig = Value Prelude.Text
+  set newValue InstanceGroupConfig {..}
+    = InstanceGroupConfig {jobFlowId = newValue, ..}
+instance Property "Market" InstanceGroupConfig where
+  type PropertyType "Market" InstanceGroupConfig = Value Prelude.Text
+  set newValue InstanceGroupConfig {..}
+    = InstanceGroupConfig {market = Prelude.pure newValue, ..}
+instance Property "Name" InstanceGroupConfig where
+  type PropertyType "Name" InstanceGroupConfig = Value Prelude.Text
+  set newValue InstanceGroupConfig {..}
+    = InstanceGroupConfig {name = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/AutoScalingPolicyProperty.hs b/gen/Stratosphere/EMR/InstanceGroupConfig/AutoScalingPolicyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/AutoScalingPolicyProperty.hs
@@ -0,0 +1,44 @@
+module Stratosphere.EMR.InstanceGroupConfig.AutoScalingPolicyProperty (
+        module Exports, AutoScalingPolicyProperty(..),
+        mkAutoScalingPolicyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.InstanceGroupConfig.ScalingConstraintsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.InstanceGroupConfig.ScalingRuleProperty as Exports
+import Stratosphere.ResourceProperties
+data AutoScalingPolicyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-autoscalingpolicy.html>
+    AutoScalingPolicyProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-autoscalingpolicy.html#cfn-elasticmapreduce-instancegroupconfig-autoscalingpolicy-constraints>
+                               constraints :: ScalingConstraintsProperty,
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-autoscalingpolicy.html#cfn-elasticmapreduce-instancegroupconfig-autoscalingpolicy-rules>
+                               rules :: [ScalingRuleProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAutoScalingPolicyProperty ::
+  ScalingConstraintsProperty
+  -> [ScalingRuleProperty] -> AutoScalingPolicyProperty
+mkAutoScalingPolicyProperty constraints rules
+  = AutoScalingPolicyProperty
+      {haddock_workaround_ = (), constraints = constraints,
+       rules = rules}
+instance ToResourceProperties AutoScalingPolicyProperty where
+  toResourceProperties AutoScalingPolicyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceGroupConfig.AutoScalingPolicy",
+         supportsTags = Prelude.False,
+         properties = ["Constraints" JSON..= constraints,
+                       "Rules" JSON..= rules]}
+instance JSON.ToJSON AutoScalingPolicyProperty where
+  toJSON AutoScalingPolicyProperty {..}
+    = JSON.object
+        ["Constraints" JSON..= constraints, "Rules" JSON..= rules]
+instance Property "Constraints" AutoScalingPolicyProperty where
+  type PropertyType "Constraints" AutoScalingPolicyProperty = ScalingConstraintsProperty
+  set newValue AutoScalingPolicyProperty {..}
+    = AutoScalingPolicyProperty {constraints = newValue, ..}
+instance Property "Rules" AutoScalingPolicyProperty where
+  type PropertyType "Rules" AutoScalingPolicyProperty = [ScalingRuleProperty]
+  set newValue AutoScalingPolicyProperty {..}
+    = AutoScalingPolicyProperty {rules = newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/AutoScalingPolicyProperty.hs-boot b/gen/Stratosphere/EMR/InstanceGroupConfig/AutoScalingPolicyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/AutoScalingPolicyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceGroupConfig.AutoScalingPolicyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AutoScalingPolicyProperty :: Prelude.Type
+instance ToResourceProperties AutoScalingPolicyProperty
+instance Prelude.Eq AutoScalingPolicyProperty
+instance Prelude.Show AutoScalingPolicyProperty
+instance JSON.ToJSON AutoScalingPolicyProperty
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/CloudWatchAlarmDefinitionProperty.hs b/gen/Stratosphere/EMR/InstanceGroupConfig/CloudWatchAlarmDefinitionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/CloudWatchAlarmDefinitionProperty.hs
@@ -0,0 +1,120 @@
+module Stratosphere.EMR.InstanceGroupConfig.CloudWatchAlarmDefinitionProperty (
+        module Exports, CloudWatchAlarmDefinitionProperty(..),
+        mkCloudWatchAlarmDefinitionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.InstanceGroupConfig.MetricDimensionProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CloudWatchAlarmDefinitionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html>
+    CloudWatchAlarmDefinitionProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-comparisonoperator>
+                                       comparisonOperator :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-dimensions>
+                                       dimensions :: (Prelude.Maybe [MetricDimensionProperty]),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-evaluationperiods>
+                                       evaluationPeriods :: (Prelude.Maybe (Value Prelude.Integer)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-metricname>
+                                       metricName :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-namespace>
+                                       namespace :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-period>
+                                       period :: (Value Prelude.Integer),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-statistic>
+                                       statistic :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-threshold>
+                                       threshold :: (Value Prelude.Double),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-unit>
+                                       unit :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCloudWatchAlarmDefinitionProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Integer
+        -> Value Prelude.Double -> CloudWatchAlarmDefinitionProperty
+mkCloudWatchAlarmDefinitionProperty
+  comparisonOperator
+  metricName
+  period
+  threshold
+  = CloudWatchAlarmDefinitionProperty
+      {haddock_workaround_ = (), comparisonOperator = comparisonOperator,
+       metricName = metricName, period = period, threshold = threshold,
+       dimensions = Prelude.Nothing, evaluationPeriods = Prelude.Nothing,
+       namespace = Prelude.Nothing, statistic = Prelude.Nothing,
+       unit = Prelude.Nothing}
+instance ToResourceProperties CloudWatchAlarmDefinitionProperty where
+  toResourceProperties CloudWatchAlarmDefinitionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceGroupConfig.CloudWatchAlarmDefinition",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ComparisonOperator" JSON..= comparisonOperator,
+                            "MetricName" JSON..= metricName, "Period" JSON..= period,
+                            "Threshold" JSON..= threshold]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Dimensions" Prelude.<$> dimensions,
+                               (JSON..=) "EvaluationPeriods" Prelude.<$> evaluationPeriods,
+                               (JSON..=) "Namespace" Prelude.<$> namespace,
+                               (JSON..=) "Statistic" Prelude.<$> statistic,
+                               (JSON..=) "Unit" Prelude.<$> unit]))}
+instance JSON.ToJSON CloudWatchAlarmDefinitionProperty where
+  toJSON CloudWatchAlarmDefinitionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ComparisonOperator" JSON..= comparisonOperator,
+               "MetricName" JSON..= metricName, "Period" JSON..= period,
+               "Threshold" JSON..= threshold]
+              (Prelude.catMaybes
+                 [(JSON..=) "Dimensions" Prelude.<$> dimensions,
+                  (JSON..=) "EvaluationPeriods" Prelude.<$> evaluationPeriods,
+                  (JSON..=) "Namespace" Prelude.<$> namespace,
+                  (JSON..=) "Statistic" Prelude.<$> statistic,
+                  (JSON..=) "Unit" Prelude.<$> unit])))
+instance Property "ComparisonOperator" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "ComparisonOperator" CloudWatchAlarmDefinitionProperty = Value Prelude.Text
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty
+        {comparisonOperator = newValue, ..}
+instance Property "Dimensions" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "Dimensions" CloudWatchAlarmDefinitionProperty = [MetricDimensionProperty]
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty
+        {dimensions = Prelude.pure newValue, ..}
+instance Property "EvaluationPeriods" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "EvaluationPeriods" CloudWatchAlarmDefinitionProperty = Value Prelude.Integer
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty
+        {evaluationPeriods = Prelude.pure newValue, ..}
+instance Property "MetricName" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "MetricName" CloudWatchAlarmDefinitionProperty = Value Prelude.Text
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty {metricName = newValue, ..}
+instance Property "Namespace" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "Namespace" CloudWatchAlarmDefinitionProperty = Value Prelude.Text
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty
+        {namespace = Prelude.pure newValue, ..}
+instance Property "Period" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "Period" CloudWatchAlarmDefinitionProperty = Value Prelude.Integer
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty {period = newValue, ..}
+instance Property "Statistic" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "Statistic" CloudWatchAlarmDefinitionProperty = Value Prelude.Text
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty
+        {statistic = Prelude.pure newValue, ..}
+instance Property "Threshold" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "Threshold" CloudWatchAlarmDefinitionProperty = Value Prelude.Double
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty {threshold = newValue, ..}
+instance Property "Unit" CloudWatchAlarmDefinitionProperty where
+  type PropertyType "Unit" CloudWatchAlarmDefinitionProperty = Value Prelude.Text
+  set newValue CloudWatchAlarmDefinitionProperty {..}
+    = CloudWatchAlarmDefinitionProperty
+        {unit = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/CloudWatchAlarmDefinitionProperty.hs-boot b/gen/Stratosphere/EMR/InstanceGroupConfig/CloudWatchAlarmDefinitionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/CloudWatchAlarmDefinitionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceGroupConfig.CloudWatchAlarmDefinitionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CloudWatchAlarmDefinitionProperty :: Prelude.Type
+instance ToResourceProperties CloudWatchAlarmDefinitionProperty
+instance Prelude.Eq CloudWatchAlarmDefinitionProperty
+instance Prelude.Show CloudWatchAlarmDefinitionProperty
+instance JSON.ToJSON CloudWatchAlarmDefinitionProperty
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/ConfigurationProperty.hs b/gen/Stratosphere/EMR/InstanceGroupConfig/ConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/ConfigurationProperty.hs
@@ -0,0 +1,59 @@
+module Stratosphere.EMR.InstanceGroupConfig.ConfigurationProperty (
+        ConfigurationProperty(..), mkConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-configuration.html>
+    ConfigurationProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-configuration.html#cfn-emr-cluster-configuration-classification>
+                           classification :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-configuration.html#cfn-emr-cluster-configuration-configurationproperties>
+                           configurationProperties :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-configuration.html#cfn-emr-cluster-configuration-configurations>
+                           configurations :: (Prelude.Maybe [ConfigurationProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConfigurationProperty :: ConfigurationProperty
+mkConfigurationProperty
+  = ConfigurationProperty
+      {haddock_workaround_ = (), classification = Prelude.Nothing,
+       configurationProperties = Prelude.Nothing,
+       configurations = Prelude.Nothing}
+instance ToResourceProperties ConfigurationProperty where
+  toResourceProperties ConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceGroupConfig.Configuration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Classification" Prelude.<$> classification,
+                            (JSON..=) "ConfigurationProperties"
+                              Prelude.<$> configurationProperties,
+                            (JSON..=) "Configurations" Prelude.<$> configurations])}
+instance JSON.ToJSON ConfigurationProperty where
+  toJSON ConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Classification" Prelude.<$> classification,
+               (JSON..=) "ConfigurationProperties"
+                 Prelude.<$> configurationProperties,
+               (JSON..=) "Configurations" Prelude.<$> configurations]))
+instance Property "Classification" ConfigurationProperty where
+  type PropertyType "Classification" ConfigurationProperty = Value Prelude.Text
+  set newValue ConfigurationProperty {..}
+    = ConfigurationProperty
+        {classification = Prelude.pure newValue, ..}
+instance Property "ConfigurationProperties" ConfigurationProperty where
+  type PropertyType "ConfigurationProperties" ConfigurationProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue ConfigurationProperty {..}
+    = ConfigurationProperty
+        {configurationProperties = Prelude.pure newValue, ..}
+instance Property "Configurations" ConfigurationProperty where
+  type PropertyType "Configurations" ConfigurationProperty = [ConfigurationProperty]
+  set newValue ConfigurationProperty {..}
+    = ConfigurationProperty
+        {configurations = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/ConfigurationProperty.hs-boot b/gen/Stratosphere/EMR/InstanceGroupConfig/ConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/ConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceGroupConfig.ConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ConfigurationProperty
+instance Prelude.Eq ConfigurationProperty
+instance Prelude.Show ConfigurationProperty
+instance JSON.ToJSON ConfigurationProperty
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/EbsBlockDeviceConfigProperty.hs b/gen/Stratosphere/EMR/InstanceGroupConfig/EbsBlockDeviceConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/EbsBlockDeviceConfigProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.EMR.InstanceGroupConfig.EbsBlockDeviceConfigProperty (
+        module Exports, EbsBlockDeviceConfigProperty(..),
+        mkEbsBlockDeviceConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.InstanceGroupConfig.VolumeSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EbsBlockDeviceConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig.html>
+    EbsBlockDeviceConfigProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification>
+                                  volumeSpecification :: VolumeSpecificationProperty,
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfig-volumesperinstance>
+                                  volumesPerInstance :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEbsBlockDeviceConfigProperty ::
+  VolumeSpecificationProperty -> EbsBlockDeviceConfigProperty
+mkEbsBlockDeviceConfigProperty volumeSpecification
+  = EbsBlockDeviceConfigProperty
+      {haddock_workaround_ = (),
+       volumeSpecification = volumeSpecification,
+       volumesPerInstance = Prelude.Nothing}
+instance ToResourceProperties EbsBlockDeviceConfigProperty where
+  toResourceProperties EbsBlockDeviceConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceGroupConfig.EbsBlockDeviceConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["VolumeSpecification" JSON..= volumeSpecification]
+                           (Prelude.catMaybes
+                              [(JSON..=) "VolumesPerInstance" Prelude.<$> volumesPerInstance]))}
+instance JSON.ToJSON EbsBlockDeviceConfigProperty where
+  toJSON EbsBlockDeviceConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["VolumeSpecification" JSON..= volumeSpecification]
+              (Prelude.catMaybes
+                 [(JSON..=) "VolumesPerInstance" Prelude.<$> volumesPerInstance])))
+instance Property "VolumeSpecification" EbsBlockDeviceConfigProperty where
+  type PropertyType "VolumeSpecification" EbsBlockDeviceConfigProperty = VolumeSpecificationProperty
+  set newValue EbsBlockDeviceConfigProperty {..}
+    = EbsBlockDeviceConfigProperty {volumeSpecification = newValue, ..}
+instance Property "VolumesPerInstance" EbsBlockDeviceConfigProperty where
+  type PropertyType "VolumesPerInstance" EbsBlockDeviceConfigProperty = Value Prelude.Integer
+  set newValue EbsBlockDeviceConfigProperty {..}
+    = EbsBlockDeviceConfigProperty
+        {volumesPerInstance = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/EbsBlockDeviceConfigProperty.hs-boot b/gen/Stratosphere/EMR/InstanceGroupConfig/EbsBlockDeviceConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/EbsBlockDeviceConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceGroupConfig.EbsBlockDeviceConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EbsBlockDeviceConfigProperty :: Prelude.Type
+instance ToResourceProperties EbsBlockDeviceConfigProperty
+instance Prelude.Eq EbsBlockDeviceConfigProperty
+instance Prelude.Show EbsBlockDeviceConfigProperty
+instance JSON.ToJSON EbsBlockDeviceConfigProperty
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/EbsConfigurationProperty.hs b/gen/Stratosphere/EMR/InstanceGroupConfig/EbsConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/EbsConfigurationProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.EMR.InstanceGroupConfig.EbsConfigurationProperty (
+        module Exports, EbsConfigurationProperty(..),
+        mkEbsConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.InstanceGroupConfig.EbsBlockDeviceConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EbsConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration.html>
+    EbsConfigurationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfigs>
+                              ebsBlockDeviceConfigs :: (Prelude.Maybe [EbsBlockDeviceConfigProperty]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration.html#cfn-emr-ebsconfiguration-ebsoptimized>
+                              ebsOptimized :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEbsConfigurationProperty :: EbsConfigurationProperty
+mkEbsConfigurationProperty
+  = EbsConfigurationProperty
+      {haddock_workaround_ = (), ebsBlockDeviceConfigs = Prelude.Nothing,
+       ebsOptimized = Prelude.Nothing}
+instance ToResourceProperties EbsConfigurationProperty where
+  toResourceProperties EbsConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceGroupConfig.EbsConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EbsBlockDeviceConfigs"
+                              Prelude.<$> ebsBlockDeviceConfigs,
+                            (JSON..=) "EbsOptimized" Prelude.<$> ebsOptimized])}
+instance JSON.ToJSON EbsConfigurationProperty where
+  toJSON EbsConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EbsBlockDeviceConfigs"
+                 Prelude.<$> ebsBlockDeviceConfigs,
+               (JSON..=) "EbsOptimized" Prelude.<$> ebsOptimized]))
+instance Property "EbsBlockDeviceConfigs" EbsConfigurationProperty where
+  type PropertyType "EbsBlockDeviceConfigs" EbsConfigurationProperty = [EbsBlockDeviceConfigProperty]
+  set newValue EbsConfigurationProperty {..}
+    = EbsConfigurationProperty
+        {ebsBlockDeviceConfigs = Prelude.pure newValue, ..}
+instance Property "EbsOptimized" EbsConfigurationProperty where
+  type PropertyType "EbsOptimized" EbsConfigurationProperty = Value Prelude.Bool
+  set newValue EbsConfigurationProperty {..}
+    = EbsConfigurationProperty
+        {ebsOptimized = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/EbsConfigurationProperty.hs-boot b/gen/Stratosphere/EMR/InstanceGroupConfig/EbsConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/EbsConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceGroupConfig.EbsConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EbsConfigurationProperty :: Prelude.Type
+instance ToResourceProperties EbsConfigurationProperty
+instance Prelude.Eq EbsConfigurationProperty
+instance Prelude.Show EbsConfigurationProperty
+instance JSON.ToJSON EbsConfigurationProperty
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/MetricDimensionProperty.hs b/gen/Stratosphere/EMR/InstanceGroupConfig/MetricDimensionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/MetricDimensionProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.EMR.InstanceGroupConfig.MetricDimensionProperty (
+        MetricDimensionProperty(..), mkMetricDimensionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MetricDimensionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-metricdimension.html>
+    MetricDimensionProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-metricdimension.html#cfn-elasticmapreduce-instancegroupconfig-metricdimension-key>
+                             key :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-metricdimension.html#cfn-elasticmapreduce-instancegroupconfig-metricdimension-value>
+                             value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMetricDimensionProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> MetricDimensionProperty
+mkMetricDimensionProperty key value
+  = MetricDimensionProperty
+      {haddock_workaround_ = (), key = key, value = value}
+instance ToResourceProperties MetricDimensionProperty where
+  toResourceProperties MetricDimensionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceGroupConfig.MetricDimension",
+         supportsTags = Prelude.False,
+         properties = ["Key" JSON..= key, "Value" JSON..= value]}
+instance JSON.ToJSON MetricDimensionProperty where
+  toJSON MetricDimensionProperty {..}
+    = JSON.object ["Key" JSON..= key, "Value" JSON..= value]
+instance Property "Key" MetricDimensionProperty where
+  type PropertyType "Key" MetricDimensionProperty = Value Prelude.Text
+  set newValue MetricDimensionProperty {..}
+    = MetricDimensionProperty {key = newValue, ..}
+instance Property "Value" MetricDimensionProperty where
+  type PropertyType "Value" MetricDimensionProperty = Value Prelude.Text
+  set newValue MetricDimensionProperty {..}
+    = MetricDimensionProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/MetricDimensionProperty.hs-boot b/gen/Stratosphere/EMR/InstanceGroupConfig/MetricDimensionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/MetricDimensionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceGroupConfig.MetricDimensionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MetricDimensionProperty :: Prelude.Type
+instance ToResourceProperties MetricDimensionProperty
+instance Prelude.Eq MetricDimensionProperty
+instance Prelude.Show MetricDimensionProperty
+instance JSON.ToJSON MetricDimensionProperty
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingActionProperty.hs b/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingActionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingActionProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.EMR.InstanceGroupConfig.ScalingActionProperty (
+        module Exports, ScalingActionProperty(..), mkScalingActionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.InstanceGroupConfig.SimpleScalingPolicyConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ScalingActionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingaction.html>
+    ScalingActionProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingaction.html#cfn-elasticmapreduce-instancegroupconfig-scalingaction-market>
+                           market :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingaction.html#cfn-elasticmapreduce-instancegroupconfig-scalingaction-simplescalingpolicyconfiguration>
+                           simpleScalingPolicyConfiguration :: SimpleScalingPolicyConfigurationProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScalingActionProperty ::
+  SimpleScalingPolicyConfigurationProperty -> ScalingActionProperty
+mkScalingActionProperty simpleScalingPolicyConfiguration
+  = ScalingActionProperty
+      {haddock_workaround_ = (),
+       simpleScalingPolicyConfiguration = simpleScalingPolicyConfiguration,
+       market = Prelude.Nothing}
+instance ToResourceProperties ScalingActionProperty where
+  toResourceProperties ScalingActionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceGroupConfig.ScalingAction",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SimpleScalingPolicyConfiguration"
+                              JSON..= simpleScalingPolicyConfiguration]
+                           (Prelude.catMaybes [(JSON..=) "Market" Prelude.<$> market]))}
+instance JSON.ToJSON ScalingActionProperty where
+  toJSON ScalingActionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SimpleScalingPolicyConfiguration"
+                 JSON..= simpleScalingPolicyConfiguration]
+              (Prelude.catMaybes [(JSON..=) "Market" Prelude.<$> market])))
+instance Property "Market" ScalingActionProperty where
+  type PropertyType "Market" ScalingActionProperty = Value Prelude.Text
+  set newValue ScalingActionProperty {..}
+    = ScalingActionProperty {market = Prelude.pure newValue, ..}
+instance Property "SimpleScalingPolicyConfiguration" ScalingActionProperty where
+  type PropertyType "SimpleScalingPolicyConfiguration" ScalingActionProperty = SimpleScalingPolicyConfigurationProperty
+  set newValue ScalingActionProperty {..}
+    = ScalingActionProperty
+        {simpleScalingPolicyConfiguration = newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingActionProperty.hs-boot b/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingActionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingActionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceGroupConfig.ScalingActionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScalingActionProperty :: Prelude.Type
+instance ToResourceProperties ScalingActionProperty
+instance Prelude.Eq ScalingActionProperty
+instance Prelude.Show ScalingActionProperty
+instance JSON.ToJSON ScalingActionProperty
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingConstraintsProperty.hs b/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingConstraintsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingConstraintsProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.EMR.InstanceGroupConfig.ScalingConstraintsProperty (
+        ScalingConstraintsProperty(..), mkScalingConstraintsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ScalingConstraintsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingconstraints.html>
+    ScalingConstraintsProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingconstraints.html#cfn-elasticmapreduce-instancegroupconfig-scalingconstraints-maxcapacity>
+                                maxCapacity :: (Value Prelude.Integer),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingconstraints.html#cfn-elasticmapreduce-instancegroupconfig-scalingconstraints-mincapacity>
+                                minCapacity :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScalingConstraintsProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Integer -> ScalingConstraintsProperty
+mkScalingConstraintsProperty maxCapacity minCapacity
+  = ScalingConstraintsProperty
+      {haddock_workaround_ = (), maxCapacity = maxCapacity,
+       minCapacity = minCapacity}
+instance ToResourceProperties ScalingConstraintsProperty where
+  toResourceProperties ScalingConstraintsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceGroupConfig.ScalingConstraints",
+         supportsTags = Prelude.False,
+         properties = ["MaxCapacity" JSON..= maxCapacity,
+                       "MinCapacity" JSON..= minCapacity]}
+instance JSON.ToJSON ScalingConstraintsProperty where
+  toJSON ScalingConstraintsProperty {..}
+    = JSON.object
+        ["MaxCapacity" JSON..= maxCapacity,
+         "MinCapacity" JSON..= minCapacity]
+instance Property "MaxCapacity" ScalingConstraintsProperty where
+  type PropertyType "MaxCapacity" ScalingConstraintsProperty = Value Prelude.Integer
+  set newValue ScalingConstraintsProperty {..}
+    = ScalingConstraintsProperty {maxCapacity = newValue, ..}
+instance Property "MinCapacity" ScalingConstraintsProperty where
+  type PropertyType "MinCapacity" ScalingConstraintsProperty = Value Prelude.Integer
+  set newValue ScalingConstraintsProperty {..}
+    = ScalingConstraintsProperty {minCapacity = newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingConstraintsProperty.hs-boot b/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingConstraintsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingConstraintsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceGroupConfig.ScalingConstraintsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScalingConstraintsProperty :: Prelude.Type
+instance ToResourceProperties ScalingConstraintsProperty
+instance Prelude.Eq ScalingConstraintsProperty
+instance Prelude.Show ScalingConstraintsProperty
+instance JSON.ToJSON ScalingConstraintsProperty
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingRuleProperty.hs b/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingRuleProperty.hs
@@ -0,0 +1,66 @@
+module Stratosphere.EMR.InstanceGroupConfig.ScalingRuleProperty (
+        module Exports, ScalingRuleProperty(..), mkScalingRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.InstanceGroupConfig.ScalingActionProperty as Exports
+import {-# SOURCE #-} Stratosphere.EMR.InstanceGroupConfig.ScalingTriggerProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ScalingRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingrule.html>
+    ScalingRuleProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingrule.html#cfn-elasticmapreduce-instancegroupconfig-scalingrule-action>
+                         action :: ScalingActionProperty,
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingrule.html#cfn-elasticmapreduce-instancegroupconfig-scalingrule-description>
+                         description :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingrule.html#cfn-elasticmapreduce-instancegroupconfig-scalingrule-name>
+                         name :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingrule.html#cfn-elasticmapreduce-instancegroupconfig-scalingrule-trigger>
+                         trigger :: ScalingTriggerProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScalingRuleProperty ::
+  ScalingActionProperty
+  -> Value Prelude.Text
+     -> ScalingTriggerProperty -> ScalingRuleProperty
+mkScalingRuleProperty action name trigger
+  = ScalingRuleProperty
+      {haddock_workaround_ = (), action = action, name = name,
+       trigger = trigger, description = Prelude.Nothing}
+instance ToResourceProperties ScalingRuleProperty where
+  toResourceProperties ScalingRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceGroupConfig.ScalingRule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Action" JSON..= action, "Name" JSON..= name,
+                            "Trigger" JSON..= trigger]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description]))}
+instance JSON.ToJSON ScalingRuleProperty where
+  toJSON ScalingRuleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Action" JSON..= action, "Name" JSON..= name,
+               "Trigger" JSON..= trigger]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description])))
+instance Property "Action" ScalingRuleProperty where
+  type PropertyType "Action" ScalingRuleProperty = ScalingActionProperty
+  set newValue ScalingRuleProperty {..}
+    = ScalingRuleProperty {action = newValue, ..}
+instance Property "Description" ScalingRuleProperty where
+  type PropertyType "Description" ScalingRuleProperty = Value Prelude.Text
+  set newValue ScalingRuleProperty {..}
+    = ScalingRuleProperty {description = Prelude.pure newValue, ..}
+instance Property "Name" ScalingRuleProperty where
+  type PropertyType "Name" ScalingRuleProperty = Value Prelude.Text
+  set newValue ScalingRuleProperty {..}
+    = ScalingRuleProperty {name = newValue, ..}
+instance Property "Trigger" ScalingRuleProperty where
+  type PropertyType "Trigger" ScalingRuleProperty = ScalingTriggerProperty
+  set newValue ScalingRuleProperty {..}
+    = ScalingRuleProperty {trigger = newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingRuleProperty.hs-boot b/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceGroupConfig.ScalingRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScalingRuleProperty :: Prelude.Type
+instance ToResourceProperties ScalingRuleProperty
+instance Prelude.Eq ScalingRuleProperty
+instance Prelude.Show ScalingRuleProperty
+instance JSON.ToJSON ScalingRuleProperty
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingTriggerProperty.hs b/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingTriggerProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingTriggerProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.EMR.InstanceGroupConfig.ScalingTriggerProperty (
+        module Exports, ScalingTriggerProperty(..),
+        mkScalingTriggerProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.InstanceGroupConfig.CloudWatchAlarmDefinitionProperty as Exports
+import Stratosphere.ResourceProperties
+data ScalingTriggerProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingtrigger.html>
+    ScalingTriggerProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingtrigger.html#cfn-elasticmapreduce-instancegroupconfig-scalingtrigger-cloudwatchalarmdefinition>
+                            cloudWatchAlarmDefinition :: CloudWatchAlarmDefinitionProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScalingTriggerProperty ::
+  CloudWatchAlarmDefinitionProperty -> ScalingTriggerProperty
+mkScalingTriggerProperty cloudWatchAlarmDefinition
+  = ScalingTriggerProperty
+      {haddock_workaround_ = (),
+       cloudWatchAlarmDefinition = cloudWatchAlarmDefinition}
+instance ToResourceProperties ScalingTriggerProperty where
+  toResourceProperties ScalingTriggerProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceGroupConfig.ScalingTrigger",
+         supportsTags = Prelude.False,
+         properties = ["CloudWatchAlarmDefinition"
+                         JSON..= cloudWatchAlarmDefinition]}
+instance JSON.ToJSON ScalingTriggerProperty where
+  toJSON ScalingTriggerProperty {..}
+    = JSON.object
+        ["CloudWatchAlarmDefinition" JSON..= cloudWatchAlarmDefinition]
+instance Property "CloudWatchAlarmDefinition" ScalingTriggerProperty where
+  type PropertyType "CloudWatchAlarmDefinition" ScalingTriggerProperty = CloudWatchAlarmDefinitionProperty
+  set newValue ScalingTriggerProperty {..}
+    = ScalingTriggerProperty {cloudWatchAlarmDefinition = newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingTriggerProperty.hs-boot b/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingTriggerProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/ScalingTriggerProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceGroupConfig.ScalingTriggerProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScalingTriggerProperty :: Prelude.Type
+instance ToResourceProperties ScalingTriggerProperty
+instance Prelude.Eq ScalingTriggerProperty
+instance Prelude.Show ScalingTriggerProperty
+instance JSON.ToJSON ScalingTriggerProperty
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/SimpleScalingPolicyConfigurationProperty.hs b/gen/Stratosphere/EMR/InstanceGroupConfig/SimpleScalingPolicyConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/SimpleScalingPolicyConfigurationProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.EMR.InstanceGroupConfig.SimpleScalingPolicyConfigurationProperty (
+        SimpleScalingPolicyConfigurationProperty(..),
+        mkSimpleScalingPolicyConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SimpleScalingPolicyConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-simplescalingpolicyconfiguration.html>
+    SimpleScalingPolicyConfigurationProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-simplescalingpolicyconfiguration.html#cfn-elasticmapreduce-instancegroupconfig-simplescalingpolicyconfiguration-adjustmenttype>
+                                              adjustmentType :: (Prelude.Maybe (Value Prelude.Text)),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-simplescalingpolicyconfiguration.html#cfn-elasticmapreduce-instancegroupconfig-simplescalingpolicyconfiguration-cooldown>
+                                              coolDown :: (Prelude.Maybe (Value Prelude.Integer)),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-simplescalingpolicyconfiguration.html#cfn-elasticmapreduce-instancegroupconfig-simplescalingpolicyconfiguration-scalingadjustment>
+                                              scalingAdjustment :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSimpleScalingPolicyConfigurationProperty ::
+  Value Prelude.Integer -> SimpleScalingPolicyConfigurationProperty
+mkSimpleScalingPolicyConfigurationProperty scalingAdjustment
+  = SimpleScalingPolicyConfigurationProperty
+      {haddock_workaround_ = (), scalingAdjustment = scalingAdjustment,
+       adjustmentType = Prelude.Nothing, coolDown = Prelude.Nothing}
+instance ToResourceProperties SimpleScalingPolicyConfigurationProperty where
+  toResourceProperties SimpleScalingPolicyConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceGroupConfig.SimpleScalingPolicyConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ScalingAdjustment" JSON..= scalingAdjustment]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AdjustmentType" Prelude.<$> adjustmentType,
+                               (JSON..=) "CoolDown" Prelude.<$> coolDown]))}
+instance JSON.ToJSON SimpleScalingPolicyConfigurationProperty where
+  toJSON SimpleScalingPolicyConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ScalingAdjustment" JSON..= scalingAdjustment]
+              (Prelude.catMaybes
+                 [(JSON..=) "AdjustmentType" Prelude.<$> adjustmentType,
+                  (JSON..=) "CoolDown" Prelude.<$> coolDown])))
+instance Property "AdjustmentType" SimpleScalingPolicyConfigurationProperty where
+  type PropertyType "AdjustmentType" SimpleScalingPolicyConfigurationProperty = Value Prelude.Text
+  set newValue SimpleScalingPolicyConfigurationProperty {..}
+    = SimpleScalingPolicyConfigurationProperty
+        {adjustmentType = Prelude.pure newValue, ..}
+instance Property "CoolDown" SimpleScalingPolicyConfigurationProperty where
+  type PropertyType "CoolDown" SimpleScalingPolicyConfigurationProperty = Value Prelude.Integer
+  set newValue SimpleScalingPolicyConfigurationProperty {..}
+    = SimpleScalingPolicyConfigurationProperty
+        {coolDown = Prelude.pure newValue, ..}
+instance Property "ScalingAdjustment" SimpleScalingPolicyConfigurationProperty where
+  type PropertyType "ScalingAdjustment" SimpleScalingPolicyConfigurationProperty = Value Prelude.Integer
+  set newValue SimpleScalingPolicyConfigurationProperty {..}
+    = SimpleScalingPolicyConfigurationProperty
+        {scalingAdjustment = newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/SimpleScalingPolicyConfigurationProperty.hs-boot b/gen/Stratosphere/EMR/InstanceGroupConfig/SimpleScalingPolicyConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/SimpleScalingPolicyConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceGroupConfig.SimpleScalingPolicyConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SimpleScalingPolicyConfigurationProperty :: Prelude.Type
+instance ToResourceProperties SimpleScalingPolicyConfigurationProperty
+instance Prelude.Eq SimpleScalingPolicyConfigurationProperty
+instance Prelude.Show SimpleScalingPolicyConfigurationProperty
+instance JSON.ToJSON SimpleScalingPolicyConfigurationProperty
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/VolumeSpecificationProperty.hs b/gen/Stratosphere/EMR/InstanceGroupConfig/VolumeSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/VolumeSpecificationProperty.hs
@@ -0,0 +1,65 @@
+module Stratosphere.EMR.InstanceGroupConfig.VolumeSpecificationProperty (
+        VolumeSpecificationProperty(..), mkVolumeSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VolumeSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification.html>
+    VolumeSpecificationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification-iops>
+                                 iops :: (Prelude.Maybe (Value Prelude.Integer)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification-sizeingb>
+                                 sizeInGB :: (Value Prelude.Integer),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification-throughput>
+                                 throughput :: (Prelude.Maybe (Value Prelude.Integer)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification.html#cfn-emr-ebsconfiguration-ebsblockdeviceconfig-volumespecification-volumetype>
+                                 volumeType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVolumeSpecificationProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Text -> VolumeSpecificationProperty
+mkVolumeSpecificationProperty sizeInGB volumeType
+  = VolumeSpecificationProperty
+      {haddock_workaround_ = (), sizeInGB = sizeInGB,
+       volumeType = volumeType, iops = Prelude.Nothing,
+       throughput = Prelude.Nothing}
+instance ToResourceProperties VolumeSpecificationProperty where
+  toResourceProperties VolumeSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::InstanceGroupConfig.VolumeSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SizeInGB" JSON..= sizeInGB, "VolumeType" JSON..= volumeType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Iops" Prelude.<$> iops,
+                               (JSON..=) "Throughput" Prelude.<$> throughput]))}
+instance JSON.ToJSON VolumeSpecificationProperty where
+  toJSON VolumeSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SizeInGB" JSON..= sizeInGB, "VolumeType" JSON..= volumeType]
+              (Prelude.catMaybes
+                 [(JSON..=) "Iops" Prelude.<$> iops,
+                  (JSON..=) "Throughput" Prelude.<$> throughput])))
+instance Property "Iops" VolumeSpecificationProperty where
+  type PropertyType "Iops" VolumeSpecificationProperty = Value Prelude.Integer
+  set newValue VolumeSpecificationProperty {..}
+    = VolumeSpecificationProperty {iops = Prelude.pure newValue, ..}
+instance Property "SizeInGB" VolumeSpecificationProperty where
+  type PropertyType "SizeInGB" VolumeSpecificationProperty = Value Prelude.Integer
+  set newValue VolumeSpecificationProperty {..}
+    = VolumeSpecificationProperty {sizeInGB = newValue, ..}
+instance Property "Throughput" VolumeSpecificationProperty where
+  type PropertyType "Throughput" VolumeSpecificationProperty = Value Prelude.Integer
+  set newValue VolumeSpecificationProperty {..}
+    = VolumeSpecificationProperty
+        {throughput = Prelude.pure newValue, ..}
+instance Property "VolumeType" VolumeSpecificationProperty where
+  type PropertyType "VolumeType" VolumeSpecificationProperty = Value Prelude.Text
+  set newValue VolumeSpecificationProperty {..}
+    = VolumeSpecificationProperty {volumeType = newValue, ..}
diff --git a/gen/Stratosphere/EMR/InstanceGroupConfig/VolumeSpecificationProperty.hs-boot b/gen/Stratosphere/EMR/InstanceGroupConfig/VolumeSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/InstanceGroupConfig/VolumeSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.InstanceGroupConfig.VolumeSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VolumeSpecificationProperty :: Prelude.Type
+instance ToResourceProperties VolumeSpecificationProperty
+instance Prelude.Eq VolumeSpecificationProperty
+instance Prelude.Show VolumeSpecificationProperty
+instance JSON.ToJSON VolumeSpecificationProperty
diff --git a/gen/Stratosphere/EMR/SecurityConfiguration.hs b/gen/Stratosphere/EMR/SecurityConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/SecurityConfiguration.hs
@@ -0,0 +1,46 @@
+module Stratosphere.EMR.SecurityConfiguration (
+        SecurityConfiguration(..), mkSecurityConfiguration
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SecurityConfiguration
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-securityconfiguration.html>
+    SecurityConfiguration {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-securityconfiguration.html#cfn-emr-securityconfiguration-name>
+                           name :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-securityconfiguration.html#cfn-emr-securityconfiguration-securityconfiguration>
+                           securityConfiguration :: JSON.Object}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSecurityConfiguration :: JSON.Object -> SecurityConfiguration
+mkSecurityConfiguration securityConfiguration
+  = SecurityConfiguration
+      {haddock_workaround_ = (),
+       securityConfiguration = securityConfiguration,
+       name = Prelude.Nothing}
+instance ToResourceProperties SecurityConfiguration where
+  toResourceProperties SecurityConfiguration {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::SecurityConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SecurityConfiguration" JSON..= securityConfiguration]
+                           (Prelude.catMaybes [(JSON..=) "Name" Prelude.<$> name]))}
+instance JSON.ToJSON SecurityConfiguration where
+  toJSON SecurityConfiguration {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SecurityConfiguration" JSON..= securityConfiguration]
+              (Prelude.catMaybes [(JSON..=) "Name" Prelude.<$> name])))
+instance Property "Name" SecurityConfiguration where
+  type PropertyType "Name" SecurityConfiguration = Value Prelude.Text
+  set newValue SecurityConfiguration {..}
+    = SecurityConfiguration {name = Prelude.pure newValue, ..}
+instance Property "SecurityConfiguration" SecurityConfiguration where
+  type PropertyType "SecurityConfiguration" SecurityConfiguration = JSON.Object
+  set newValue SecurityConfiguration {..}
+    = SecurityConfiguration {securityConfiguration = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Step.hs b/gen/Stratosphere/EMR/Step.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Step.hs
@@ -0,0 +1,54 @@
+module Stratosphere.EMR.Step (
+        module Exports, Step(..), mkStep
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Step.HadoopJarStepConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Step
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-step.html>
+    Step {haddock_workaround_ :: (),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-step.html#cfn-emr-step-actiononfailure>
+          actionOnFailure :: (Value Prelude.Text),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-step.html#cfn-emr-step-hadoopjarstep>
+          hadoopJarStep :: HadoopJarStepConfigProperty,
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-step.html#cfn-emr-step-jobflowid>
+          jobFlowId :: (Value Prelude.Text),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-step.html#cfn-emr-step-name>
+          name :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStep ::
+  Value Prelude.Text
+  -> HadoopJarStepConfigProperty
+     -> Value Prelude.Text -> Value Prelude.Text -> Step
+mkStep actionOnFailure hadoopJarStep jobFlowId name
+  = Step
+      {haddock_workaround_ = (), actionOnFailure = actionOnFailure,
+       hadoopJarStep = hadoopJarStep, jobFlowId = jobFlowId, name = name}
+instance ToResourceProperties Step where
+  toResourceProperties Step {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Step", supportsTags = Prelude.False,
+         properties = ["ActionOnFailure" JSON..= actionOnFailure,
+                       "HadoopJarStep" JSON..= hadoopJarStep,
+                       "JobFlowId" JSON..= jobFlowId, "Name" JSON..= name]}
+instance JSON.ToJSON Step where
+  toJSON Step {..}
+    = JSON.object
+        ["ActionOnFailure" JSON..= actionOnFailure,
+         "HadoopJarStep" JSON..= hadoopJarStep,
+         "JobFlowId" JSON..= jobFlowId, "Name" JSON..= name]
+instance Property "ActionOnFailure" Step where
+  type PropertyType "ActionOnFailure" Step = Value Prelude.Text
+  set newValue Step {..} = Step {actionOnFailure = newValue, ..}
+instance Property "HadoopJarStep" Step where
+  type PropertyType "HadoopJarStep" Step = HadoopJarStepConfigProperty
+  set newValue Step {..} = Step {hadoopJarStep = newValue, ..}
+instance Property "JobFlowId" Step where
+  type PropertyType "JobFlowId" Step = Value Prelude.Text
+  set newValue Step {..} = Step {jobFlowId = newValue, ..}
+instance Property "Name" Step where
+  type PropertyType "Name" Step = Value Prelude.Text
+  set newValue Step {..} = Step {name = newValue, ..}
diff --git a/gen/Stratosphere/EMR/Step/HadoopJarStepConfigProperty.hs b/gen/Stratosphere/EMR/Step/HadoopJarStepConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Step/HadoopJarStepConfigProperty.hs
@@ -0,0 +1,68 @@
+module Stratosphere.EMR.Step.HadoopJarStepConfigProperty (
+        module Exports, HadoopJarStepConfigProperty(..),
+        mkHadoopJarStepConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EMR.Step.KeyValueProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data HadoopJarStepConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-step-hadoopjarstepconfig.html>
+    HadoopJarStepConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-step-hadoopjarstepconfig.html#cfn-emr-step-hadoopjarstepconfig-args>
+                                 args :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-step-hadoopjarstepconfig.html#cfn-emr-step-hadoopjarstepconfig-jar>
+                                 jar :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-step-hadoopjarstepconfig.html#cfn-emr-step-hadoopjarstepconfig-mainclass>
+                                 mainClass :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-step-hadoopjarstepconfig.html#cfn-emr-step-hadoopjarstepconfig-stepproperties>
+                                 stepProperties :: (Prelude.Maybe [KeyValueProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHadoopJarStepConfigProperty ::
+  Value Prelude.Text -> HadoopJarStepConfigProperty
+mkHadoopJarStepConfigProperty jar
+  = HadoopJarStepConfigProperty
+      {haddock_workaround_ = (), jar = jar, args = Prelude.Nothing,
+       mainClass = Prelude.Nothing, stepProperties = Prelude.Nothing}
+instance ToResourceProperties HadoopJarStepConfigProperty where
+  toResourceProperties HadoopJarStepConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Step.HadoopJarStepConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Jar" JSON..= jar]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Args" Prelude.<$> args,
+                               (JSON..=) "MainClass" Prelude.<$> mainClass,
+                               (JSON..=) "StepProperties" Prelude.<$> stepProperties]))}
+instance JSON.ToJSON HadoopJarStepConfigProperty where
+  toJSON HadoopJarStepConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Jar" JSON..= jar]
+              (Prelude.catMaybes
+                 [(JSON..=) "Args" Prelude.<$> args,
+                  (JSON..=) "MainClass" Prelude.<$> mainClass,
+                  (JSON..=) "StepProperties" Prelude.<$> stepProperties])))
+instance Property "Args" HadoopJarStepConfigProperty where
+  type PropertyType "Args" HadoopJarStepConfigProperty = ValueList Prelude.Text
+  set newValue HadoopJarStepConfigProperty {..}
+    = HadoopJarStepConfigProperty {args = Prelude.pure newValue, ..}
+instance Property "Jar" HadoopJarStepConfigProperty where
+  type PropertyType "Jar" HadoopJarStepConfigProperty = Value Prelude.Text
+  set newValue HadoopJarStepConfigProperty {..}
+    = HadoopJarStepConfigProperty {jar = newValue, ..}
+instance Property "MainClass" HadoopJarStepConfigProperty where
+  type PropertyType "MainClass" HadoopJarStepConfigProperty = Value Prelude.Text
+  set newValue HadoopJarStepConfigProperty {..}
+    = HadoopJarStepConfigProperty
+        {mainClass = Prelude.pure newValue, ..}
+instance Property "StepProperties" HadoopJarStepConfigProperty where
+  type PropertyType "StepProperties" HadoopJarStepConfigProperty = [KeyValueProperty]
+  set newValue HadoopJarStepConfigProperty {..}
+    = HadoopJarStepConfigProperty
+        {stepProperties = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Step/HadoopJarStepConfigProperty.hs-boot b/gen/Stratosphere/EMR/Step/HadoopJarStepConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Step/HadoopJarStepConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Step.HadoopJarStepConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HadoopJarStepConfigProperty :: Prelude.Type
+instance ToResourceProperties HadoopJarStepConfigProperty
+instance Prelude.Eq HadoopJarStepConfigProperty
+instance Prelude.Show HadoopJarStepConfigProperty
+instance JSON.ToJSON HadoopJarStepConfigProperty
diff --git a/gen/Stratosphere/EMR/Step/KeyValueProperty.hs b/gen/Stratosphere/EMR/Step/KeyValueProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Step/KeyValueProperty.hs
@@ -0,0 +1,44 @@
+module Stratosphere.EMR.Step.KeyValueProperty (
+        KeyValueProperty(..), mkKeyValueProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KeyValueProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-step-keyvalue.html>
+    KeyValueProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-step-keyvalue.html#cfn-emr-step-keyvalue-key>
+                      key :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-step-keyvalue.html#cfn-emr-step-keyvalue-value>
+                      value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKeyValueProperty :: KeyValueProperty
+mkKeyValueProperty
+  = KeyValueProperty
+      {haddock_workaround_ = (), key = Prelude.Nothing,
+       value = Prelude.Nothing}
+instance ToResourceProperties KeyValueProperty where
+  toResourceProperties KeyValueProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Step.KeyValue", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Key" Prelude.<$> key,
+                            (JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON KeyValueProperty where
+  toJSON KeyValueProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Key" Prelude.<$> key,
+               (JSON..=) "Value" Prelude.<$> value]))
+instance Property "Key" KeyValueProperty where
+  type PropertyType "Key" KeyValueProperty = Value Prelude.Text
+  set newValue KeyValueProperty {..}
+    = KeyValueProperty {key = Prelude.pure newValue, ..}
+instance Property "Value" KeyValueProperty where
+  type PropertyType "Value" KeyValueProperty = Value Prelude.Text
+  set newValue KeyValueProperty {..}
+    = KeyValueProperty {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EMR/Step/KeyValueProperty.hs-boot b/gen/Stratosphere/EMR/Step/KeyValueProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Step/KeyValueProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EMR.Step.KeyValueProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data KeyValueProperty :: Prelude.Type
+instance ToResourceProperties KeyValueProperty
+instance Prelude.Eq KeyValueProperty
+instance Prelude.Show KeyValueProperty
+instance JSON.ToJSON KeyValueProperty
diff --git a/gen/Stratosphere/EMR/Studio.hs b/gen/Stratosphere/EMR/Studio.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/Studio.hs
@@ -0,0 +1,188 @@
+module Stratosphere.EMR.Studio (
+        Studio(..), mkStudio
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Studio
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html>
+    Studio {haddock_workaround_ :: (),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-authmode>
+            authMode :: (Value Prelude.Text),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-defaults3location>
+            defaultS3Location :: (Value Prelude.Text),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-description>
+            description :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-encryptionkeyarn>
+            encryptionKeyArn :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-enginesecuritygroupid>
+            engineSecurityGroupId :: (Value Prelude.Text),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-idcinstancearn>
+            idcInstanceArn :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-idcuserassignment>
+            idcUserAssignment :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-idpauthurl>
+            idpAuthUrl :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-idprelaystateparametername>
+            idpRelayStateParameterName :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-name>
+            name :: (Value Prelude.Text),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-servicerole>
+            serviceRole :: (Value Prelude.Text),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-subnetids>
+            subnetIds :: (ValueList Prelude.Text),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-tags>
+            tags :: (Prelude.Maybe [Tag]),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-trustedidentitypropagationenabled>
+            trustedIdentityPropagationEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-userrole>
+            userRole :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-vpcid>
+            vpcId :: (Value Prelude.Text),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-workspacesecuritygroupid>
+            workspaceSecurityGroupId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStudio ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text
+        -> Value Prelude.Text
+           -> Value Prelude.Text
+              -> ValueList Prelude.Text
+                 -> Value Prelude.Text -> Value Prelude.Text -> Studio
+mkStudio
+  authMode
+  defaultS3Location
+  engineSecurityGroupId
+  name
+  serviceRole
+  subnetIds
+  vpcId
+  workspaceSecurityGroupId
+  = Studio
+      {haddock_workaround_ = (), authMode = authMode,
+       defaultS3Location = defaultS3Location,
+       engineSecurityGroupId = engineSecurityGroupId, name = name,
+       serviceRole = serviceRole, subnetIds = subnetIds, vpcId = vpcId,
+       workspaceSecurityGroupId = workspaceSecurityGroupId,
+       description = Prelude.Nothing, encryptionKeyArn = Prelude.Nothing,
+       idcInstanceArn = Prelude.Nothing,
+       idcUserAssignment = Prelude.Nothing, idpAuthUrl = Prelude.Nothing,
+       idpRelayStateParameterName = Prelude.Nothing,
+       tags = Prelude.Nothing,
+       trustedIdentityPropagationEnabled = Prelude.Nothing,
+       userRole = Prelude.Nothing}
+instance ToResourceProperties Studio where
+  toResourceProperties Studio {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::Studio", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AuthMode" JSON..= authMode,
+                            "DefaultS3Location" JSON..= defaultS3Location,
+                            "EngineSecurityGroupId" JSON..= engineSecurityGroupId,
+                            "Name" JSON..= name, "ServiceRole" JSON..= serviceRole,
+                            "SubnetIds" JSON..= subnetIds, "VpcId" JSON..= vpcId,
+                            "WorkspaceSecurityGroupId" JSON..= workspaceSecurityGroupId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "EncryptionKeyArn" Prelude.<$> encryptionKeyArn,
+                               (JSON..=) "IdcInstanceArn" Prelude.<$> idcInstanceArn,
+                               (JSON..=) "IdcUserAssignment" Prelude.<$> idcUserAssignment,
+                               (JSON..=) "IdpAuthUrl" Prelude.<$> idpAuthUrl,
+                               (JSON..=) "IdpRelayStateParameterName"
+                                 Prelude.<$> idpRelayStateParameterName,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "TrustedIdentityPropagationEnabled"
+                                 Prelude.<$> trustedIdentityPropagationEnabled,
+                               (JSON..=) "UserRole" Prelude.<$> userRole]))}
+instance JSON.ToJSON Studio where
+  toJSON Studio {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AuthMode" JSON..= authMode,
+               "DefaultS3Location" JSON..= defaultS3Location,
+               "EngineSecurityGroupId" JSON..= engineSecurityGroupId,
+               "Name" JSON..= name, "ServiceRole" JSON..= serviceRole,
+               "SubnetIds" JSON..= subnetIds, "VpcId" JSON..= vpcId,
+               "WorkspaceSecurityGroupId" JSON..= workspaceSecurityGroupId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "EncryptionKeyArn" Prelude.<$> encryptionKeyArn,
+                  (JSON..=) "IdcInstanceArn" Prelude.<$> idcInstanceArn,
+                  (JSON..=) "IdcUserAssignment" Prelude.<$> idcUserAssignment,
+                  (JSON..=) "IdpAuthUrl" Prelude.<$> idpAuthUrl,
+                  (JSON..=) "IdpRelayStateParameterName"
+                    Prelude.<$> idpRelayStateParameterName,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "TrustedIdentityPropagationEnabled"
+                    Prelude.<$> trustedIdentityPropagationEnabled,
+                  (JSON..=) "UserRole" Prelude.<$> userRole])))
+instance Property "AuthMode" Studio where
+  type PropertyType "AuthMode" Studio = Value Prelude.Text
+  set newValue Studio {..} = Studio {authMode = newValue, ..}
+instance Property "DefaultS3Location" Studio where
+  type PropertyType "DefaultS3Location" Studio = Value Prelude.Text
+  set newValue Studio {..}
+    = Studio {defaultS3Location = newValue, ..}
+instance Property "Description" Studio where
+  type PropertyType "Description" Studio = Value Prelude.Text
+  set newValue Studio {..}
+    = Studio {description = Prelude.pure newValue, ..}
+instance Property "EncryptionKeyArn" Studio where
+  type PropertyType "EncryptionKeyArn" Studio = Value Prelude.Text
+  set newValue Studio {..}
+    = Studio {encryptionKeyArn = Prelude.pure newValue, ..}
+instance Property "EngineSecurityGroupId" Studio where
+  type PropertyType "EngineSecurityGroupId" Studio = Value Prelude.Text
+  set newValue Studio {..}
+    = Studio {engineSecurityGroupId = newValue, ..}
+instance Property "IdcInstanceArn" Studio where
+  type PropertyType "IdcInstanceArn" Studio = Value Prelude.Text
+  set newValue Studio {..}
+    = Studio {idcInstanceArn = Prelude.pure newValue, ..}
+instance Property "IdcUserAssignment" Studio where
+  type PropertyType "IdcUserAssignment" Studio = Value Prelude.Text
+  set newValue Studio {..}
+    = Studio {idcUserAssignment = Prelude.pure newValue, ..}
+instance Property "IdpAuthUrl" Studio where
+  type PropertyType "IdpAuthUrl" Studio = Value Prelude.Text
+  set newValue Studio {..}
+    = Studio {idpAuthUrl = Prelude.pure newValue, ..}
+instance Property "IdpRelayStateParameterName" Studio where
+  type PropertyType "IdpRelayStateParameterName" Studio = Value Prelude.Text
+  set newValue Studio {..}
+    = Studio {idpRelayStateParameterName = Prelude.pure newValue, ..}
+instance Property "Name" Studio where
+  type PropertyType "Name" Studio = Value Prelude.Text
+  set newValue Studio {..} = Studio {name = newValue, ..}
+instance Property "ServiceRole" Studio where
+  type PropertyType "ServiceRole" Studio = Value Prelude.Text
+  set newValue Studio {..} = Studio {serviceRole = newValue, ..}
+instance Property "SubnetIds" Studio where
+  type PropertyType "SubnetIds" Studio = ValueList Prelude.Text
+  set newValue Studio {..} = Studio {subnetIds = newValue, ..}
+instance Property "Tags" Studio where
+  type PropertyType "Tags" Studio = [Tag]
+  set newValue Studio {..}
+    = Studio {tags = Prelude.pure newValue, ..}
+instance Property "TrustedIdentityPropagationEnabled" Studio where
+  type PropertyType "TrustedIdentityPropagationEnabled" Studio = Value Prelude.Bool
+  set newValue Studio {..}
+    = Studio
+        {trustedIdentityPropagationEnabled = Prelude.pure newValue, ..}
+instance Property "UserRole" Studio where
+  type PropertyType "UserRole" Studio = Value Prelude.Text
+  set newValue Studio {..}
+    = Studio {userRole = Prelude.pure newValue, ..}
+instance Property "VpcId" Studio where
+  type PropertyType "VpcId" Studio = Value Prelude.Text
+  set newValue Studio {..} = Studio {vpcId = newValue, ..}
+instance Property "WorkspaceSecurityGroupId" Studio where
+  type PropertyType "WorkspaceSecurityGroupId" Studio = Value Prelude.Text
+  set newValue Studio {..}
+    = Studio {workspaceSecurityGroupId = newValue, ..}
diff --git a/gen/Stratosphere/EMR/StudioSessionMapping.hs b/gen/Stratosphere/EMR/StudioSessionMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/StudioSessionMapping.hs
@@ -0,0 +1,65 @@
+module Stratosphere.EMR.StudioSessionMapping (
+        StudioSessionMapping(..), mkStudioSessionMapping
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data StudioSessionMapping
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studiosessionmapping.html>
+    StudioSessionMapping {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studiosessionmapping.html#cfn-emr-studiosessionmapping-identityname>
+                          identityName :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studiosessionmapping.html#cfn-emr-studiosessionmapping-identitytype>
+                          identityType :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studiosessionmapping.html#cfn-emr-studiosessionmapping-sessionpolicyarn>
+                          sessionPolicyArn :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studiosessionmapping.html#cfn-emr-studiosessionmapping-studioid>
+                          studioId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStudioSessionMapping ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> Value Prelude.Text -> StudioSessionMapping
+mkStudioSessionMapping
+  identityName
+  identityType
+  sessionPolicyArn
+  studioId
+  = StudioSessionMapping
+      {haddock_workaround_ = (), identityName = identityName,
+       identityType = identityType, sessionPolicyArn = sessionPolicyArn,
+       studioId = studioId}
+instance ToResourceProperties StudioSessionMapping where
+  toResourceProperties StudioSessionMapping {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::StudioSessionMapping",
+         supportsTags = Prelude.False,
+         properties = ["IdentityName" JSON..= identityName,
+                       "IdentityType" JSON..= identityType,
+                       "SessionPolicyArn" JSON..= sessionPolicyArn,
+                       "StudioId" JSON..= studioId]}
+instance JSON.ToJSON StudioSessionMapping where
+  toJSON StudioSessionMapping {..}
+    = JSON.object
+        ["IdentityName" JSON..= identityName,
+         "IdentityType" JSON..= identityType,
+         "SessionPolicyArn" JSON..= sessionPolicyArn,
+         "StudioId" JSON..= studioId]
+instance Property "IdentityName" StudioSessionMapping where
+  type PropertyType "IdentityName" StudioSessionMapping = Value Prelude.Text
+  set newValue StudioSessionMapping {..}
+    = StudioSessionMapping {identityName = newValue, ..}
+instance Property "IdentityType" StudioSessionMapping where
+  type PropertyType "IdentityType" StudioSessionMapping = Value Prelude.Text
+  set newValue StudioSessionMapping {..}
+    = StudioSessionMapping {identityType = newValue, ..}
+instance Property "SessionPolicyArn" StudioSessionMapping where
+  type PropertyType "SessionPolicyArn" StudioSessionMapping = Value Prelude.Text
+  set newValue StudioSessionMapping {..}
+    = StudioSessionMapping {sessionPolicyArn = newValue, ..}
+instance Property "StudioId" StudioSessionMapping where
+  type PropertyType "StudioId" StudioSessionMapping = Value Prelude.Text
+  set newValue StudioSessionMapping {..}
+    = StudioSessionMapping {studioId = newValue, ..}
diff --git a/gen/Stratosphere/EMR/WALWorkspace.hs b/gen/Stratosphere/EMR/WALWorkspace.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EMR/WALWorkspace.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EMR.WALWorkspace (
+        WALWorkspace(..), mkWALWorkspace
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data WALWorkspace
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-walworkspace.html>
+    WALWorkspace {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-walworkspace.html#cfn-emr-walworkspace-tags>
+                  tags :: (Prelude.Maybe [Tag]),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-walworkspace.html#cfn-emr-walworkspace-walworkspacename>
+                  wALWorkspaceName :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkWALWorkspace :: WALWorkspace
+mkWALWorkspace
+  = WALWorkspace
+      {haddock_workaround_ = (), tags = Prelude.Nothing,
+       wALWorkspaceName = Prelude.Nothing}
+instance ToResourceProperties WALWorkspace where
+  toResourceProperties WALWorkspace {..}
+    = ResourceProperties
+        {awsType = "AWS::EMR::WALWorkspace", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "WALWorkspaceName" Prelude.<$> wALWorkspaceName])}
+instance JSON.ToJSON WALWorkspace where
+  toJSON WALWorkspace {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "WALWorkspaceName" Prelude.<$> wALWorkspaceName]))
+instance Property "Tags" WALWorkspace where
+  type PropertyType "Tags" WALWorkspace = [Tag]
+  set newValue WALWorkspace {..}
+    = WALWorkspace {tags = Prelude.pure newValue, ..}
+instance Property "WALWorkspaceName" WALWorkspace where
+  type PropertyType "WALWorkspaceName" WALWorkspace = Value Prelude.Text
+  set newValue WALWorkspace {..}
+    = WALWorkspace {wALWorkspaceName = Prelude.pure newValue, ..}
diff --git a/stratosphere-emr.cabal b/stratosphere-emr.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-emr.cabal
@@ -0,0 +1,141 @@
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.38.2.
+--
+-- see: https://github.com/sol/hpack
+
+name:           stratosphere-emr
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS EMR.
+description:    Integration into stratosphere to generate resources and properties for AWS EMR
+category:       AWS, Cloud, EMR
+stability:      experimental
+homepage:       https://github.com/mbj/stratosphere#readme
+bug-reports:    https://github.com/mbj/stratosphere/issues
+maintainer:     Markus Schirp
+license:        MIT
+license-file:   LICENSE.md
+build-type:     Simple
+
+source-repository head
+  type: git
+  location: https://github.com/mbj/stratosphere
+
+flag development
+  description: Run GHC with development flags
+  manual: True
+  default: False
+
+library
+  exposed-modules:
+      Stratosphere.EMR.Cluster
+      Stratosphere.EMR.Cluster.ApplicationProperty
+      Stratosphere.EMR.Cluster.AutoScalingPolicyProperty
+      Stratosphere.EMR.Cluster.AutoTerminationPolicyProperty
+      Stratosphere.EMR.Cluster.BootstrapActionConfigProperty
+      Stratosphere.EMR.Cluster.CloudWatchAlarmDefinitionProperty
+      Stratosphere.EMR.Cluster.ComputeLimitsProperty
+      Stratosphere.EMR.Cluster.ConfigurationProperty
+      Stratosphere.EMR.Cluster.EbsBlockDeviceConfigProperty
+      Stratosphere.EMR.Cluster.EbsConfigurationProperty
+      Stratosphere.EMR.Cluster.HadoopJarStepConfigProperty
+      Stratosphere.EMR.Cluster.InstanceFleetConfigProperty
+      Stratosphere.EMR.Cluster.InstanceFleetProvisioningSpecificationsProperty
+      Stratosphere.EMR.Cluster.InstanceFleetResizingSpecificationsProperty
+      Stratosphere.EMR.Cluster.InstanceGroupConfigProperty
+      Stratosphere.EMR.Cluster.InstanceTypeConfigProperty
+      Stratosphere.EMR.Cluster.JobFlowInstancesConfigProperty
+      Stratosphere.EMR.Cluster.KerberosAttributesProperty
+      Stratosphere.EMR.Cluster.KeyValueProperty
+      Stratosphere.EMR.Cluster.ManagedScalingPolicyProperty
+      Stratosphere.EMR.Cluster.MetricDimensionProperty
+      Stratosphere.EMR.Cluster.OnDemandCapacityReservationOptionsProperty
+      Stratosphere.EMR.Cluster.OnDemandProvisioningSpecificationProperty
+      Stratosphere.EMR.Cluster.OnDemandResizingSpecificationProperty
+      Stratosphere.EMR.Cluster.PlacementGroupConfigProperty
+      Stratosphere.EMR.Cluster.PlacementTypeProperty
+      Stratosphere.EMR.Cluster.ScalingActionProperty
+      Stratosphere.EMR.Cluster.ScalingConstraintsProperty
+      Stratosphere.EMR.Cluster.ScalingRuleProperty
+      Stratosphere.EMR.Cluster.ScalingTriggerProperty
+      Stratosphere.EMR.Cluster.ScriptBootstrapActionConfigProperty
+      Stratosphere.EMR.Cluster.SimpleScalingPolicyConfigurationProperty
+      Stratosphere.EMR.Cluster.SpotProvisioningSpecificationProperty
+      Stratosphere.EMR.Cluster.SpotResizingSpecificationProperty
+      Stratosphere.EMR.Cluster.StepConfigProperty
+      Stratosphere.EMR.Cluster.VolumeSpecificationProperty
+      Stratosphere.EMR.InstanceFleetConfig
+      Stratosphere.EMR.InstanceFleetConfig.ConfigurationProperty
+      Stratosphere.EMR.InstanceFleetConfig.EbsBlockDeviceConfigProperty
+      Stratosphere.EMR.InstanceFleetConfig.EbsConfigurationProperty
+      Stratosphere.EMR.InstanceFleetConfig.InstanceFleetProvisioningSpecificationsProperty
+      Stratosphere.EMR.InstanceFleetConfig.InstanceFleetResizingSpecificationsProperty
+      Stratosphere.EMR.InstanceFleetConfig.InstanceTypeConfigProperty
+      Stratosphere.EMR.InstanceFleetConfig.OnDemandCapacityReservationOptionsProperty
+      Stratosphere.EMR.InstanceFleetConfig.OnDemandProvisioningSpecificationProperty
+      Stratosphere.EMR.InstanceFleetConfig.OnDemandResizingSpecificationProperty
+      Stratosphere.EMR.InstanceFleetConfig.SpotProvisioningSpecificationProperty
+      Stratosphere.EMR.InstanceFleetConfig.SpotResizingSpecificationProperty
+      Stratosphere.EMR.InstanceFleetConfig.VolumeSpecificationProperty
+      Stratosphere.EMR.InstanceGroupConfig
+      Stratosphere.EMR.InstanceGroupConfig.AutoScalingPolicyProperty
+      Stratosphere.EMR.InstanceGroupConfig.CloudWatchAlarmDefinitionProperty
+      Stratosphere.EMR.InstanceGroupConfig.ConfigurationProperty
+      Stratosphere.EMR.InstanceGroupConfig.EbsBlockDeviceConfigProperty
+      Stratosphere.EMR.InstanceGroupConfig.EbsConfigurationProperty
+      Stratosphere.EMR.InstanceGroupConfig.MetricDimensionProperty
+      Stratosphere.EMR.InstanceGroupConfig.ScalingActionProperty
+      Stratosphere.EMR.InstanceGroupConfig.ScalingConstraintsProperty
+      Stratosphere.EMR.InstanceGroupConfig.ScalingRuleProperty
+      Stratosphere.EMR.InstanceGroupConfig.ScalingTriggerProperty
+      Stratosphere.EMR.InstanceGroupConfig.SimpleScalingPolicyConfigurationProperty
+      Stratosphere.EMR.InstanceGroupConfig.VolumeSpecificationProperty
+      Stratosphere.EMR.SecurityConfiguration
+      Stratosphere.EMR.Step
+      Stratosphere.EMR.Step.HadoopJarStepConfigProperty
+      Stratosphere.EMR.Step.KeyValueProperty
+      Stratosphere.EMR.Studio
+      Stratosphere.EMR.StudioSessionMapping
+      Stratosphere.EMR.WALWorkspace
+  other-modules:
+      Paths_stratosphere_emr
+  hs-source-dirs:
+      gen
+  default-extensions:
+      DataKinds
+      DeriveGeneric
+      DerivingStrategies
+      DerivingVia
+      DuplicateRecordFields
+      FlexibleContexts
+      FlexibleInstances
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      LambdaCase
+      MultiParamTypeClasses
+      NoFieldSelectors
+      NoImplicitPrelude
+      NumericUnderscores
+      OverloadedLists
+      OverloadedRecordDot
+      OverloadedStrings
+      PolyKinds
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      Strict
+      TemplateHaskell
+      TupleSections
+      TypeApplications
+      TypeFamilies
+  ghc-options: -Wall -Wcompat -Widentities -Wimplicit-prelude -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-local-signatures -Wmissing-signatures -Wmonomorphism-restriction -Wredundant-constraints -fhide-source-paths -funbox-strict-fields -optP-Wno-nonportable-include-path -Wno-unused-imports
+  build-depends:
+      aeson ==2.*
+    , base >=4.8 && <4.22
+    , stratosphere ==1.0.0
+  default-language: Haskell2010
+  if flag(development)
+    ghc-options: -Werror
+  else
+    ghc-options: -Wwarn
