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/ECS/CapacityProvider.hs b/gen/Stratosphere/ECS/CapacityProvider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider.hs
@@ -0,0 +1,81 @@
+module Stratosphere.ECS.CapacityProvider (
+        module Exports, CapacityProvider(..), mkCapacityProvider
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.CapacityProvider.AutoScalingGroupProviderProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.CapacityProvider.ManagedInstancesProviderProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data CapacityProvider
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-capacityprovider.html>
+    CapacityProvider {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-capacityprovider.html#cfn-ecs-capacityprovider-autoscalinggroupprovider>
+                      autoScalingGroupProvider :: (Prelude.Maybe AutoScalingGroupProviderProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-capacityprovider.html#cfn-ecs-capacityprovider-clustername>
+                      clusterName :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-capacityprovider.html#cfn-ecs-capacityprovider-managedinstancesprovider>
+                      managedInstancesProvider :: (Prelude.Maybe ManagedInstancesProviderProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-capacityprovider.html#cfn-ecs-capacityprovider-name>
+                      name :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-capacityprovider.html#cfn-ecs-capacityprovider-tags>
+                      tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityProvider :: CapacityProvider
+mkCapacityProvider
+  = CapacityProvider
+      {haddock_workaround_ = (),
+       autoScalingGroupProvider = Prelude.Nothing,
+       clusterName = Prelude.Nothing,
+       managedInstancesProvider = Prelude.Nothing, name = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties CapacityProvider where
+  toResourceProperties CapacityProvider {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AutoScalingGroupProvider"
+                              Prelude.<$> autoScalingGroupProvider,
+                            (JSON..=) "ClusterName" Prelude.<$> clusterName,
+                            (JSON..=) "ManagedInstancesProvider"
+                              Prelude.<$> managedInstancesProvider,
+                            (JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON CapacityProvider where
+  toJSON CapacityProvider {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AutoScalingGroupProvider"
+                 Prelude.<$> autoScalingGroupProvider,
+               (JSON..=) "ClusterName" Prelude.<$> clusterName,
+               (JSON..=) "ManagedInstancesProvider"
+                 Prelude.<$> managedInstancesProvider,
+               (JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "AutoScalingGroupProvider" CapacityProvider where
+  type PropertyType "AutoScalingGroupProvider" CapacityProvider = AutoScalingGroupProviderProperty
+  set newValue CapacityProvider {..}
+    = CapacityProvider
+        {autoScalingGroupProvider = Prelude.pure newValue, ..}
+instance Property "ClusterName" CapacityProvider where
+  type PropertyType "ClusterName" CapacityProvider = Value Prelude.Text
+  set newValue CapacityProvider {..}
+    = CapacityProvider {clusterName = Prelude.pure newValue, ..}
+instance Property "ManagedInstancesProvider" CapacityProvider where
+  type PropertyType "ManagedInstancesProvider" CapacityProvider = ManagedInstancesProviderProperty
+  set newValue CapacityProvider {..}
+    = CapacityProvider
+        {managedInstancesProvider = Prelude.pure newValue, ..}
+instance Property "Name" CapacityProvider where
+  type PropertyType "Name" CapacityProvider = Value Prelude.Text
+  set newValue CapacityProvider {..}
+    = CapacityProvider {name = Prelude.pure newValue, ..}
+instance Property "Tags" CapacityProvider where
+  type PropertyType "Tags" CapacityProvider = [Tag]
+  set newValue CapacityProvider {..}
+    = CapacityProvider {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/AcceleratorCountRequestProperty.hs b/gen/Stratosphere/ECS/CapacityProvider/AcceleratorCountRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/AcceleratorCountRequestProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.ECS.CapacityProvider.AcceleratorCountRequestProperty (
+        AcceleratorCountRequestProperty(..),
+        mkAcceleratorCountRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AcceleratorCountRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-acceleratorcountrequest.html>
+    AcceleratorCountRequestProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-acceleratorcountrequest.html#cfn-ecs-capacityprovider-acceleratorcountrequest-max>
+                                     max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-acceleratorcountrequest.html#cfn-ecs-capacityprovider-acceleratorcountrequest-min>
+                                     min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAcceleratorCountRequestProperty ::
+  AcceleratorCountRequestProperty
+mkAcceleratorCountRequestProperty
+  = AcceleratorCountRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties AcceleratorCountRequestProperty where
+  toResourceProperties AcceleratorCountRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider.AcceleratorCountRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON AcceleratorCountRequestProperty where
+  toJSON AcceleratorCountRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" AcceleratorCountRequestProperty where
+  type PropertyType "Max" AcceleratorCountRequestProperty = Value Prelude.Integer
+  set newValue AcceleratorCountRequestProperty {..}
+    = AcceleratorCountRequestProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" AcceleratorCountRequestProperty where
+  type PropertyType "Min" AcceleratorCountRequestProperty = Value Prelude.Integer
+  set newValue AcceleratorCountRequestProperty {..}
+    = AcceleratorCountRequestProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/AcceleratorCountRequestProperty.hs-boot b/gen/Stratosphere/ECS/CapacityProvider/AcceleratorCountRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/AcceleratorCountRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.CapacityProvider.AcceleratorCountRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AcceleratorCountRequestProperty :: Prelude.Type
+instance ToResourceProperties AcceleratorCountRequestProperty
+instance Prelude.Eq AcceleratorCountRequestProperty
+instance Prelude.Show AcceleratorCountRequestProperty
+instance JSON.ToJSON AcceleratorCountRequestProperty
diff --git a/gen/Stratosphere/ECS/CapacityProvider/AcceleratorTotalMemoryMiBRequestProperty.hs b/gen/Stratosphere/ECS/CapacityProvider/AcceleratorTotalMemoryMiBRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/AcceleratorTotalMemoryMiBRequestProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ECS.CapacityProvider.AcceleratorTotalMemoryMiBRequestProperty (
+        AcceleratorTotalMemoryMiBRequestProperty(..),
+        mkAcceleratorTotalMemoryMiBRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AcceleratorTotalMemoryMiBRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-acceleratortotalmemorymibrequest.html>
+    AcceleratorTotalMemoryMiBRequestProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-acceleratortotalmemorymibrequest.html#cfn-ecs-capacityprovider-acceleratortotalmemorymibrequest-max>
+                                              max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-acceleratortotalmemorymibrequest.html#cfn-ecs-capacityprovider-acceleratortotalmemorymibrequest-min>
+                                              min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAcceleratorTotalMemoryMiBRequestProperty ::
+  AcceleratorTotalMemoryMiBRequestProperty
+mkAcceleratorTotalMemoryMiBRequestProperty
+  = AcceleratorTotalMemoryMiBRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties AcceleratorTotalMemoryMiBRequestProperty where
+  toResourceProperties AcceleratorTotalMemoryMiBRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider.AcceleratorTotalMemoryMiBRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON AcceleratorTotalMemoryMiBRequestProperty where
+  toJSON AcceleratorTotalMemoryMiBRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" AcceleratorTotalMemoryMiBRequestProperty where
+  type PropertyType "Max" AcceleratorTotalMemoryMiBRequestProperty = Value Prelude.Integer
+  set newValue AcceleratorTotalMemoryMiBRequestProperty {..}
+    = AcceleratorTotalMemoryMiBRequestProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" AcceleratorTotalMemoryMiBRequestProperty where
+  type PropertyType "Min" AcceleratorTotalMemoryMiBRequestProperty = Value Prelude.Integer
+  set newValue AcceleratorTotalMemoryMiBRequestProperty {..}
+    = AcceleratorTotalMemoryMiBRequestProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/AcceleratorTotalMemoryMiBRequestProperty.hs-boot b/gen/Stratosphere/ECS/CapacityProvider/AcceleratorTotalMemoryMiBRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/AcceleratorTotalMemoryMiBRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.CapacityProvider.AcceleratorTotalMemoryMiBRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AcceleratorTotalMemoryMiBRequestProperty :: Prelude.Type
+instance ToResourceProperties AcceleratorTotalMemoryMiBRequestProperty
+instance Prelude.Eq AcceleratorTotalMemoryMiBRequestProperty
+instance Prelude.Show AcceleratorTotalMemoryMiBRequestProperty
+instance JSON.ToJSON AcceleratorTotalMemoryMiBRequestProperty
diff --git a/gen/Stratosphere/ECS/CapacityProvider/AutoScalingGroupProviderProperty.hs b/gen/Stratosphere/ECS/CapacityProvider/AutoScalingGroupProviderProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/AutoScalingGroupProviderProperty.hs
@@ -0,0 +1,75 @@
+module Stratosphere.ECS.CapacityProvider.AutoScalingGroupProviderProperty (
+        module Exports, AutoScalingGroupProviderProperty(..),
+        mkAutoScalingGroupProviderProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.CapacityProvider.ManagedScalingProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AutoScalingGroupProviderProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-autoscalinggroupprovider.html>
+    AutoScalingGroupProviderProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-autoscalinggroupprovider.html#cfn-ecs-capacityprovider-autoscalinggroupprovider-autoscalinggrouparn>
+                                      autoScalingGroupArn :: (Value Prelude.Text),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-autoscalinggroupprovider.html#cfn-ecs-capacityprovider-autoscalinggroupprovider-manageddraining>
+                                      managedDraining :: (Prelude.Maybe (Value Prelude.Text)),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-autoscalinggroupprovider.html#cfn-ecs-capacityprovider-autoscalinggroupprovider-managedscaling>
+                                      managedScaling :: (Prelude.Maybe ManagedScalingProperty),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-autoscalinggroupprovider.html#cfn-ecs-capacityprovider-autoscalinggroupprovider-managedterminationprotection>
+                                      managedTerminationProtection :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAutoScalingGroupProviderProperty ::
+  Value Prelude.Text -> AutoScalingGroupProviderProperty
+mkAutoScalingGroupProviderProperty autoScalingGroupArn
+  = AutoScalingGroupProviderProperty
+      {haddock_workaround_ = (),
+       autoScalingGroupArn = autoScalingGroupArn,
+       managedDraining = Prelude.Nothing,
+       managedScaling = Prelude.Nothing,
+       managedTerminationProtection = Prelude.Nothing}
+instance ToResourceProperties AutoScalingGroupProviderProperty where
+  toResourceProperties AutoScalingGroupProviderProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider.AutoScalingGroupProvider",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AutoScalingGroupArn" JSON..= autoScalingGroupArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ManagedDraining" Prelude.<$> managedDraining,
+                               (JSON..=) "ManagedScaling" Prelude.<$> managedScaling,
+                               (JSON..=) "ManagedTerminationProtection"
+                                 Prelude.<$> managedTerminationProtection]))}
+instance JSON.ToJSON AutoScalingGroupProviderProperty where
+  toJSON AutoScalingGroupProviderProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AutoScalingGroupArn" JSON..= autoScalingGroupArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "ManagedDraining" Prelude.<$> managedDraining,
+                  (JSON..=) "ManagedScaling" Prelude.<$> managedScaling,
+                  (JSON..=) "ManagedTerminationProtection"
+                    Prelude.<$> managedTerminationProtection])))
+instance Property "AutoScalingGroupArn" AutoScalingGroupProviderProperty where
+  type PropertyType "AutoScalingGroupArn" AutoScalingGroupProviderProperty = Value Prelude.Text
+  set newValue AutoScalingGroupProviderProperty {..}
+    = AutoScalingGroupProviderProperty
+        {autoScalingGroupArn = newValue, ..}
+instance Property "ManagedDraining" AutoScalingGroupProviderProperty where
+  type PropertyType "ManagedDraining" AutoScalingGroupProviderProperty = Value Prelude.Text
+  set newValue AutoScalingGroupProviderProperty {..}
+    = AutoScalingGroupProviderProperty
+        {managedDraining = Prelude.pure newValue, ..}
+instance Property "ManagedScaling" AutoScalingGroupProviderProperty where
+  type PropertyType "ManagedScaling" AutoScalingGroupProviderProperty = ManagedScalingProperty
+  set newValue AutoScalingGroupProviderProperty {..}
+    = AutoScalingGroupProviderProperty
+        {managedScaling = Prelude.pure newValue, ..}
+instance Property "ManagedTerminationProtection" AutoScalingGroupProviderProperty where
+  type PropertyType "ManagedTerminationProtection" AutoScalingGroupProviderProperty = Value Prelude.Text
+  set newValue AutoScalingGroupProviderProperty {..}
+    = AutoScalingGroupProviderProperty
+        {managedTerminationProtection = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/AutoScalingGroupProviderProperty.hs-boot b/gen/Stratosphere/ECS/CapacityProvider/AutoScalingGroupProviderProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/AutoScalingGroupProviderProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.CapacityProvider.AutoScalingGroupProviderProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AutoScalingGroupProviderProperty :: Prelude.Type
+instance ToResourceProperties AutoScalingGroupProviderProperty
+instance Prelude.Eq AutoScalingGroupProviderProperty
+instance Prelude.Show AutoScalingGroupProviderProperty
+instance JSON.ToJSON AutoScalingGroupProviderProperty
diff --git a/gen/Stratosphere/ECS/CapacityProvider/BaselineEbsBandwidthMbpsRequestProperty.hs b/gen/Stratosphere/ECS/CapacityProvider/BaselineEbsBandwidthMbpsRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/BaselineEbsBandwidthMbpsRequestProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ECS.CapacityProvider.BaselineEbsBandwidthMbpsRequestProperty (
+        BaselineEbsBandwidthMbpsRequestProperty(..),
+        mkBaselineEbsBandwidthMbpsRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BaselineEbsBandwidthMbpsRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-baselineebsbandwidthmbpsrequest.html>
+    BaselineEbsBandwidthMbpsRequestProperty {haddock_workaround_ :: (),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-baselineebsbandwidthmbpsrequest.html#cfn-ecs-capacityprovider-baselineebsbandwidthmbpsrequest-max>
+                                             max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-baselineebsbandwidthmbpsrequest.html#cfn-ecs-capacityprovider-baselineebsbandwidthmbpsrequest-min>
+                                             min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBaselineEbsBandwidthMbpsRequestProperty ::
+  BaselineEbsBandwidthMbpsRequestProperty
+mkBaselineEbsBandwidthMbpsRequestProperty
+  = BaselineEbsBandwidthMbpsRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties BaselineEbsBandwidthMbpsRequestProperty where
+  toResourceProperties BaselineEbsBandwidthMbpsRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider.BaselineEbsBandwidthMbpsRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON BaselineEbsBandwidthMbpsRequestProperty where
+  toJSON BaselineEbsBandwidthMbpsRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" BaselineEbsBandwidthMbpsRequestProperty where
+  type PropertyType "Max" BaselineEbsBandwidthMbpsRequestProperty = Value Prelude.Integer
+  set newValue BaselineEbsBandwidthMbpsRequestProperty {..}
+    = BaselineEbsBandwidthMbpsRequestProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" BaselineEbsBandwidthMbpsRequestProperty where
+  type PropertyType "Min" BaselineEbsBandwidthMbpsRequestProperty = Value Prelude.Integer
+  set newValue BaselineEbsBandwidthMbpsRequestProperty {..}
+    = BaselineEbsBandwidthMbpsRequestProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/BaselineEbsBandwidthMbpsRequestProperty.hs-boot b/gen/Stratosphere/ECS/CapacityProvider/BaselineEbsBandwidthMbpsRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/BaselineEbsBandwidthMbpsRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.CapacityProvider.BaselineEbsBandwidthMbpsRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BaselineEbsBandwidthMbpsRequestProperty :: Prelude.Type
+instance ToResourceProperties BaselineEbsBandwidthMbpsRequestProperty
+instance Prelude.Eq BaselineEbsBandwidthMbpsRequestProperty
+instance Prelude.Show BaselineEbsBandwidthMbpsRequestProperty
+instance JSON.ToJSON BaselineEbsBandwidthMbpsRequestProperty
diff --git a/gen/Stratosphere/ECS/CapacityProvider/InstanceLaunchTemplateProperty.hs b/gen/Stratosphere/ECS/CapacityProvider/InstanceLaunchTemplateProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/InstanceLaunchTemplateProperty.hs
@@ -0,0 +1,91 @@
+module Stratosphere.ECS.CapacityProvider.InstanceLaunchTemplateProperty (
+        module Exports, InstanceLaunchTemplateProperty(..),
+        mkInstanceLaunchTemplateProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.CapacityProvider.InstanceRequirementsRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.CapacityProvider.ManagedInstancesNetworkConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.CapacityProvider.ManagedInstancesStorageConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceLaunchTemplateProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancelaunchtemplate.html>
+    InstanceLaunchTemplateProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancelaunchtemplate.html#cfn-ecs-capacityprovider-instancelaunchtemplate-ec2instanceprofilearn>
+                                    ec2InstanceProfileArn :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancelaunchtemplate.html#cfn-ecs-capacityprovider-instancelaunchtemplate-instancerequirements>
+                                    instanceRequirements :: (Prelude.Maybe InstanceRequirementsRequestProperty),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancelaunchtemplate.html#cfn-ecs-capacityprovider-instancelaunchtemplate-monitoring>
+                                    monitoring :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancelaunchtemplate.html#cfn-ecs-capacityprovider-instancelaunchtemplate-networkconfiguration>
+                                    networkConfiguration :: ManagedInstancesNetworkConfigurationProperty,
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancelaunchtemplate.html#cfn-ecs-capacityprovider-instancelaunchtemplate-storageconfiguration>
+                                    storageConfiguration :: (Prelude.Maybe ManagedInstancesStorageConfigurationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceLaunchTemplateProperty ::
+  Value Prelude.Text
+  -> ManagedInstancesNetworkConfigurationProperty
+     -> InstanceLaunchTemplateProperty
+mkInstanceLaunchTemplateProperty
+  ec2InstanceProfileArn
+  networkConfiguration
+  = InstanceLaunchTemplateProperty
+      {haddock_workaround_ = (),
+       ec2InstanceProfileArn = ec2InstanceProfileArn,
+       networkConfiguration = networkConfiguration,
+       instanceRequirements = Prelude.Nothing,
+       monitoring = Prelude.Nothing,
+       storageConfiguration = Prelude.Nothing}
+instance ToResourceProperties InstanceLaunchTemplateProperty where
+  toResourceProperties InstanceLaunchTemplateProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider.InstanceLaunchTemplate",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Ec2InstanceProfileArn" JSON..= ec2InstanceProfileArn,
+                            "NetworkConfiguration" JSON..= networkConfiguration]
+                           (Prelude.catMaybes
+                              [(JSON..=) "InstanceRequirements" Prelude.<$> instanceRequirements,
+                               (JSON..=) "Monitoring" Prelude.<$> monitoring,
+                               (JSON..=) "StorageConfiguration"
+                                 Prelude.<$> storageConfiguration]))}
+instance JSON.ToJSON InstanceLaunchTemplateProperty where
+  toJSON InstanceLaunchTemplateProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Ec2InstanceProfileArn" JSON..= ec2InstanceProfileArn,
+               "NetworkConfiguration" JSON..= networkConfiguration]
+              (Prelude.catMaybes
+                 [(JSON..=) "InstanceRequirements" Prelude.<$> instanceRequirements,
+                  (JSON..=) "Monitoring" Prelude.<$> monitoring,
+                  (JSON..=) "StorageConfiguration"
+                    Prelude.<$> storageConfiguration])))
+instance Property "Ec2InstanceProfileArn" InstanceLaunchTemplateProperty where
+  type PropertyType "Ec2InstanceProfileArn" InstanceLaunchTemplateProperty = Value Prelude.Text
+  set newValue InstanceLaunchTemplateProperty {..}
+    = InstanceLaunchTemplateProperty
+        {ec2InstanceProfileArn = newValue, ..}
+instance Property "InstanceRequirements" InstanceLaunchTemplateProperty where
+  type PropertyType "InstanceRequirements" InstanceLaunchTemplateProperty = InstanceRequirementsRequestProperty
+  set newValue InstanceLaunchTemplateProperty {..}
+    = InstanceLaunchTemplateProperty
+        {instanceRequirements = Prelude.pure newValue, ..}
+instance Property "Monitoring" InstanceLaunchTemplateProperty where
+  type PropertyType "Monitoring" InstanceLaunchTemplateProperty = Value Prelude.Text
+  set newValue InstanceLaunchTemplateProperty {..}
+    = InstanceLaunchTemplateProperty
+        {monitoring = Prelude.pure newValue, ..}
+instance Property "NetworkConfiguration" InstanceLaunchTemplateProperty where
+  type PropertyType "NetworkConfiguration" InstanceLaunchTemplateProperty = ManagedInstancesNetworkConfigurationProperty
+  set newValue InstanceLaunchTemplateProperty {..}
+    = InstanceLaunchTemplateProperty
+        {networkConfiguration = newValue, ..}
+instance Property "StorageConfiguration" InstanceLaunchTemplateProperty where
+  type PropertyType "StorageConfiguration" InstanceLaunchTemplateProperty = ManagedInstancesStorageConfigurationProperty
+  set newValue InstanceLaunchTemplateProperty {..}
+    = InstanceLaunchTemplateProperty
+        {storageConfiguration = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/InstanceLaunchTemplateProperty.hs-boot b/gen/Stratosphere/ECS/CapacityProvider/InstanceLaunchTemplateProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/InstanceLaunchTemplateProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.CapacityProvider.InstanceLaunchTemplateProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceLaunchTemplateProperty :: Prelude.Type
+instance ToResourceProperties InstanceLaunchTemplateProperty
+instance Prelude.Eq InstanceLaunchTemplateProperty
+instance Prelude.Show InstanceLaunchTemplateProperty
+instance JSON.ToJSON InstanceLaunchTemplateProperty
diff --git a/gen/Stratosphere/ECS/CapacityProvider/InstanceRequirementsRequestProperty.hs b/gen/Stratosphere/ECS/CapacityProvider/InstanceRequirementsRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/InstanceRequirementsRequestProperty.hs
@@ -0,0 +1,298 @@
+module Stratosphere.ECS.CapacityProvider.InstanceRequirementsRequestProperty (
+        module Exports, InstanceRequirementsRequestProperty(..),
+        mkInstanceRequirementsRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.CapacityProvider.AcceleratorCountRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.CapacityProvider.AcceleratorTotalMemoryMiBRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.CapacityProvider.BaselineEbsBandwidthMbpsRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.CapacityProvider.MemoryGiBPerVCpuRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.CapacityProvider.MemoryMiBRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.CapacityProvider.NetworkBandwidthGbpsRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.CapacityProvider.NetworkInterfaceCountRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.CapacityProvider.TotalLocalStorageGBRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.CapacityProvider.VCpuCountRangeRequestProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceRequirementsRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html>
+    InstanceRequirementsRequestProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-acceleratorcount>
+                                         acceleratorCount :: (Prelude.Maybe AcceleratorCountRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-acceleratormanufacturers>
+                                         acceleratorManufacturers :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-acceleratornames>
+                                         acceleratorNames :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-acceleratortotalmemorymib>
+                                         acceleratorTotalMemoryMiB :: (Prelude.Maybe AcceleratorTotalMemoryMiBRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-acceleratortypes>
+                                         acceleratorTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-allowedinstancetypes>
+                                         allowedInstanceTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-baremetal>
+                                         bareMetal :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-baselineebsbandwidthmbps>
+                                         baselineEbsBandwidthMbps :: (Prelude.Maybe BaselineEbsBandwidthMbpsRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-burstableperformance>
+                                         burstablePerformance :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-cpumanufacturers>
+                                         cpuManufacturers :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-excludedinstancetypes>
+                                         excludedInstanceTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-instancegenerations>
+                                         instanceGenerations :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-localstorage>
+                                         localStorage :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-localstoragetypes>
+                                         localStorageTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-maxspotpriceaspercentageofoptimalondemandprice>
+                                         maxSpotPriceAsPercentageOfOptimalOnDemandPrice :: (Prelude.Maybe (Value Prelude.Integer)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-memorygibpervcpu>
+                                         memoryGiBPerVCpu :: (Prelude.Maybe MemoryGiBPerVCpuRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-memorymib>
+                                         memoryMiB :: MemoryMiBRequestProperty,
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-networkbandwidthgbps>
+                                         networkBandwidthGbps :: (Prelude.Maybe NetworkBandwidthGbpsRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-networkinterfacecount>
+                                         networkInterfaceCount :: (Prelude.Maybe NetworkInterfaceCountRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-ondemandmaxpricepercentageoverlowestprice>
+                                         onDemandMaxPricePercentageOverLowestPrice :: (Prelude.Maybe (Value Prelude.Integer)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-requirehibernatesupport>
+                                         requireHibernateSupport :: (Prelude.Maybe (Value Prelude.Bool)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-spotmaxpricepercentageoverlowestprice>
+                                         spotMaxPricePercentageOverLowestPrice :: (Prelude.Maybe (Value Prelude.Integer)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-totallocalstoragegb>
+                                         totalLocalStorageGB :: (Prelude.Maybe TotalLocalStorageGBRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-instancerequirementsrequest.html#cfn-ecs-capacityprovider-instancerequirementsrequest-vcpucount>
+                                         vCpuCount :: VCpuCountRangeRequestProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceRequirementsRequestProperty ::
+  MemoryMiBRequestProperty
+  -> VCpuCountRangeRequestProperty
+     -> InstanceRequirementsRequestProperty
+mkInstanceRequirementsRequestProperty memoryMiB vCpuCount
+  = InstanceRequirementsRequestProperty
+      {haddock_workaround_ = (), memoryMiB = memoryMiB,
+       vCpuCount = vCpuCount, acceleratorCount = Prelude.Nothing,
+       acceleratorManufacturers = Prelude.Nothing,
+       acceleratorNames = Prelude.Nothing,
+       acceleratorTotalMemoryMiB = Prelude.Nothing,
+       acceleratorTypes = Prelude.Nothing,
+       allowedInstanceTypes = Prelude.Nothing,
+       bareMetal = Prelude.Nothing,
+       baselineEbsBandwidthMbps = Prelude.Nothing,
+       burstablePerformance = Prelude.Nothing,
+       cpuManufacturers = Prelude.Nothing,
+       excludedInstanceTypes = Prelude.Nothing,
+       instanceGenerations = Prelude.Nothing,
+       localStorage = Prelude.Nothing,
+       localStorageTypes = Prelude.Nothing,
+       maxSpotPriceAsPercentageOfOptimalOnDemandPrice = Prelude.Nothing,
+       memoryGiBPerVCpu = Prelude.Nothing,
+       networkBandwidthGbps = Prelude.Nothing,
+       networkInterfaceCount = Prelude.Nothing,
+       onDemandMaxPricePercentageOverLowestPrice = Prelude.Nothing,
+       requireHibernateSupport = Prelude.Nothing,
+       spotMaxPricePercentageOverLowestPrice = Prelude.Nothing,
+       totalLocalStorageGB = Prelude.Nothing}
+instance ToResourceProperties InstanceRequirementsRequestProperty where
+  toResourceProperties InstanceRequirementsRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider.InstanceRequirementsRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["MemoryMiB" JSON..= memoryMiB, "VCpuCount" JSON..= vCpuCount]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AcceleratorCount" Prelude.<$> acceleratorCount,
+                               (JSON..=) "AcceleratorManufacturers"
+                                 Prelude.<$> acceleratorManufacturers,
+                               (JSON..=) "AcceleratorNames" Prelude.<$> acceleratorNames,
+                               (JSON..=) "AcceleratorTotalMemoryMiB"
+                                 Prelude.<$> acceleratorTotalMemoryMiB,
+                               (JSON..=) "AcceleratorTypes" Prelude.<$> acceleratorTypes,
+                               (JSON..=) "AllowedInstanceTypes" Prelude.<$> allowedInstanceTypes,
+                               (JSON..=) "BareMetal" Prelude.<$> bareMetal,
+                               (JSON..=) "BaselineEbsBandwidthMbps"
+                                 Prelude.<$> baselineEbsBandwidthMbps,
+                               (JSON..=) "BurstablePerformance" Prelude.<$> burstablePerformance,
+                               (JSON..=) "CpuManufacturers" Prelude.<$> cpuManufacturers,
+                               (JSON..=) "ExcludedInstanceTypes"
+                                 Prelude.<$> excludedInstanceTypes,
+                               (JSON..=) "InstanceGenerations" Prelude.<$> instanceGenerations,
+                               (JSON..=) "LocalStorage" Prelude.<$> localStorage,
+                               (JSON..=) "LocalStorageTypes" Prelude.<$> localStorageTypes,
+                               (JSON..=) "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice"
+                                 Prelude.<$> maxSpotPriceAsPercentageOfOptimalOnDemandPrice,
+                               (JSON..=) "MemoryGiBPerVCpu" Prelude.<$> memoryGiBPerVCpu,
+                               (JSON..=) "NetworkBandwidthGbps" Prelude.<$> networkBandwidthGbps,
+                               (JSON..=) "NetworkInterfaceCount"
+                                 Prelude.<$> networkInterfaceCount,
+                               (JSON..=) "OnDemandMaxPricePercentageOverLowestPrice"
+                                 Prelude.<$> onDemandMaxPricePercentageOverLowestPrice,
+                               (JSON..=) "RequireHibernateSupport"
+                                 Prelude.<$> requireHibernateSupport,
+                               (JSON..=) "SpotMaxPricePercentageOverLowestPrice"
+                                 Prelude.<$> spotMaxPricePercentageOverLowestPrice,
+                               (JSON..=) "TotalLocalStorageGB" Prelude.<$> totalLocalStorageGB]))}
+instance JSON.ToJSON InstanceRequirementsRequestProperty where
+  toJSON InstanceRequirementsRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["MemoryMiB" JSON..= memoryMiB, "VCpuCount" JSON..= vCpuCount]
+              (Prelude.catMaybes
+                 [(JSON..=) "AcceleratorCount" Prelude.<$> acceleratorCount,
+                  (JSON..=) "AcceleratorManufacturers"
+                    Prelude.<$> acceleratorManufacturers,
+                  (JSON..=) "AcceleratorNames" Prelude.<$> acceleratorNames,
+                  (JSON..=) "AcceleratorTotalMemoryMiB"
+                    Prelude.<$> acceleratorTotalMemoryMiB,
+                  (JSON..=) "AcceleratorTypes" Prelude.<$> acceleratorTypes,
+                  (JSON..=) "AllowedInstanceTypes" Prelude.<$> allowedInstanceTypes,
+                  (JSON..=) "BareMetal" Prelude.<$> bareMetal,
+                  (JSON..=) "BaselineEbsBandwidthMbps"
+                    Prelude.<$> baselineEbsBandwidthMbps,
+                  (JSON..=) "BurstablePerformance" Prelude.<$> burstablePerformance,
+                  (JSON..=) "CpuManufacturers" Prelude.<$> cpuManufacturers,
+                  (JSON..=) "ExcludedInstanceTypes"
+                    Prelude.<$> excludedInstanceTypes,
+                  (JSON..=) "InstanceGenerations" Prelude.<$> instanceGenerations,
+                  (JSON..=) "LocalStorage" Prelude.<$> localStorage,
+                  (JSON..=) "LocalStorageTypes" Prelude.<$> localStorageTypes,
+                  (JSON..=) "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice"
+                    Prelude.<$> maxSpotPriceAsPercentageOfOptimalOnDemandPrice,
+                  (JSON..=) "MemoryGiBPerVCpu" Prelude.<$> memoryGiBPerVCpu,
+                  (JSON..=) "NetworkBandwidthGbps" Prelude.<$> networkBandwidthGbps,
+                  (JSON..=) "NetworkInterfaceCount"
+                    Prelude.<$> networkInterfaceCount,
+                  (JSON..=) "OnDemandMaxPricePercentageOverLowestPrice"
+                    Prelude.<$> onDemandMaxPricePercentageOverLowestPrice,
+                  (JSON..=) "RequireHibernateSupport"
+                    Prelude.<$> requireHibernateSupport,
+                  (JSON..=) "SpotMaxPricePercentageOverLowestPrice"
+                    Prelude.<$> spotMaxPricePercentageOverLowestPrice,
+                  (JSON..=) "TotalLocalStorageGB" Prelude.<$> totalLocalStorageGB])))
+instance Property "AcceleratorCount" InstanceRequirementsRequestProperty where
+  type PropertyType "AcceleratorCount" InstanceRequirementsRequestProperty = AcceleratorCountRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {acceleratorCount = Prelude.pure newValue, ..}
+instance Property "AcceleratorManufacturers" InstanceRequirementsRequestProperty where
+  type PropertyType "AcceleratorManufacturers" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {acceleratorManufacturers = Prelude.pure newValue, ..}
+instance Property "AcceleratorNames" InstanceRequirementsRequestProperty where
+  type PropertyType "AcceleratorNames" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {acceleratorNames = Prelude.pure newValue, ..}
+instance Property "AcceleratorTotalMemoryMiB" InstanceRequirementsRequestProperty where
+  type PropertyType "AcceleratorTotalMemoryMiB" InstanceRequirementsRequestProperty = AcceleratorTotalMemoryMiBRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {acceleratorTotalMemoryMiB = Prelude.pure newValue, ..}
+instance Property "AcceleratorTypes" InstanceRequirementsRequestProperty where
+  type PropertyType "AcceleratorTypes" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {acceleratorTypes = Prelude.pure newValue, ..}
+instance Property "AllowedInstanceTypes" InstanceRequirementsRequestProperty where
+  type PropertyType "AllowedInstanceTypes" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {allowedInstanceTypes = Prelude.pure newValue, ..}
+instance Property "BareMetal" InstanceRequirementsRequestProperty where
+  type PropertyType "BareMetal" InstanceRequirementsRequestProperty = Value Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {bareMetal = Prelude.pure newValue, ..}
+instance Property "BaselineEbsBandwidthMbps" InstanceRequirementsRequestProperty where
+  type PropertyType "BaselineEbsBandwidthMbps" InstanceRequirementsRequestProperty = BaselineEbsBandwidthMbpsRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {baselineEbsBandwidthMbps = Prelude.pure newValue, ..}
+instance Property "BurstablePerformance" InstanceRequirementsRequestProperty where
+  type PropertyType "BurstablePerformance" InstanceRequirementsRequestProperty = Value Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {burstablePerformance = Prelude.pure newValue, ..}
+instance Property "CpuManufacturers" InstanceRequirementsRequestProperty where
+  type PropertyType "CpuManufacturers" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {cpuManufacturers = Prelude.pure newValue, ..}
+instance Property "ExcludedInstanceTypes" InstanceRequirementsRequestProperty where
+  type PropertyType "ExcludedInstanceTypes" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {excludedInstanceTypes = Prelude.pure newValue, ..}
+instance Property "InstanceGenerations" InstanceRequirementsRequestProperty where
+  type PropertyType "InstanceGenerations" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {instanceGenerations = Prelude.pure newValue, ..}
+instance Property "LocalStorage" InstanceRequirementsRequestProperty where
+  type PropertyType "LocalStorage" InstanceRequirementsRequestProperty = Value Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {localStorage = Prelude.pure newValue, ..}
+instance Property "LocalStorageTypes" InstanceRequirementsRequestProperty where
+  type PropertyType "LocalStorageTypes" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {localStorageTypes = Prelude.pure newValue, ..}
+instance Property "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice" InstanceRequirementsRequestProperty where
+  type PropertyType "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice" InstanceRequirementsRequestProperty = Value Prelude.Integer
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {maxSpotPriceAsPercentageOfOptimalOnDemandPrice = Prelude.pure
+                                                            newValue,
+         ..}
+instance Property "MemoryGiBPerVCpu" InstanceRequirementsRequestProperty where
+  type PropertyType "MemoryGiBPerVCpu" InstanceRequirementsRequestProperty = MemoryGiBPerVCpuRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {memoryGiBPerVCpu = Prelude.pure newValue, ..}
+instance Property "MemoryMiB" InstanceRequirementsRequestProperty where
+  type PropertyType "MemoryMiB" InstanceRequirementsRequestProperty = MemoryMiBRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty {memoryMiB = newValue, ..}
+instance Property "NetworkBandwidthGbps" InstanceRequirementsRequestProperty where
+  type PropertyType "NetworkBandwidthGbps" InstanceRequirementsRequestProperty = NetworkBandwidthGbpsRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {networkBandwidthGbps = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaceCount" InstanceRequirementsRequestProperty where
+  type PropertyType "NetworkInterfaceCount" InstanceRequirementsRequestProperty = NetworkInterfaceCountRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {networkInterfaceCount = Prelude.pure newValue, ..}
+instance Property "OnDemandMaxPricePercentageOverLowestPrice" InstanceRequirementsRequestProperty where
+  type PropertyType "OnDemandMaxPricePercentageOverLowestPrice" InstanceRequirementsRequestProperty = Value Prelude.Integer
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {onDemandMaxPricePercentageOverLowestPrice = Prelude.pure newValue,
+         ..}
+instance Property "RequireHibernateSupport" InstanceRequirementsRequestProperty where
+  type PropertyType "RequireHibernateSupport" InstanceRequirementsRequestProperty = Value Prelude.Bool
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {requireHibernateSupport = Prelude.pure newValue, ..}
+instance Property "SpotMaxPricePercentageOverLowestPrice" InstanceRequirementsRequestProperty where
+  type PropertyType "SpotMaxPricePercentageOverLowestPrice" InstanceRequirementsRequestProperty = Value Prelude.Integer
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {spotMaxPricePercentageOverLowestPrice = Prelude.pure newValue, ..}
+instance Property "TotalLocalStorageGB" InstanceRequirementsRequestProperty where
+  type PropertyType "TotalLocalStorageGB" InstanceRequirementsRequestProperty = TotalLocalStorageGBRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {totalLocalStorageGB = Prelude.pure newValue, ..}
+instance Property "VCpuCount" InstanceRequirementsRequestProperty where
+  type PropertyType "VCpuCount" InstanceRequirementsRequestProperty = VCpuCountRangeRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty {vCpuCount = newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/InstanceRequirementsRequestProperty.hs-boot b/gen/Stratosphere/ECS/CapacityProvider/InstanceRequirementsRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/InstanceRequirementsRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.CapacityProvider.InstanceRequirementsRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceRequirementsRequestProperty :: Prelude.Type
+instance ToResourceProperties InstanceRequirementsRequestProperty
+instance Prelude.Eq InstanceRequirementsRequestProperty
+instance Prelude.Show InstanceRequirementsRequestProperty
+instance JSON.ToJSON InstanceRequirementsRequestProperty
diff --git a/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesNetworkConfigurationProperty.hs b/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesNetworkConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesNetworkConfigurationProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.ECS.CapacityProvider.ManagedInstancesNetworkConfigurationProperty (
+        ManagedInstancesNetworkConfigurationProperty(..),
+        mkManagedInstancesNetworkConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ManagedInstancesNetworkConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-managedinstancesnetworkconfiguration.html>
+    ManagedInstancesNetworkConfigurationProperty {haddock_workaround_ :: (),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-managedinstancesnetworkconfiguration.html#cfn-ecs-capacityprovider-managedinstancesnetworkconfiguration-securitygroups>
+                                                  securityGroups :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-managedinstancesnetworkconfiguration.html#cfn-ecs-capacityprovider-managedinstancesnetworkconfiguration-subnets>
+                                                  subnets :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkManagedInstancesNetworkConfigurationProperty ::
+  ValueList Prelude.Text
+  -> ManagedInstancesNetworkConfigurationProperty
+mkManagedInstancesNetworkConfigurationProperty subnets
+  = ManagedInstancesNetworkConfigurationProperty
+      {haddock_workaround_ = (), subnets = subnets,
+       securityGroups = Prelude.Nothing}
+instance ToResourceProperties ManagedInstancesNetworkConfigurationProperty where
+  toResourceProperties
+    ManagedInstancesNetworkConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider.ManagedInstancesNetworkConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Subnets" JSON..= subnets]
+                           (Prelude.catMaybes
+                              [(JSON..=) "SecurityGroups" Prelude.<$> securityGroups]))}
+instance JSON.ToJSON ManagedInstancesNetworkConfigurationProperty where
+  toJSON ManagedInstancesNetworkConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Subnets" JSON..= subnets]
+              (Prelude.catMaybes
+                 [(JSON..=) "SecurityGroups" Prelude.<$> securityGroups])))
+instance Property "SecurityGroups" ManagedInstancesNetworkConfigurationProperty where
+  type PropertyType "SecurityGroups" ManagedInstancesNetworkConfigurationProperty = ValueList Prelude.Text
+  set newValue ManagedInstancesNetworkConfigurationProperty {..}
+    = ManagedInstancesNetworkConfigurationProperty
+        {securityGroups = Prelude.pure newValue, ..}
+instance Property "Subnets" ManagedInstancesNetworkConfigurationProperty where
+  type PropertyType "Subnets" ManagedInstancesNetworkConfigurationProperty = ValueList Prelude.Text
+  set newValue ManagedInstancesNetworkConfigurationProperty {..}
+    = ManagedInstancesNetworkConfigurationProperty
+        {subnets = newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesNetworkConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesNetworkConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesNetworkConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.CapacityProvider.ManagedInstancesNetworkConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ManagedInstancesNetworkConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ManagedInstancesNetworkConfigurationProperty
+instance Prelude.Eq ManagedInstancesNetworkConfigurationProperty
+instance Prelude.Show ManagedInstancesNetworkConfigurationProperty
+instance JSON.ToJSON ManagedInstancesNetworkConfigurationProperty
diff --git a/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesProviderProperty.hs b/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesProviderProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesProviderProperty.hs
@@ -0,0 +1,67 @@
+module Stratosphere.ECS.CapacityProvider.ManagedInstancesProviderProperty (
+        module Exports, ManagedInstancesProviderProperty(..),
+        mkManagedInstancesProviderProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.CapacityProvider.InstanceLaunchTemplateProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ManagedInstancesProviderProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-managedinstancesprovider.html>
+    ManagedInstancesProviderProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-managedinstancesprovider.html#cfn-ecs-capacityprovider-managedinstancesprovider-infrastructurerolearn>
+                                      infrastructureRoleArn :: (Value Prelude.Text),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-managedinstancesprovider.html#cfn-ecs-capacityprovider-managedinstancesprovider-instancelaunchtemplate>
+                                      instanceLaunchTemplate :: InstanceLaunchTemplateProperty,
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-managedinstancesprovider.html#cfn-ecs-capacityprovider-managedinstancesprovider-propagatetags>
+                                      propagateTags :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkManagedInstancesProviderProperty ::
+  Value Prelude.Text
+  -> InstanceLaunchTemplateProperty
+     -> ManagedInstancesProviderProperty
+mkManagedInstancesProviderProperty
+  infrastructureRoleArn
+  instanceLaunchTemplate
+  = ManagedInstancesProviderProperty
+      {haddock_workaround_ = (),
+       infrastructureRoleArn = infrastructureRoleArn,
+       instanceLaunchTemplate = instanceLaunchTemplate,
+       propagateTags = Prelude.Nothing}
+instance ToResourceProperties ManagedInstancesProviderProperty where
+  toResourceProperties ManagedInstancesProviderProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider.ManagedInstancesProvider",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["InfrastructureRoleArn" JSON..= infrastructureRoleArn,
+                            "InstanceLaunchTemplate" JSON..= instanceLaunchTemplate]
+                           (Prelude.catMaybes
+                              [(JSON..=) "PropagateTags" Prelude.<$> propagateTags]))}
+instance JSON.ToJSON ManagedInstancesProviderProperty where
+  toJSON ManagedInstancesProviderProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["InfrastructureRoleArn" JSON..= infrastructureRoleArn,
+               "InstanceLaunchTemplate" JSON..= instanceLaunchTemplate]
+              (Prelude.catMaybes
+                 [(JSON..=) "PropagateTags" Prelude.<$> propagateTags])))
+instance Property "InfrastructureRoleArn" ManagedInstancesProviderProperty where
+  type PropertyType "InfrastructureRoleArn" ManagedInstancesProviderProperty = Value Prelude.Text
+  set newValue ManagedInstancesProviderProperty {..}
+    = ManagedInstancesProviderProperty
+        {infrastructureRoleArn = newValue, ..}
+instance Property "InstanceLaunchTemplate" ManagedInstancesProviderProperty where
+  type PropertyType "InstanceLaunchTemplate" ManagedInstancesProviderProperty = InstanceLaunchTemplateProperty
+  set newValue ManagedInstancesProviderProperty {..}
+    = ManagedInstancesProviderProperty
+        {instanceLaunchTemplate = newValue, ..}
+instance Property "PropagateTags" ManagedInstancesProviderProperty where
+  type PropertyType "PropagateTags" ManagedInstancesProviderProperty = Value Prelude.Text
+  set newValue ManagedInstancesProviderProperty {..}
+    = ManagedInstancesProviderProperty
+        {propagateTags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesProviderProperty.hs-boot b/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesProviderProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesProviderProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.CapacityProvider.ManagedInstancesProviderProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ManagedInstancesProviderProperty :: Prelude.Type
+instance ToResourceProperties ManagedInstancesProviderProperty
+instance Prelude.Eq ManagedInstancesProviderProperty
+instance Prelude.Show ManagedInstancesProviderProperty
+instance JSON.ToJSON ManagedInstancesProviderProperty
diff --git a/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesStorageConfigurationProperty.hs b/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesStorageConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesStorageConfigurationProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.ECS.CapacityProvider.ManagedInstancesStorageConfigurationProperty (
+        ManagedInstancesStorageConfigurationProperty(..),
+        mkManagedInstancesStorageConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ManagedInstancesStorageConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-managedinstancesstorageconfiguration.html>
+    ManagedInstancesStorageConfigurationProperty {haddock_workaround_ :: (),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-managedinstancesstorageconfiguration.html#cfn-ecs-capacityprovider-managedinstancesstorageconfiguration-storagesizegib>
+                                                  storageSizeGiB :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkManagedInstancesStorageConfigurationProperty ::
+  Value Prelude.Integer
+  -> ManagedInstancesStorageConfigurationProperty
+mkManagedInstancesStorageConfigurationProperty storageSizeGiB
+  = ManagedInstancesStorageConfigurationProperty
+      {haddock_workaround_ = (), storageSizeGiB = storageSizeGiB}
+instance ToResourceProperties ManagedInstancesStorageConfigurationProperty where
+  toResourceProperties
+    ManagedInstancesStorageConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider.ManagedInstancesStorageConfiguration",
+         supportsTags = Prelude.False,
+         properties = ["StorageSizeGiB" JSON..= storageSizeGiB]}
+instance JSON.ToJSON ManagedInstancesStorageConfigurationProperty where
+  toJSON ManagedInstancesStorageConfigurationProperty {..}
+    = JSON.object ["StorageSizeGiB" JSON..= storageSizeGiB]
+instance Property "StorageSizeGiB" ManagedInstancesStorageConfigurationProperty where
+  type PropertyType "StorageSizeGiB" ManagedInstancesStorageConfigurationProperty = Value Prelude.Integer
+  set newValue ManagedInstancesStorageConfigurationProperty {..}
+    = ManagedInstancesStorageConfigurationProperty
+        {storageSizeGiB = newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesStorageConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesStorageConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/ManagedInstancesStorageConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.CapacityProvider.ManagedInstancesStorageConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ManagedInstancesStorageConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ManagedInstancesStorageConfigurationProperty
+instance Prelude.Eq ManagedInstancesStorageConfigurationProperty
+instance Prelude.Show ManagedInstancesStorageConfigurationProperty
+instance JSON.ToJSON ManagedInstancesStorageConfigurationProperty
diff --git a/gen/Stratosphere/ECS/CapacityProvider/ManagedScalingProperty.hs b/gen/Stratosphere/ECS/CapacityProvider/ManagedScalingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/ManagedScalingProperty.hs
@@ -0,0 +1,79 @@
+module Stratosphere.ECS.CapacityProvider.ManagedScalingProperty (
+        ManagedScalingProperty(..), mkManagedScalingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ManagedScalingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-managedscaling.html>
+    ManagedScalingProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-managedscaling.html#cfn-ecs-capacityprovider-managedscaling-instancewarmupperiod>
+                            instanceWarmupPeriod :: (Prelude.Maybe (Value Prelude.Integer)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-managedscaling.html#cfn-ecs-capacityprovider-managedscaling-maximumscalingstepsize>
+                            maximumScalingStepSize :: (Prelude.Maybe (Value Prelude.Integer)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-managedscaling.html#cfn-ecs-capacityprovider-managedscaling-minimumscalingstepsize>
+                            minimumScalingStepSize :: (Prelude.Maybe (Value Prelude.Integer)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-managedscaling.html#cfn-ecs-capacityprovider-managedscaling-status>
+                            status :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-managedscaling.html#cfn-ecs-capacityprovider-managedscaling-targetcapacity>
+                            targetCapacity :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkManagedScalingProperty :: ManagedScalingProperty
+mkManagedScalingProperty
+  = ManagedScalingProperty
+      {haddock_workaround_ = (), instanceWarmupPeriod = Prelude.Nothing,
+       maximumScalingStepSize = Prelude.Nothing,
+       minimumScalingStepSize = Prelude.Nothing, status = Prelude.Nothing,
+       targetCapacity = Prelude.Nothing}
+instance ToResourceProperties ManagedScalingProperty where
+  toResourceProperties ManagedScalingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider.ManagedScaling",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "InstanceWarmupPeriod" Prelude.<$> instanceWarmupPeriod,
+                            (JSON..=) "MaximumScalingStepSize"
+                              Prelude.<$> maximumScalingStepSize,
+                            (JSON..=) "MinimumScalingStepSize"
+                              Prelude.<$> minimumScalingStepSize,
+                            (JSON..=) "Status" Prelude.<$> status,
+                            (JSON..=) "TargetCapacity" Prelude.<$> targetCapacity])}
+instance JSON.ToJSON ManagedScalingProperty where
+  toJSON ManagedScalingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "InstanceWarmupPeriod" Prelude.<$> instanceWarmupPeriod,
+               (JSON..=) "MaximumScalingStepSize"
+                 Prelude.<$> maximumScalingStepSize,
+               (JSON..=) "MinimumScalingStepSize"
+                 Prelude.<$> minimumScalingStepSize,
+               (JSON..=) "Status" Prelude.<$> status,
+               (JSON..=) "TargetCapacity" Prelude.<$> targetCapacity]))
+instance Property "InstanceWarmupPeriod" ManagedScalingProperty where
+  type PropertyType "InstanceWarmupPeriod" ManagedScalingProperty = Value Prelude.Integer
+  set newValue ManagedScalingProperty {..}
+    = ManagedScalingProperty
+        {instanceWarmupPeriod = Prelude.pure newValue, ..}
+instance Property "MaximumScalingStepSize" ManagedScalingProperty where
+  type PropertyType "MaximumScalingStepSize" ManagedScalingProperty = Value Prelude.Integer
+  set newValue ManagedScalingProperty {..}
+    = ManagedScalingProperty
+        {maximumScalingStepSize = Prelude.pure newValue, ..}
+instance Property "MinimumScalingStepSize" ManagedScalingProperty where
+  type PropertyType "MinimumScalingStepSize" ManagedScalingProperty = Value Prelude.Integer
+  set newValue ManagedScalingProperty {..}
+    = ManagedScalingProperty
+        {minimumScalingStepSize = Prelude.pure newValue, ..}
+instance Property "Status" ManagedScalingProperty where
+  type PropertyType "Status" ManagedScalingProperty = Value Prelude.Text
+  set newValue ManagedScalingProperty {..}
+    = ManagedScalingProperty {status = Prelude.pure newValue, ..}
+instance Property "TargetCapacity" ManagedScalingProperty where
+  type PropertyType "TargetCapacity" ManagedScalingProperty = Value Prelude.Integer
+  set newValue ManagedScalingProperty {..}
+    = ManagedScalingProperty
+        {targetCapacity = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/ManagedScalingProperty.hs-boot b/gen/Stratosphere/ECS/CapacityProvider/ManagedScalingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/ManagedScalingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.CapacityProvider.ManagedScalingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ManagedScalingProperty :: Prelude.Type
+instance ToResourceProperties ManagedScalingProperty
+instance Prelude.Eq ManagedScalingProperty
+instance Prelude.Show ManagedScalingProperty
+instance JSON.ToJSON ManagedScalingProperty
diff --git a/gen/Stratosphere/ECS/CapacityProvider/MemoryGiBPerVCpuRequestProperty.hs b/gen/Stratosphere/ECS/CapacityProvider/MemoryGiBPerVCpuRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/MemoryGiBPerVCpuRequestProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.ECS.CapacityProvider.MemoryGiBPerVCpuRequestProperty (
+        MemoryGiBPerVCpuRequestProperty(..),
+        mkMemoryGiBPerVCpuRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MemoryGiBPerVCpuRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-memorygibpervcpurequest.html>
+    MemoryGiBPerVCpuRequestProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-memorygibpervcpurequest.html#cfn-ecs-capacityprovider-memorygibpervcpurequest-max>
+                                     max :: (Prelude.Maybe (Value Prelude.Double)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-memorygibpervcpurequest.html#cfn-ecs-capacityprovider-memorygibpervcpurequest-min>
+                                     min :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMemoryGiBPerVCpuRequestProperty ::
+  MemoryGiBPerVCpuRequestProperty
+mkMemoryGiBPerVCpuRequestProperty
+  = MemoryGiBPerVCpuRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties MemoryGiBPerVCpuRequestProperty where
+  toResourceProperties MemoryGiBPerVCpuRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider.MemoryGiBPerVCpuRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON MemoryGiBPerVCpuRequestProperty where
+  toJSON MemoryGiBPerVCpuRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" MemoryGiBPerVCpuRequestProperty where
+  type PropertyType "Max" MemoryGiBPerVCpuRequestProperty = Value Prelude.Double
+  set newValue MemoryGiBPerVCpuRequestProperty {..}
+    = MemoryGiBPerVCpuRequestProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" MemoryGiBPerVCpuRequestProperty where
+  type PropertyType "Min" MemoryGiBPerVCpuRequestProperty = Value Prelude.Double
+  set newValue MemoryGiBPerVCpuRequestProperty {..}
+    = MemoryGiBPerVCpuRequestProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/MemoryGiBPerVCpuRequestProperty.hs-boot b/gen/Stratosphere/ECS/CapacityProvider/MemoryGiBPerVCpuRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/MemoryGiBPerVCpuRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.CapacityProvider.MemoryGiBPerVCpuRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MemoryGiBPerVCpuRequestProperty :: Prelude.Type
+instance ToResourceProperties MemoryGiBPerVCpuRequestProperty
+instance Prelude.Eq MemoryGiBPerVCpuRequestProperty
+instance Prelude.Show MemoryGiBPerVCpuRequestProperty
+instance JSON.ToJSON MemoryGiBPerVCpuRequestProperty
diff --git a/gen/Stratosphere/ECS/CapacityProvider/MemoryMiBRequestProperty.hs b/gen/Stratosphere/ECS/CapacityProvider/MemoryMiBRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/MemoryMiBRequestProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ECS.CapacityProvider.MemoryMiBRequestProperty (
+        MemoryMiBRequestProperty(..), mkMemoryMiBRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MemoryMiBRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-memorymibrequest.html>
+    MemoryMiBRequestProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-memorymibrequest.html#cfn-ecs-capacityprovider-memorymibrequest-max>
+                              max :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-memorymibrequest.html#cfn-ecs-capacityprovider-memorymibrequest-min>
+                              min :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMemoryMiBRequestProperty ::
+  Value Prelude.Integer -> MemoryMiBRequestProperty
+mkMemoryMiBRequestProperty min
+  = MemoryMiBRequestProperty
+      {haddock_workaround_ = (), min = min, max = Prelude.Nothing}
+instance ToResourceProperties MemoryMiBRequestProperty where
+  toResourceProperties MemoryMiBRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider.MemoryMiBRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Min" JSON..= min]
+                           (Prelude.catMaybes [(JSON..=) "Max" Prelude.<$> max]))}
+instance JSON.ToJSON MemoryMiBRequestProperty where
+  toJSON MemoryMiBRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Min" JSON..= min]
+              (Prelude.catMaybes [(JSON..=) "Max" Prelude.<$> max])))
+instance Property "Max" MemoryMiBRequestProperty where
+  type PropertyType "Max" MemoryMiBRequestProperty = Value Prelude.Integer
+  set newValue MemoryMiBRequestProperty {..}
+    = MemoryMiBRequestProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" MemoryMiBRequestProperty where
+  type PropertyType "Min" MemoryMiBRequestProperty = Value Prelude.Integer
+  set newValue MemoryMiBRequestProperty {..}
+    = MemoryMiBRequestProperty {min = newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/MemoryMiBRequestProperty.hs-boot b/gen/Stratosphere/ECS/CapacityProvider/MemoryMiBRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/MemoryMiBRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.CapacityProvider.MemoryMiBRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MemoryMiBRequestProperty :: Prelude.Type
+instance ToResourceProperties MemoryMiBRequestProperty
+instance Prelude.Eq MemoryMiBRequestProperty
+instance Prelude.Show MemoryMiBRequestProperty
+instance JSON.ToJSON MemoryMiBRequestProperty
diff --git a/gen/Stratosphere/ECS/CapacityProvider/NetworkBandwidthGbpsRequestProperty.hs b/gen/Stratosphere/ECS/CapacityProvider/NetworkBandwidthGbpsRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/NetworkBandwidthGbpsRequestProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ECS.CapacityProvider.NetworkBandwidthGbpsRequestProperty (
+        NetworkBandwidthGbpsRequestProperty(..),
+        mkNetworkBandwidthGbpsRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NetworkBandwidthGbpsRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-networkbandwidthgbpsrequest.html>
+    NetworkBandwidthGbpsRequestProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-networkbandwidthgbpsrequest.html#cfn-ecs-capacityprovider-networkbandwidthgbpsrequest-max>
+                                         max :: (Prelude.Maybe (Value Prelude.Double)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-networkbandwidthgbpsrequest.html#cfn-ecs-capacityprovider-networkbandwidthgbpsrequest-min>
+                                         min :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkBandwidthGbpsRequestProperty ::
+  NetworkBandwidthGbpsRequestProperty
+mkNetworkBandwidthGbpsRequestProperty
+  = NetworkBandwidthGbpsRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties NetworkBandwidthGbpsRequestProperty where
+  toResourceProperties NetworkBandwidthGbpsRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider.NetworkBandwidthGbpsRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON NetworkBandwidthGbpsRequestProperty where
+  toJSON NetworkBandwidthGbpsRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" NetworkBandwidthGbpsRequestProperty where
+  type PropertyType "Max" NetworkBandwidthGbpsRequestProperty = Value Prelude.Double
+  set newValue NetworkBandwidthGbpsRequestProperty {..}
+    = NetworkBandwidthGbpsRequestProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" NetworkBandwidthGbpsRequestProperty where
+  type PropertyType "Min" NetworkBandwidthGbpsRequestProperty = Value Prelude.Double
+  set newValue NetworkBandwidthGbpsRequestProperty {..}
+    = NetworkBandwidthGbpsRequestProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/NetworkBandwidthGbpsRequestProperty.hs-boot b/gen/Stratosphere/ECS/CapacityProvider/NetworkBandwidthGbpsRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/NetworkBandwidthGbpsRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.CapacityProvider.NetworkBandwidthGbpsRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NetworkBandwidthGbpsRequestProperty :: Prelude.Type
+instance ToResourceProperties NetworkBandwidthGbpsRequestProperty
+instance Prelude.Eq NetworkBandwidthGbpsRequestProperty
+instance Prelude.Show NetworkBandwidthGbpsRequestProperty
+instance JSON.ToJSON NetworkBandwidthGbpsRequestProperty
diff --git a/gen/Stratosphere/ECS/CapacityProvider/NetworkInterfaceCountRequestProperty.hs b/gen/Stratosphere/ECS/CapacityProvider/NetworkInterfaceCountRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/NetworkInterfaceCountRequestProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ECS.CapacityProvider.NetworkInterfaceCountRequestProperty (
+        NetworkInterfaceCountRequestProperty(..),
+        mkNetworkInterfaceCountRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NetworkInterfaceCountRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-networkinterfacecountrequest.html>
+    NetworkInterfaceCountRequestProperty {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-networkinterfacecountrequest.html#cfn-ecs-capacityprovider-networkinterfacecountrequest-max>
+                                          max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-networkinterfacecountrequest.html#cfn-ecs-capacityprovider-networkinterfacecountrequest-min>
+                                          min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkInterfaceCountRequestProperty ::
+  NetworkInterfaceCountRequestProperty
+mkNetworkInterfaceCountRequestProperty
+  = NetworkInterfaceCountRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties NetworkInterfaceCountRequestProperty where
+  toResourceProperties NetworkInterfaceCountRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider.NetworkInterfaceCountRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON NetworkInterfaceCountRequestProperty where
+  toJSON NetworkInterfaceCountRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" NetworkInterfaceCountRequestProperty where
+  type PropertyType "Max" NetworkInterfaceCountRequestProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceCountRequestProperty {..}
+    = NetworkInterfaceCountRequestProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" NetworkInterfaceCountRequestProperty where
+  type PropertyType "Min" NetworkInterfaceCountRequestProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceCountRequestProperty {..}
+    = NetworkInterfaceCountRequestProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/NetworkInterfaceCountRequestProperty.hs-boot b/gen/Stratosphere/ECS/CapacityProvider/NetworkInterfaceCountRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/NetworkInterfaceCountRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.CapacityProvider.NetworkInterfaceCountRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NetworkInterfaceCountRequestProperty :: Prelude.Type
+instance ToResourceProperties NetworkInterfaceCountRequestProperty
+instance Prelude.Eq NetworkInterfaceCountRequestProperty
+instance Prelude.Show NetworkInterfaceCountRequestProperty
+instance JSON.ToJSON NetworkInterfaceCountRequestProperty
diff --git a/gen/Stratosphere/ECS/CapacityProvider/TotalLocalStorageGBRequestProperty.hs b/gen/Stratosphere/ECS/CapacityProvider/TotalLocalStorageGBRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/TotalLocalStorageGBRequestProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ECS.CapacityProvider.TotalLocalStorageGBRequestProperty (
+        TotalLocalStorageGBRequestProperty(..),
+        mkTotalLocalStorageGBRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TotalLocalStorageGBRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-totallocalstoragegbrequest.html>
+    TotalLocalStorageGBRequestProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-totallocalstoragegbrequest.html#cfn-ecs-capacityprovider-totallocalstoragegbrequest-max>
+                                        max :: (Prelude.Maybe (Value Prelude.Double)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-totallocalstoragegbrequest.html#cfn-ecs-capacityprovider-totallocalstoragegbrequest-min>
+                                        min :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTotalLocalStorageGBRequestProperty ::
+  TotalLocalStorageGBRequestProperty
+mkTotalLocalStorageGBRequestProperty
+  = TotalLocalStorageGBRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties TotalLocalStorageGBRequestProperty where
+  toResourceProperties TotalLocalStorageGBRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider.TotalLocalStorageGBRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON TotalLocalStorageGBRequestProperty where
+  toJSON TotalLocalStorageGBRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" TotalLocalStorageGBRequestProperty where
+  type PropertyType "Max" TotalLocalStorageGBRequestProperty = Value Prelude.Double
+  set newValue TotalLocalStorageGBRequestProperty {..}
+    = TotalLocalStorageGBRequestProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" TotalLocalStorageGBRequestProperty where
+  type PropertyType "Min" TotalLocalStorageGBRequestProperty = Value Prelude.Double
+  set newValue TotalLocalStorageGBRequestProperty {..}
+    = TotalLocalStorageGBRequestProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/TotalLocalStorageGBRequestProperty.hs-boot b/gen/Stratosphere/ECS/CapacityProvider/TotalLocalStorageGBRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/TotalLocalStorageGBRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.CapacityProvider.TotalLocalStorageGBRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TotalLocalStorageGBRequestProperty :: Prelude.Type
+instance ToResourceProperties TotalLocalStorageGBRequestProperty
+instance Prelude.Eq TotalLocalStorageGBRequestProperty
+instance Prelude.Show TotalLocalStorageGBRequestProperty
+instance JSON.ToJSON TotalLocalStorageGBRequestProperty
diff --git a/gen/Stratosphere/ECS/CapacityProvider/VCpuCountRangeRequestProperty.hs b/gen/Stratosphere/ECS/CapacityProvider/VCpuCountRangeRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/VCpuCountRangeRequestProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ECS.CapacityProvider.VCpuCountRangeRequestProperty (
+        VCpuCountRangeRequestProperty(..), mkVCpuCountRangeRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VCpuCountRangeRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-vcpucountrangerequest.html>
+    VCpuCountRangeRequestProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-vcpucountrangerequest.html#cfn-ecs-capacityprovider-vcpucountrangerequest-max>
+                                   max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-vcpucountrangerequest.html#cfn-ecs-capacityprovider-vcpucountrangerequest-min>
+                                   min :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVCpuCountRangeRequestProperty ::
+  Value Prelude.Integer -> VCpuCountRangeRequestProperty
+mkVCpuCountRangeRequestProperty min
+  = VCpuCountRangeRequestProperty
+      {haddock_workaround_ = (), min = min, max = Prelude.Nothing}
+instance ToResourceProperties VCpuCountRangeRequestProperty where
+  toResourceProperties VCpuCountRangeRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::CapacityProvider.VCpuCountRangeRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Min" JSON..= min]
+                           (Prelude.catMaybes [(JSON..=) "Max" Prelude.<$> max]))}
+instance JSON.ToJSON VCpuCountRangeRequestProperty where
+  toJSON VCpuCountRangeRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Min" JSON..= min]
+              (Prelude.catMaybes [(JSON..=) "Max" Prelude.<$> max])))
+instance Property "Max" VCpuCountRangeRequestProperty where
+  type PropertyType "Max" VCpuCountRangeRequestProperty = Value Prelude.Integer
+  set newValue VCpuCountRangeRequestProperty {..}
+    = VCpuCountRangeRequestProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" VCpuCountRangeRequestProperty where
+  type PropertyType "Min" VCpuCountRangeRequestProperty = Value Prelude.Integer
+  set newValue VCpuCountRangeRequestProperty {..}
+    = VCpuCountRangeRequestProperty {min = newValue, ..}
diff --git a/gen/Stratosphere/ECS/CapacityProvider/VCpuCountRangeRequestProperty.hs-boot b/gen/Stratosphere/ECS/CapacityProvider/VCpuCountRangeRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/CapacityProvider/VCpuCountRangeRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.CapacityProvider.VCpuCountRangeRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VCpuCountRangeRequestProperty :: Prelude.Type
+instance ToResourceProperties VCpuCountRangeRequestProperty
+instance Prelude.Eq VCpuCountRangeRequestProperty
+instance Prelude.Show VCpuCountRangeRequestProperty
+instance JSON.ToJSON VCpuCountRangeRequestProperty
diff --git a/gen/Stratosphere/ECS/Cluster.hs b/gen/Stratosphere/ECS/Cluster.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Cluster.hs
@@ -0,0 +1,97 @@
+module Stratosphere.ECS.Cluster (
+        module Exports, Cluster(..), mkCluster
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.Cluster.CapacityProviderStrategyItemProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Cluster.ClusterConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Cluster.ClusterSettingsProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Cluster.ServiceConnectDefaultsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Cluster
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html>
+    Cluster {haddock_workaround_ :: (),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#cfn-ecs-cluster-capacityproviders>
+             capacityProviders :: (Prelude.Maybe (ValueList Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#cfn-ecs-cluster-clustername>
+             clusterName :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#cfn-ecs-cluster-clustersettings>
+             clusterSettings :: (Prelude.Maybe [ClusterSettingsProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#cfn-ecs-cluster-configuration>
+             configuration :: (Prelude.Maybe ClusterConfigurationProperty),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#cfn-ecs-cluster-defaultcapacityproviderstrategy>
+             defaultCapacityProviderStrategy :: (Prelude.Maybe [CapacityProviderStrategyItemProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#cfn-ecs-cluster-serviceconnectdefaults>
+             serviceConnectDefaults :: (Prelude.Maybe ServiceConnectDefaultsProperty),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#cfn-ecs-cluster-tags>
+             tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCluster :: Cluster
+mkCluster
+  = Cluster
+      {haddock_workaround_ = (), capacityProviders = Prelude.Nothing,
+       clusterName = Prelude.Nothing, clusterSettings = Prelude.Nothing,
+       configuration = Prelude.Nothing,
+       defaultCapacityProviderStrategy = Prelude.Nothing,
+       serviceConnectDefaults = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties Cluster where
+  toResourceProperties Cluster {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Cluster", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CapacityProviders" Prelude.<$> capacityProviders,
+                            (JSON..=) "ClusterName" Prelude.<$> clusterName,
+                            (JSON..=) "ClusterSettings" Prelude.<$> clusterSettings,
+                            (JSON..=) "Configuration" Prelude.<$> configuration,
+                            (JSON..=) "DefaultCapacityProviderStrategy"
+                              Prelude.<$> defaultCapacityProviderStrategy,
+                            (JSON..=) "ServiceConnectDefaults"
+                              Prelude.<$> serviceConnectDefaults,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON Cluster where
+  toJSON Cluster {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CapacityProviders" Prelude.<$> capacityProviders,
+               (JSON..=) "ClusterName" Prelude.<$> clusterName,
+               (JSON..=) "ClusterSettings" Prelude.<$> clusterSettings,
+               (JSON..=) "Configuration" Prelude.<$> configuration,
+               (JSON..=) "DefaultCapacityProviderStrategy"
+                 Prelude.<$> defaultCapacityProviderStrategy,
+               (JSON..=) "ServiceConnectDefaults"
+                 Prelude.<$> serviceConnectDefaults,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "CapacityProviders" Cluster where
+  type PropertyType "CapacityProviders" Cluster = ValueList Prelude.Text
+  set newValue Cluster {..}
+    = Cluster {capacityProviders = Prelude.pure newValue, ..}
+instance Property "ClusterName" Cluster where
+  type PropertyType "ClusterName" Cluster = Value Prelude.Text
+  set newValue Cluster {..}
+    = Cluster {clusterName = Prelude.pure newValue, ..}
+instance Property "ClusterSettings" Cluster where
+  type PropertyType "ClusterSettings" Cluster = [ClusterSettingsProperty]
+  set newValue Cluster {..}
+    = Cluster {clusterSettings = Prelude.pure newValue, ..}
+instance Property "Configuration" Cluster where
+  type PropertyType "Configuration" Cluster = ClusterConfigurationProperty
+  set newValue Cluster {..}
+    = Cluster {configuration = Prelude.pure newValue, ..}
+instance Property "DefaultCapacityProviderStrategy" Cluster where
+  type PropertyType "DefaultCapacityProviderStrategy" Cluster = [CapacityProviderStrategyItemProperty]
+  set newValue Cluster {..}
+    = Cluster
+        {defaultCapacityProviderStrategy = Prelude.pure newValue, ..}
+instance Property "ServiceConnectDefaults" Cluster where
+  type PropertyType "ServiceConnectDefaults" Cluster = ServiceConnectDefaultsProperty
+  set newValue Cluster {..}
+    = Cluster {serviceConnectDefaults = Prelude.pure newValue, ..}
+instance Property "Tags" Cluster where
+  type PropertyType "Tags" Cluster = [Tag]
+  set newValue Cluster {..}
+    = Cluster {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Cluster/CapacityProviderStrategyItemProperty.hs b/gen/Stratosphere/ECS/Cluster/CapacityProviderStrategyItemProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Cluster/CapacityProviderStrategyItemProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.ECS.Cluster.CapacityProviderStrategyItemProperty (
+        CapacityProviderStrategyItemProperty(..),
+        mkCapacityProviderStrategyItemProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CapacityProviderStrategyItemProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-capacityproviderstrategyitem.html>
+    CapacityProviderStrategyItemProperty {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-capacityproviderstrategyitem.html#cfn-ecs-cluster-capacityproviderstrategyitem-base>
+                                          base :: (Prelude.Maybe (Value Prelude.Integer)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-capacityproviderstrategyitem.html#cfn-ecs-cluster-capacityproviderstrategyitem-capacityprovider>
+                                          capacityProvider :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-capacityproviderstrategyitem.html#cfn-ecs-cluster-capacityproviderstrategyitem-weight>
+                                          weight :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityProviderStrategyItemProperty ::
+  CapacityProviderStrategyItemProperty
+mkCapacityProviderStrategyItemProperty
+  = CapacityProviderStrategyItemProperty
+      {haddock_workaround_ = (), base = Prelude.Nothing,
+       capacityProvider = Prelude.Nothing, weight = Prelude.Nothing}
+instance ToResourceProperties CapacityProviderStrategyItemProperty where
+  toResourceProperties CapacityProviderStrategyItemProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Cluster.CapacityProviderStrategyItem",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Base" Prelude.<$> base,
+                            (JSON..=) "CapacityProvider" Prelude.<$> capacityProvider,
+                            (JSON..=) "Weight" Prelude.<$> weight])}
+instance JSON.ToJSON CapacityProviderStrategyItemProperty where
+  toJSON CapacityProviderStrategyItemProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Base" Prelude.<$> base,
+               (JSON..=) "CapacityProvider" Prelude.<$> capacityProvider,
+               (JSON..=) "Weight" Prelude.<$> weight]))
+instance Property "Base" CapacityProviderStrategyItemProperty where
+  type PropertyType "Base" CapacityProviderStrategyItemProperty = Value Prelude.Integer
+  set newValue CapacityProviderStrategyItemProperty {..}
+    = CapacityProviderStrategyItemProperty
+        {base = Prelude.pure newValue, ..}
+instance Property "CapacityProvider" CapacityProviderStrategyItemProperty where
+  type PropertyType "CapacityProvider" CapacityProviderStrategyItemProperty = Value Prelude.Text
+  set newValue CapacityProviderStrategyItemProperty {..}
+    = CapacityProviderStrategyItemProperty
+        {capacityProvider = Prelude.pure newValue, ..}
+instance Property "Weight" CapacityProviderStrategyItemProperty where
+  type PropertyType "Weight" CapacityProviderStrategyItemProperty = Value Prelude.Integer
+  set newValue CapacityProviderStrategyItemProperty {..}
+    = CapacityProviderStrategyItemProperty
+        {weight = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Cluster/CapacityProviderStrategyItemProperty.hs-boot b/gen/Stratosphere/ECS/Cluster/CapacityProviderStrategyItemProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Cluster/CapacityProviderStrategyItemProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Cluster.CapacityProviderStrategyItemProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CapacityProviderStrategyItemProperty :: Prelude.Type
+instance ToResourceProperties CapacityProviderStrategyItemProperty
+instance Prelude.Eq CapacityProviderStrategyItemProperty
+instance Prelude.Show CapacityProviderStrategyItemProperty
+instance JSON.ToJSON CapacityProviderStrategyItemProperty
diff --git a/gen/Stratosphere/ECS/Cluster/ClusterConfigurationProperty.hs b/gen/Stratosphere/ECS/Cluster/ClusterConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Cluster/ClusterConfigurationProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.ECS.Cluster.ClusterConfigurationProperty (
+        module Exports, ClusterConfigurationProperty(..),
+        mkClusterConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.Cluster.ExecuteCommandConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Cluster.ManagedStorageConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+data ClusterConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-clusterconfiguration.html>
+    ClusterConfigurationProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-clusterconfiguration.html#cfn-ecs-cluster-clusterconfiguration-executecommandconfiguration>
+                                  executeCommandConfiguration :: (Prelude.Maybe ExecuteCommandConfigurationProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-clusterconfiguration.html#cfn-ecs-cluster-clusterconfiguration-managedstorageconfiguration>
+                                  managedStorageConfiguration :: (Prelude.Maybe ManagedStorageConfigurationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkClusterConfigurationProperty :: ClusterConfigurationProperty
+mkClusterConfigurationProperty
+  = ClusterConfigurationProperty
+      {haddock_workaround_ = (),
+       executeCommandConfiguration = Prelude.Nothing,
+       managedStorageConfiguration = Prelude.Nothing}
+instance ToResourceProperties ClusterConfigurationProperty where
+  toResourceProperties ClusterConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Cluster.ClusterConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ExecuteCommandConfiguration"
+                              Prelude.<$> executeCommandConfiguration,
+                            (JSON..=) "ManagedStorageConfiguration"
+                              Prelude.<$> managedStorageConfiguration])}
+instance JSON.ToJSON ClusterConfigurationProperty where
+  toJSON ClusterConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ExecuteCommandConfiguration"
+                 Prelude.<$> executeCommandConfiguration,
+               (JSON..=) "ManagedStorageConfiguration"
+                 Prelude.<$> managedStorageConfiguration]))
+instance Property "ExecuteCommandConfiguration" ClusterConfigurationProperty where
+  type PropertyType "ExecuteCommandConfiguration" ClusterConfigurationProperty = ExecuteCommandConfigurationProperty
+  set newValue ClusterConfigurationProperty {..}
+    = ClusterConfigurationProperty
+        {executeCommandConfiguration = Prelude.pure newValue, ..}
+instance Property "ManagedStorageConfiguration" ClusterConfigurationProperty where
+  type PropertyType "ManagedStorageConfiguration" ClusterConfigurationProperty = ManagedStorageConfigurationProperty
+  set newValue ClusterConfigurationProperty {..}
+    = ClusterConfigurationProperty
+        {managedStorageConfiguration = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Cluster/ClusterConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Cluster/ClusterConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Cluster/ClusterConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Cluster.ClusterConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ClusterConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ClusterConfigurationProperty
+instance Prelude.Eq ClusterConfigurationProperty
+instance Prelude.Show ClusterConfigurationProperty
+instance JSON.ToJSON ClusterConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Cluster/ClusterSettingsProperty.hs b/gen/Stratosphere/ECS/Cluster/ClusterSettingsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Cluster/ClusterSettingsProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ECS.Cluster.ClusterSettingsProperty (
+        ClusterSettingsProperty(..), mkClusterSettingsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ClusterSettingsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-clustersettings.html>
+    ClusterSettingsProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-clustersettings.html#cfn-ecs-cluster-clustersettings-name>
+                             name :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-clustersettings.html#cfn-ecs-cluster-clustersettings-value>
+                             value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkClusterSettingsProperty :: ClusterSettingsProperty
+mkClusterSettingsProperty
+  = ClusterSettingsProperty
+      {haddock_workaround_ = (), name = Prelude.Nothing,
+       value = Prelude.Nothing}
+instance ToResourceProperties ClusterSettingsProperty where
+  toResourceProperties ClusterSettingsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Cluster.ClusterSettings",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON ClusterSettingsProperty where
+  toJSON ClusterSettingsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "Value" Prelude.<$> value]))
+instance Property "Name" ClusterSettingsProperty where
+  type PropertyType "Name" ClusterSettingsProperty = Value Prelude.Text
+  set newValue ClusterSettingsProperty {..}
+    = ClusterSettingsProperty {name = Prelude.pure newValue, ..}
+instance Property "Value" ClusterSettingsProperty where
+  type PropertyType "Value" ClusterSettingsProperty = Value Prelude.Text
+  set newValue ClusterSettingsProperty {..}
+    = ClusterSettingsProperty {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Cluster/ClusterSettingsProperty.hs-boot b/gen/Stratosphere/ECS/Cluster/ClusterSettingsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Cluster/ClusterSettingsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Cluster.ClusterSettingsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ClusterSettingsProperty :: Prelude.Type
+instance ToResourceProperties ClusterSettingsProperty
+instance Prelude.Eq ClusterSettingsProperty
+instance Prelude.Show ClusterSettingsProperty
+instance JSON.ToJSON ClusterSettingsProperty
diff --git a/gen/Stratosphere/ECS/Cluster/ExecuteCommandConfigurationProperty.hs b/gen/Stratosphere/ECS/Cluster/ExecuteCommandConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Cluster/ExecuteCommandConfigurationProperty.hs
@@ -0,0 +1,59 @@
+module Stratosphere.ECS.Cluster.ExecuteCommandConfigurationProperty (
+        module Exports, ExecuteCommandConfigurationProperty(..),
+        mkExecuteCommandConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.Cluster.ExecuteCommandLogConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ExecuteCommandConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandconfiguration.html>
+    ExecuteCommandConfigurationProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandconfiguration.html#cfn-ecs-cluster-executecommandconfiguration-kmskeyid>
+                                         kmsKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandconfiguration.html#cfn-ecs-cluster-executecommandconfiguration-logconfiguration>
+                                         logConfiguration :: (Prelude.Maybe ExecuteCommandLogConfigurationProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandconfiguration.html#cfn-ecs-cluster-executecommandconfiguration-logging>
+                                         logging :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkExecuteCommandConfigurationProperty ::
+  ExecuteCommandConfigurationProperty
+mkExecuteCommandConfigurationProperty
+  = ExecuteCommandConfigurationProperty
+      {haddock_workaround_ = (), kmsKeyId = Prelude.Nothing,
+       logConfiguration = Prelude.Nothing, logging = Prelude.Nothing}
+instance ToResourceProperties ExecuteCommandConfigurationProperty where
+  toResourceProperties ExecuteCommandConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Cluster.ExecuteCommandConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId,
+                            (JSON..=) "LogConfiguration" Prelude.<$> logConfiguration,
+                            (JSON..=) "Logging" Prelude.<$> logging])}
+instance JSON.ToJSON ExecuteCommandConfigurationProperty where
+  toJSON ExecuteCommandConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId,
+               (JSON..=) "LogConfiguration" Prelude.<$> logConfiguration,
+               (JSON..=) "Logging" Prelude.<$> logging]))
+instance Property "KmsKeyId" ExecuteCommandConfigurationProperty where
+  type PropertyType "KmsKeyId" ExecuteCommandConfigurationProperty = Value Prelude.Text
+  set newValue ExecuteCommandConfigurationProperty {..}
+    = ExecuteCommandConfigurationProperty
+        {kmsKeyId = Prelude.pure newValue, ..}
+instance Property "LogConfiguration" ExecuteCommandConfigurationProperty where
+  type PropertyType "LogConfiguration" ExecuteCommandConfigurationProperty = ExecuteCommandLogConfigurationProperty
+  set newValue ExecuteCommandConfigurationProperty {..}
+    = ExecuteCommandConfigurationProperty
+        {logConfiguration = Prelude.pure newValue, ..}
+instance Property "Logging" ExecuteCommandConfigurationProperty where
+  type PropertyType "Logging" ExecuteCommandConfigurationProperty = Value Prelude.Text
+  set newValue ExecuteCommandConfigurationProperty {..}
+    = ExecuteCommandConfigurationProperty
+        {logging = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Cluster/ExecuteCommandConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Cluster/ExecuteCommandConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Cluster/ExecuteCommandConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Cluster.ExecuteCommandConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ExecuteCommandConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ExecuteCommandConfigurationProperty
+instance Prelude.Eq ExecuteCommandConfigurationProperty
+instance Prelude.Show ExecuteCommandConfigurationProperty
+instance JSON.ToJSON ExecuteCommandConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Cluster/ExecuteCommandLogConfigurationProperty.hs b/gen/Stratosphere/ECS/Cluster/ExecuteCommandLogConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Cluster/ExecuteCommandLogConfigurationProperty.hs
@@ -0,0 +1,84 @@
+module Stratosphere.ECS.Cluster.ExecuteCommandLogConfigurationProperty (
+        ExecuteCommandLogConfigurationProperty(..),
+        mkExecuteCommandLogConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ExecuteCommandLogConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandlogconfiguration.html>
+    ExecuteCommandLogConfigurationProperty {haddock_workaround_ :: (),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandlogconfiguration.html#cfn-ecs-cluster-executecommandlogconfiguration-cloudwatchencryptionenabled>
+                                            cloudWatchEncryptionEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandlogconfiguration.html#cfn-ecs-cluster-executecommandlogconfiguration-cloudwatchloggroupname>
+                                            cloudWatchLogGroupName :: (Prelude.Maybe (Value Prelude.Text)),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandlogconfiguration.html#cfn-ecs-cluster-executecommandlogconfiguration-s3bucketname>
+                                            s3BucketName :: (Prelude.Maybe (Value Prelude.Text)),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandlogconfiguration.html#cfn-ecs-cluster-executecommandlogconfiguration-s3encryptionenabled>
+                                            s3EncryptionEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandlogconfiguration.html#cfn-ecs-cluster-executecommandlogconfiguration-s3keyprefix>
+                                            s3KeyPrefix :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkExecuteCommandLogConfigurationProperty ::
+  ExecuteCommandLogConfigurationProperty
+mkExecuteCommandLogConfigurationProperty
+  = ExecuteCommandLogConfigurationProperty
+      {haddock_workaround_ = (),
+       cloudWatchEncryptionEnabled = Prelude.Nothing,
+       cloudWatchLogGroupName = Prelude.Nothing,
+       s3BucketName = Prelude.Nothing,
+       s3EncryptionEnabled = Prelude.Nothing,
+       s3KeyPrefix = Prelude.Nothing}
+instance ToResourceProperties ExecuteCommandLogConfigurationProperty where
+  toResourceProperties ExecuteCommandLogConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Cluster.ExecuteCommandLogConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CloudWatchEncryptionEnabled"
+                              Prelude.<$> cloudWatchEncryptionEnabled,
+                            (JSON..=) "CloudWatchLogGroupName"
+                              Prelude.<$> cloudWatchLogGroupName,
+                            (JSON..=) "S3BucketName" Prelude.<$> s3BucketName,
+                            (JSON..=) "S3EncryptionEnabled" Prelude.<$> s3EncryptionEnabled,
+                            (JSON..=) "S3KeyPrefix" Prelude.<$> s3KeyPrefix])}
+instance JSON.ToJSON ExecuteCommandLogConfigurationProperty where
+  toJSON ExecuteCommandLogConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CloudWatchEncryptionEnabled"
+                 Prelude.<$> cloudWatchEncryptionEnabled,
+               (JSON..=) "CloudWatchLogGroupName"
+                 Prelude.<$> cloudWatchLogGroupName,
+               (JSON..=) "S3BucketName" Prelude.<$> s3BucketName,
+               (JSON..=) "S3EncryptionEnabled" Prelude.<$> s3EncryptionEnabled,
+               (JSON..=) "S3KeyPrefix" Prelude.<$> s3KeyPrefix]))
+instance Property "CloudWatchEncryptionEnabled" ExecuteCommandLogConfigurationProperty where
+  type PropertyType "CloudWatchEncryptionEnabled" ExecuteCommandLogConfigurationProperty = Value Prelude.Bool
+  set newValue ExecuteCommandLogConfigurationProperty {..}
+    = ExecuteCommandLogConfigurationProperty
+        {cloudWatchEncryptionEnabled = Prelude.pure newValue, ..}
+instance Property "CloudWatchLogGroupName" ExecuteCommandLogConfigurationProperty where
+  type PropertyType "CloudWatchLogGroupName" ExecuteCommandLogConfigurationProperty = Value Prelude.Text
+  set newValue ExecuteCommandLogConfigurationProperty {..}
+    = ExecuteCommandLogConfigurationProperty
+        {cloudWatchLogGroupName = Prelude.pure newValue, ..}
+instance Property "S3BucketName" ExecuteCommandLogConfigurationProperty where
+  type PropertyType "S3BucketName" ExecuteCommandLogConfigurationProperty = Value Prelude.Text
+  set newValue ExecuteCommandLogConfigurationProperty {..}
+    = ExecuteCommandLogConfigurationProperty
+        {s3BucketName = Prelude.pure newValue, ..}
+instance Property "S3EncryptionEnabled" ExecuteCommandLogConfigurationProperty where
+  type PropertyType "S3EncryptionEnabled" ExecuteCommandLogConfigurationProperty = Value Prelude.Bool
+  set newValue ExecuteCommandLogConfigurationProperty {..}
+    = ExecuteCommandLogConfigurationProperty
+        {s3EncryptionEnabled = Prelude.pure newValue, ..}
+instance Property "S3KeyPrefix" ExecuteCommandLogConfigurationProperty where
+  type PropertyType "S3KeyPrefix" ExecuteCommandLogConfigurationProperty = Value Prelude.Text
+  set newValue ExecuteCommandLogConfigurationProperty {..}
+    = ExecuteCommandLogConfigurationProperty
+        {s3KeyPrefix = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Cluster/ExecuteCommandLogConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Cluster/ExecuteCommandLogConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Cluster/ExecuteCommandLogConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Cluster.ExecuteCommandLogConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ExecuteCommandLogConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ExecuteCommandLogConfigurationProperty
+instance Prelude.Eq ExecuteCommandLogConfigurationProperty
+instance Prelude.Show ExecuteCommandLogConfigurationProperty
+instance JSON.ToJSON ExecuteCommandLogConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Cluster/ManagedStorageConfigurationProperty.hs b/gen/Stratosphere/ECS/Cluster/ManagedStorageConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Cluster/ManagedStorageConfigurationProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.ECS.Cluster.ManagedStorageConfigurationProperty (
+        ManagedStorageConfigurationProperty(..),
+        mkManagedStorageConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ManagedStorageConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-managedstorageconfiguration.html>
+    ManagedStorageConfigurationProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-managedstorageconfiguration.html#cfn-ecs-cluster-managedstorageconfiguration-fargateephemeralstoragekmskeyid>
+                                         fargateEphemeralStorageKmsKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-managedstorageconfiguration.html#cfn-ecs-cluster-managedstorageconfiguration-kmskeyid>
+                                         kmsKeyId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkManagedStorageConfigurationProperty ::
+  ManagedStorageConfigurationProperty
+mkManagedStorageConfigurationProperty
+  = ManagedStorageConfigurationProperty
+      {haddock_workaround_ = (),
+       fargateEphemeralStorageKmsKeyId = Prelude.Nothing,
+       kmsKeyId = Prelude.Nothing}
+instance ToResourceProperties ManagedStorageConfigurationProperty where
+  toResourceProperties ManagedStorageConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Cluster.ManagedStorageConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "FargateEphemeralStorageKmsKeyId"
+                              Prelude.<$> fargateEphemeralStorageKmsKeyId,
+                            (JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId])}
+instance JSON.ToJSON ManagedStorageConfigurationProperty where
+  toJSON ManagedStorageConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "FargateEphemeralStorageKmsKeyId"
+                 Prelude.<$> fargateEphemeralStorageKmsKeyId,
+               (JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId]))
+instance Property "FargateEphemeralStorageKmsKeyId" ManagedStorageConfigurationProperty where
+  type PropertyType "FargateEphemeralStorageKmsKeyId" ManagedStorageConfigurationProperty = Value Prelude.Text
+  set newValue ManagedStorageConfigurationProperty {..}
+    = ManagedStorageConfigurationProperty
+        {fargateEphemeralStorageKmsKeyId = Prelude.pure newValue, ..}
+instance Property "KmsKeyId" ManagedStorageConfigurationProperty where
+  type PropertyType "KmsKeyId" ManagedStorageConfigurationProperty = Value Prelude.Text
+  set newValue ManagedStorageConfigurationProperty {..}
+    = ManagedStorageConfigurationProperty
+        {kmsKeyId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Cluster/ManagedStorageConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Cluster/ManagedStorageConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Cluster/ManagedStorageConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Cluster.ManagedStorageConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ManagedStorageConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ManagedStorageConfigurationProperty
+instance Prelude.Eq ManagedStorageConfigurationProperty
+instance Prelude.Show ManagedStorageConfigurationProperty
+instance JSON.ToJSON ManagedStorageConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Cluster/ServiceConnectDefaultsProperty.hs b/gen/Stratosphere/ECS/Cluster/ServiceConnectDefaultsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Cluster/ServiceConnectDefaultsProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.ECS.Cluster.ServiceConnectDefaultsProperty (
+        ServiceConnectDefaultsProperty(..),
+        mkServiceConnectDefaultsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ServiceConnectDefaultsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-serviceconnectdefaults.html>
+    ServiceConnectDefaultsProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-serviceconnectdefaults.html#cfn-ecs-cluster-serviceconnectdefaults-namespace>
+                                    namespace :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkServiceConnectDefaultsProperty :: ServiceConnectDefaultsProperty
+mkServiceConnectDefaultsProperty
+  = ServiceConnectDefaultsProperty
+      {haddock_workaround_ = (), namespace = Prelude.Nothing}
+instance ToResourceProperties ServiceConnectDefaultsProperty where
+  toResourceProperties ServiceConnectDefaultsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Cluster.ServiceConnectDefaults",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Namespace" Prelude.<$> namespace])}
+instance JSON.ToJSON ServiceConnectDefaultsProperty where
+  toJSON ServiceConnectDefaultsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Namespace" Prelude.<$> namespace]))
+instance Property "Namespace" ServiceConnectDefaultsProperty where
+  type PropertyType "Namespace" ServiceConnectDefaultsProperty = Value Prelude.Text
+  set newValue ServiceConnectDefaultsProperty {..}
+    = ServiceConnectDefaultsProperty
+        {namespace = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Cluster/ServiceConnectDefaultsProperty.hs-boot b/gen/Stratosphere/ECS/Cluster/ServiceConnectDefaultsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Cluster/ServiceConnectDefaultsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Cluster.ServiceConnectDefaultsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ServiceConnectDefaultsProperty :: Prelude.Type
+instance ToResourceProperties ServiceConnectDefaultsProperty
+instance Prelude.Eq ServiceConnectDefaultsProperty
+instance Prelude.Show ServiceConnectDefaultsProperty
+instance JSON.ToJSON ServiceConnectDefaultsProperty
diff --git a/gen/Stratosphere/ECS/ClusterCapacityProviderAssociations.hs b/gen/Stratosphere/ECS/ClusterCapacityProviderAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/ClusterCapacityProviderAssociations.hs
@@ -0,0 +1,67 @@
+module Stratosphere.ECS.ClusterCapacityProviderAssociations (
+        module Exports, ClusterCapacityProviderAssociations(..),
+        mkClusterCapacityProviderAssociations
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.ClusterCapacityProviderAssociations.CapacityProviderStrategyProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ClusterCapacityProviderAssociations
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-clustercapacityproviderassociations.html>
+    ClusterCapacityProviderAssociations {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-clustercapacityproviderassociations.html#cfn-ecs-clustercapacityproviderassociations-capacityproviders>
+                                         capacityProviders :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-clustercapacityproviderassociations.html#cfn-ecs-clustercapacityproviderassociations-cluster>
+                                         cluster :: (Value Prelude.Text),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-clustercapacityproviderassociations.html#cfn-ecs-clustercapacityproviderassociations-defaultcapacityproviderstrategy>
+                                         defaultCapacityProviderStrategy :: [CapacityProviderStrategyProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkClusterCapacityProviderAssociations ::
+  Value Prelude.Text
+  -> [CapacityProviderStrategyProperty]
+     -> ClusterCapacityProviderAssociations
+mkClusterCapacityProviderAssociations
+  cluster
+  defaultCapacityProviderStrategy
+  = ClusterCapacityProviderAssociations
+      {haddock_workaround_ = (), cluster = cluster,
+       defaultCapacityProviderStrategy = defaultCapacityProviderStrategy,
+       capacityProviders = Prelude.Nothing}
+instance ToResourceProperties ClusterCapacityProviderAssociations where
+  toResourceProperties ClusterCapacityProviderAssociations {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::ClusterCapacityProviderAssociations",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Cluster" JSON..= cluster,
+                            "DefaultCapacityProviderStrategy"
+                              JSON..= defaultCapacityProviderStrategy]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CapacityProviders" Prelude.<$> capacityProviders]))}
+instance JSON.ToJSON ClusterCapacityProviderAssociations where
+  toJSON ClusterCapacityProviderAssociations {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Cluster" JSON..= cluster,
+               "DefaultCapacityProviderStrategy"
+                 JSON..= defaultCapacityProviderStrategy]
+              (Prelude.catMaybes
+                 [(JSON..=) "CapacityProviders" Prelude.<$> capacityProviders])))
+instance Property "CapacityProviders" ClusterCapacityProviderAssociations where
+  type PropertyType "CapacityProviders" ClusterCapacityProviderAssociations = ValueList Prelude.Text
+  set newValue ClusterCapacityProviderAssociations {..}
+    = ClusterCapacityProviderAssociations
+        {capacityProviders = Prelude.pure newValue, ..}
+instance Property "Cluster" ClusterCapacityProviderAssociations where
+  type PropertyType "Cluster" ClusterCapacityProviderAssociations = Value Prelude.Text
+  set newValue ClusterCapacityProviderAssociations {..}
+    = ClusterCapacityProviderAssociations {cluster = newValue, ..}
+instance Property "DefaultCapacityProviderStrategy" ClusterCapacityProviderAssociations where
+  type PropertyType "DefaultCapacityProviderStrategy" ClusterCapacityProviderAssociations = [CapacityProviderStrategyProperty]
+  set newValue ClusterCapacityProviderAssociations {..}
+    = ClusterCapacityProviderAssociations
+        {defaultCapacityProviderStrategy = newValue, ..}
diff --git a/gen/Stratosphere/ECS/ClusterCapacityProviderAssociations/CapacityProviderStrategyProperty.hs b/gen/Stratosphere/ECS/ClusterCapacityProviderAssociations/CapacityProviderStrategyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/ClusterCapacityProviderAssociations/CapacityProviderStrategyProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.ECS.ClusterCapacityProviderAssociations.CapacityProviderStrategyProperty (
+        CapacityProviderStrategyProperty(..),
+        mkCapacityProviderStrategyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CapacityProviderStrategyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-clustercapacityproviderassociations-capacityproviderstrategy.html>
+    CapacityProviderStrategyProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-clustercapacityproviderassociations-capacityproviderstrategy.html#cfn-ecs-clustercapacityproviderassociations-capacityproviderstrategy-base>
+                                      base :: (Prelude.Maybe (Value Prelude.Integer)),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-clustercapacityproviderassociations-capacityproviderstrategy.html#cfn-ecs-clustercapacityproviderassociations-capacityproviderstrategy-capacityprovider>
+                                      capacityProvider :: (Value Prelude.Text),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-clustercapacityproviderassociations-capacityproviderstrategy.html#cfn-ecs-clustercapacityproviderassociations-capacityproviderstrategy-weight>
+                                      weight :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityProviderStrategyProperty ::
+  Value Prelude.Text -> CapacityProviderStrategyProperty
+mkCapacityProviderStrategyProperty capacityProvider
+  = CapacityProviderStrategyProperty
+      {haddock_workaround_ = (), capacityProvider = capacityProvider,
+       base = Prelude.Nothing, weight = Prelude.Nothing}
+instance ToResourceProperties CapacityProviderStrategyProperty where
+  toResourceProperties CapacityProviderStrategyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::ClusterCapacityProviderAssociations.CapacityProviderStrategy",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["CapacityProvider" JSON..= capacityProvider]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Base" Prelude.<$> base,
+                               (JSON..=) "Weight" Prelude.<$> weight]))}
+instance JSON.ToJSON CapacityProviderStrategyProperty where
+  toJSON CapacityProviderStrategyProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["CapacityProvider" JSON..= capacityProvider]
+              (Prelude.catMaybes
+                 [(JSON..=) "Base" Prelude.<$> base,
+                  (JSON..=) "Weight" Prelude.<$> weight])))
+instance Property "Base" CapacityProviderStrategyProperty where
+  type PropertyType "Base" CapacityProviderStrategyProperty = Value Prelude.Integer
+  set newValue CapacityProviderStrategyProperty {..}
+    = CapacityProviderStrategyProperty
+        {base = Prelude.pure newValue, ..}
+instance Property "CapacityProvider" CapacityProviderStrategyProperty where
+  type PropertyType "CapacityProvider" CapacityProviderStrategyProperty = Value Prelude.Text
+  set newValue CapacityProviderStrategyProperty {..}
+    = CapacityProviderStrategyProperty
+        {capacityProvider = newValue, ..}
+instance Property "Weight" CapacityProviderStrategyProperty where
+  type PropertyType "Weight" CapacityProviderStrategyProperty = Value Prelude.Integer
+  set newValue CapacityProviderStrategyProperty {..}
+    = CapacityProviderStrategyProperty
+        {weight = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/ClusterCapacityProviderAssociations/CapacityProviderStrategyProperty.hs-boot b/gen/Stratosphere/ECS/ClusterCapacityProviderAssociations/CapacityProviderStrategyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/ClusterCapacityProviderAssociations/CapacityProviderStrategyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.ClusterCapacityProviderAssociations.CapacityProviderStrategyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CapacityProviderStrategyProperty :: Prelude.Type
+instance ToResourceProperties CapacityProviderStrategyProperty
+instance Prelude.Eq CapacityProviderStrategyProperty
+instance Prelude.Show CapacityProviderStrategyProperty
+instance JSON.ToJSON CapacityProviderStrategyProperty
diff --git a/gen/Stratosphere/ECS/PrimaryTaskSet.hs b/gen/Stratosphere/ECS/PrimaryTaskSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/PrimaryTaskSet.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ECS.PrimaryTaskSet (
+        PrimaryTaskSet(..), mkPrimaryTaskSet
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PrimaryTaskSet
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-primarytaskset.html>
+    PrimaryTaskSet {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-primarytaskset.html#cfn-ecs-primarytaskset-cluster>
+                    cluster :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-primarytaskset.html#cfn-ecs-primarytaskset-service>
+                    service :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-primarytaskset.html#cfn-ecs-primarytaskset-tasksetid>
+                    taskSetId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPrimaryTaskSet ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> Value Prelude.Text -> PrimaryTaskSet
+mkPrimaryTaskSet cluster service taskSetId
+  = PrimaryTaskSet
+      {haddock_workaround_ = (), cluster = cluster, service = service,
+       taskSetId = taskSetId}
+instance ToResourceProperties PrimaryTaskSet where
+  toResourceProperties PrimaryTaskSet {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::PrimaryTaskSet",
+         supportsTags = Prelude.False,
+         properties = ["Cluster" JSON..= cluster, "Service" JSON..= service,
+                       "TaskSetId" JSON..= taskSetId]}
+instance JSON.ToJSON PrimaryTaskSet where
+  toJSON PrimaryTaskSet {..}
+    = JSON.object
+        ["Cluster" JSON..= cluster, "Service" JSON..= service,
+         "TaskSetId" JSON..= taskSetId]
+instance Property "Cluster" PrimaryTaskSet where
+  type PropertyType "Cluster" PrimaryTaskSet = Value Prelude.Text
+  set newValue PrimaryTaskSet {..}
+    = PrimaryTaskSet {cluster = newValue, ..}
+instance Property "Service" PrimaryTaskSet where
+  type PropertyType "Service" PrimaryTaskSet = Value Prelude.Text
+  set newValue PrimaryTaskSet {..}
+    = PrimaryTaskSet {service = newValue, ..}
+instance Property "TaskSetId" PrimaryTaskSet where
+  type PropertyType "TaskSetId" PrimaryTaskSet = Value Prelude.Text
+  set newValue PrimaryTaskSet {..}
+    = PrimaryTaskSet {taskSetId = newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service.hs b/gen/Stratosphere/ECS/Service.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service.hs
@@ -0,0 +1,282 @@
+module Stratosphere.ECS.Service (
+        module Exports, Service(..), mkService
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.Service.CapacityProviderStrategyItemProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.DeploymentConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.DeploymentControllerProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.ForceNewDeploymentProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.LoadBalancerProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.NetworkConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.PlacementConstraintProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.PlacementStrategyProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.ServiceConnectConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.ServiceRegistryProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.ServiceVolumeConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.VpcLatticeConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Service
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html>
+    Service {haddock_workaround_ :: (),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-availabilityzonerebalancing>
+             availabilityZoneRebalancing :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-capacityproviderstrategy>
+             capacityProviderStrategy :: (Prelude.Maybe [CapacityProviderStrategyItemProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-cluster>
+             cluster :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-deploymentconfiguration>
+             deploymentConfiguration :: (Prelude.Maybe DeploymentConfigurationProperty),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-deploymentcontroller>
+             deploymentController :: (Prelude.Maybe DeploymentControllerProperty),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-desiredcount>
+             desiredCount :: (Prelude.Maybe (Value Prelude.Integer)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-enableecsmanagedtags>
+             enableECSManagedTags :: (Prelude.Maybe (Value Prelude.Bool)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-enableexecutecommand>
+             enableExecuteCommand :: (Prelude.Maybe (Value Prelude.Bool)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-forcenewdeployment>
+             forceNewDeployment :: (Prelude.Maybe ForceNewDeploymentProperty),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-healthcheckgraceperiodseconds>
+             healthCheckGracePeriodSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-launchtype>
+             launchType :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-loadbalancers>
+             loadBalancers :: (Prelude.Maybe [LoadBalancerProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-networkconfiguration>
+             networkConfiguration :: (Prelude.Maybe NetworkConfigurationProperty),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-placementconstraints>
+             placementConstraints :: (Prelude.Maybe [PlacementConstraintProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-placementstrategies>
+             placementStrategies :: (Prelude.Maybe [PlacementStrategyProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-platformversion>
+             platformVersion :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-propagatetags>
+             propagateTags :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-role>
+             role :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-schedulingstrategy>
+             schedulingStrategy :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-serviceconnectconfiguration>
+             serviceConnectConfiguration :: (Prelude.Maybe ServiceConnectConfigurationProperty),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-servicename>
+             serviceName :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-serviceregistries>
+             serviceRegistries :: (Prelude.Maybe [ServiceRegistryProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-tags>
+             tags :: (Prelude.Maybe [Tag]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-taskdefinition>
+             taskDefinition :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-volumeconfigurations>
+             volumeConfigurations :: (Prelude.Maybe [ServiceVolumeConfigurationProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-vpclatticeconfigurations>
+             vpcLatticeConfigurations :: (Prelude.Maybe [VpcLatticeConfigurationProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkService :: Service
+mkService
+  = Service
+      {haddock_workaround_ = (),
+       availabilityZoneRebalancing = Prelude.Nothing,
+       capacityProviderStrategy = Prelude.Nothing,
+       cluster = Prelude.Nothing,
+       deploymentConfiguration = Prelude.Nothing,
+       deploymentController = Prelude.Nothing,
+       desiredCount = Prelude.Nothing,
+       enableECSManagedTags = Prelude.Nothing,
+       enableExecuteCommand = Prelude.Nothing,
+       forceNewDeployment = Prelude.Nothing,
+       healthCheckGracePeriodSeconds = Prelude.Nothing,
+       launchType = Prelude.Nothing, loadBalancers = Prelude.Nothing,
+       networkConfiguration = Prelude.Nothing,
+       placementConstraints = Prelude.Nothing,
+       placementStrategies = Prelude.Nothing,
+       platformVersion = Prelude.Nothing, propagateTags = Prelude.Nothing,
+       role = Prelude.Nothing, schedulingStrategy = Prelude.Nothing,
+       serviceConnectConfiguration = Prelude.Nothing,
+       serviceName = Prelude.Nothing, serviceRegistries = Prelude.Nothing,
+       tags = Prelude.Nothing, taskDefinition = Prelude.Nothing,
+       volumeConfigurations = Prelude.Nothing,
+       vpcLatticeConfigurations = Prelude.Nothing}
+instance ToResourceProperties Service where
+  toResourceProperties Service {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AvailabilityZoneRebalancing"
+                              Prelude.<$> availabilityZoneRebalancing,
+                            (JSON..=) "CapacityProviderStrategy"
+                              Prelude.<$> capacityProviderStrategy,
+                            (JSON..=) "Cluster" Prelude.<$> cluster,
+                            (JSON..=) "DeploymentConfiguration"
+                              Prelude.<$> deploymentConfiguration,
+                            (JSON..=) "DeploymentController" Prelude.<$> deploymentController,
+                            (JSON..=) "DesiredCount" Prelude.<$> desiredCount,
+                            (JSON..=) "EnableECSManagedTags" Prelude.<$> enableECSManagedTags,
+                            (JSON..=) "EnableExecuteCommand" Prelude.<$> enableExecuteCommand,
+                            (JSON..=) "ForceNewDeployment" Prelude.<$> forceNewDeployment,
+                            (JSON..=) "HealthCheckGracePeriodSeconds"
+                              Prelude.<$> healthCheckGracePeriodSeconds,
+                            (JSON..=) "LaunchType" Prelude.<$> launchType,
+                            (JSON..=) "LoadBalancers" Prelude.<$> loadBalancers,
+                            (JSON..=) "NetworkConfiguration" Prelude.<$> networkConfiguration,
+                            (JSON..=) "PlacementConstraints" Prelude.<$> placementConstraints,
+                            (JSON..=) "PlacementStrategies" Prelude.<$> placementStrategies,
+                            (JSON..=) "PlatformVersion" Prelude.<$> platformVersion,
+                            (JSON..=) "PropagateTags" Prelude.<$> propagateTags,
+                            (JSON..=) "Role" Prelude.<$> role,
+                            (JSON..=) "SchedulingStrategy" Prelude.<$> schedulingStrategy,
+                            (JSON..=) "ServiceConnectConfiguration"
+                              Prelude.<$> serviceConnectConfiguration,
+                            (JSON..=) "ServiceName" Prelude.<$> serviceName,
+                            (JSON..=) "ServiceRegistries" Prelude.<$> serviceRegistries,
+                            (JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "TaskDefinition" Prelude.<$> taskDefinition,
+                            (JSON..=) "VolumeConfigurations" Prelude.<$> volumeConfigurations,
+                            (JSON..=) "VpcLatticeConfigurations"
+                              Prelude.<$> vpcLatticeConfigurations])}
+instance JSON.ToJSON Service where
+  toJSON Service {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AvailabilityZoneRebalancing"
+                 Prelude.<$> availabilityZoneRebalancing,
+               (JSON..=) "CapacityProviderStrategy"
+                 Prelude.<$> capacityProviderStrategy,
+               (JSON..=) "Cluster" Prelude.<$> cluster,
+               (JSON..=) "DeploymentConfiguration"
+                 Prelude.<$> deploymentConfiguration,
+               (JSON..=) "DeploymentController" Prelude.<$> deploymentController,
+               (JSON..=) "DesiredCount" Prelude.<$> desiredCount,
+               (JSON..=) "EnableECSManagedTags" Prelude.<$> enableECSManagedTags,
+               (JSON..=) "EnableExecuteCommand" Prelude.<$> enableExecuteCommand,
+               (JSON..=) "ForceNewDeployment" Prelude.<$> forceNewDeployment,
+               (JSON..=) "HealthCheckGracePeriodSeconds"
+                 Prelude.<$> healthCheckGracePeriodSeconds,
+               (JSON..=) "LaunchType" Prelude.<$> launchType,
+               (JSON..=) "LoadBalancers" Prelude.<$> loadBalancers,
+               (JSON..=) "NetworkConfiguration" Prelude.<$> networkConfiguration,
+               (JSON..=) "PlacementConstraints" Prelude.<$> placementConstraints,
+               (JSON..=) "PlacementStrategies" Prelude.<$> placementStrategies,
+               (JSON..=) "PlatformVersion" Prelude.<$> platformVersion,
+               (JSON..=) "PropagateTags" Prelude.<$> propagateTags,
+               (JSON..=) "Role" Prelude.<$> role,
+               (JSON..=) "SchedulingStrategy" Prelude.<$> schedulingStrategy,
+               (JSON..=) "ServiceConnectConfiguration"
+                 Prelude.<$> serviceConnectConfiguration,
+               (JSON..=) "ServiceName" Prelude.<$> serviceName,
+               (JSON..=) "ServiceRegistries" Prelude.<$> serviceRegistries,
+               (JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "TaskDefinition" Prelude.<$> taskDefinition,
+               (JSON..=) "VolumeConfigurations" Prelude.<$> volumeConfigurations,
+               (JSON..=) "VpcLatticeConfigurations"
+                 Prelude.<$> vpcLatticeConfigurations]))
+instance Property "AvailabilityZoneRebalancing" Service where
+  type PropertyType "AvailabilityZoneRebalancing" Service = Value Prelude.Text
+  set newValue Service {..}
+    = Service {availabilityZoneRebalancing = Prelude.pure newValue, ..}
+instance Property "CapacityProviderStrategy" Service where
+  type PropertyType "CapacityProviderStrategy" Service = [CapacityProviderStrategyItemProperty]
+  set newValue Service {..}
+    = Service {capacityProviderStrategy = Prelude.pure newValue, ..}
+instance Property "Cluster" Service where
+  type PropertyType "Cluster" Service = Value Prelude.Text
+  set newValue Service {..}
+    = Service {cluster = Prelude.pure newValue, ..}
+instance Property "DeploymentConfiguration" Service where
+  type PropertyType "DeploymentConfiguration" Service = DeploymentConfigurationProperty
+  set newValue Service {..}
+    = Service {deploymentConfiguration = Prelude.pure newValue, ..}
+instance Property "DeploymentController" Service where
+  type PropertyType "DeploymentController" Service = DeploymentControllerProperty
+  set newValue Service {..}
+    = Service {deploymentController = Prelude.pure newValue, ..}
+instance Property "DesiredCount" Service where
+  type PropertyType "DesiredCount" Service = Value Prelude.Integer
+  set newValue Service {..}
+    = Service {desiredCount = Prelude.pure newValue, ..}
+instance Property "EnableECSManagedTags" Service where
+  type PropertyType "EnableECSManagedTags" Service = Value Prelude.Bool
+  set newValue Service {..}
+    = Service {enableECSManagedTags = Prelude.pure newValue, ..}
+instance Property "EnableExecuteCommand" Service where
+  type PropertyType "EnableExecuteCommand" Service = Value Prelude.Bool
+  set newValue Service {..}
+    = Service {enableExecuteCommand = Prelude.pure newValue, ..}
+instance Property "ForceNewDeployment" Service where
+  type PropertyType "ForceNewDeployment" Service = ForceNewDeploymentProperty
+  set newValue Service {..}
+    = Service {forceNewDeployment = Prelude.pure newValue, ..}
+instance Property "HealthCheckGracePeriodSeconds" Service where
+  type PropertyType "HealthCheckGracePeriodSeconds" Service = Value Prelude.Integer
+  set newValue Service {..}
+    = Service
+        {healthCheckGracePeriodSeconds = Prelude.pure newValue, ..}
+instance Property "LaunchType" Service where
+  type PropertyType "LaunchType" Service = Value Prelude.Text
+  set newValue Service {..}
+    = Service {launchType = Prelude.pure newValue, ..}
+instance Property "LoadBalancers" Service where
+  type PropertyType "LoadBalancers" Service = [LoadBalancerProperty]
+  set newValue Service {..}
+    = Service {loadBalancers = Prelude.pure newValue, ..}
+instance Property "NetworkConfiguration" Service where
+  type PropertyType "NetworkConfiguration" Service = NetworkConfigurationProperty
+  set newValue Service {..}
+    = Service {networkConfiguration = Prelude.pure newValue, ..}
+instance Property "PlacementConstraints" Service where
+  type PropertyType "PlacementConstraints" Service = [PlacementConstraintProperty]
+  set newValue Service {..}
+    = Service {placementConstraints = Prelude.pure newValue, ..}
+instance Property "PlacementStrategies" Service where
+  type PropertyType "PlacementStrategies" Service = [PlacementStrategyProperty]
+  set newValue Service {..}
+    = Service {placementStrategies = Prelude.pure newValue, ..}
+instance Property "PlatformVersion" Service where
+  type PropertyType "PlatformVersion" Service = Value Prelude.Text
+  set newValue Service {..}
+    = Service {platformVersion = Prelude.pure newValue, ..}
+instance Property "PropagateTags" Service where
+  type PropertyType "PropagateTags" Service = Value Prelude.Text
+  set newValue Service {..}
+    = Service {propagateTags = Prelude.pure newValue, ..}
+instance Property "Role" Service where
+  type PropertyType "Role" Service = Value Prelude.Text
+  set newValue Service {..}
+    = Service {role = Prelude.pure newValue, ..}
+instance Property "SchedulingStrategy" Service where
+  type PropertyType "SchedulingStrategy" Service = Value Prelude.Text
+  set newValue Service {..}
+    = Service {schedulingStrategy = Prelude.pure newValue, ..}
+instance Property "ServiceConnectConfiguration" Service where
+  type PropertyType "ServiceConnectConfiguration" Service = ServiceConnectConfigurationProperty
+  set newValue Service {..}
+    = Service {serviceConnectConfiguration = Prelude.pure newValue, ..}
+instance Property "ServiceName" Service where
+  type PropertyType "ServiceName" Service = Value Prelude.Text
+  set newValue Service {..}
+    = Service {serviceName = Prelude.pure newValue, ..}
+instance Property "ServiceRegistries" Service where
+  type PropertyType "ServiceRegistries" Service = [ServiceRegistryProperty]
+  set newValue Service {..}
+    = Service {serviceRegistries = Prelude.pure newValue, ..}
+instance Property "Tags" Service where
+  type PropertyType "Tags" Service = [Tag]
+  set newValue Service {..}
+    = Service {tags = Prelude.pure newValue, ..}
+instance Property "TaskDefinition" Service where
+  type PropertyType "TaskDefinition" Service = Value Prelude.Text
+  set newValue Service {..}
+    = Service {taskDefinition = Prelude.pure newValue, ..}
+instance Property "VolumeConfigurations" Service where
+  type PropertyType "VolumeConfigurations" Service = [ServiceVolumeConfigurationProperty]
+  set newValue Service {..}
+    = Service {volumeConfigurations = Prelude.pure newValue, ..}
+instance Property "VpcLatticeConfigurations" Service where
+  type PropertyType "VpcLatticeConfigurations" Service = [VpcLatticeConfigurationProperty]
+  set newValue Service {..}
+    = Service {vpcLatticeConfigurations = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/AdvancedConfigurationProperty.hs b/gen/Stratosphere/ECS/Service/AdvancedConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/AdvancedConfigurationProperty.hs
@@ -0,0 +1,72 @@
+module Stratosphere.ECS.Service.AdvancedConfigurationProperty (
+        AdvancedConfigurationProperty(..), mkAdvancedConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AdvancedConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-advancedconfiguration.html>
+    AdvancedConfigurationProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-advancedconfiguration.html#cfn-ecs-service-advancedconfiguration-alternatetargetgrouparn>
+                                   alternateTargetGroupArn :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-advancedconfiguration.html#cfn-ecs-service-advancedconfiguration-productionlistenerrule>
+                                   productionListenerRule :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-advancedconfiguration.html#cfn-ecs-service-advancedconfiguration-rolearn>
+                                   roleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-advancedconfiguration.html#cfn-ecs-service-advancedconfiguration-testlistenerrule>
+                                   testListenerRule :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAdvancedConfigurationProperty ::
+  Value Prelude.Text -> AdvancedConfigurationProperty
+mkAdvancedConfigurationProperty alternateTargetGroupArn
+  = AdvancedConfigurationProperty
+      {haddock_workaround_ = (),
+       alternateTargetGroupArn = alternateTargetGroupArn,
+       productionListenerRule = Prelude.Nothing,
+       roleArn = Prelude.Nothing, testListenerRule = Prelude.Nothing}
+instance ToResourceProperties AdvancedConfigurationProperty where
+  toResourceProperties AdvancedConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.AdvancedConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AlternateTargetGroupArn" JSON..= alternateTargetGroupArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ProductionListenerRule"
+                                 Prelude.<$> productionListenerRule,
+                               (JSON..=) "RoleArn" Prelude.<$> roleArn,
+                               (JSON..=) "TestListenerRule" Prelude.<$> testListenerRule]))}
+instance JSON.ToJSON AdvancedConfigurationProperty where
+  toJSON AdvancedConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AlternateTargetGroupArn" JSON..= alternateTargetGroupArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "ProductionListenerRule"
+                    Prelude.<$> productionListenerRule,
+                  (JSON..=) "RoleArn" Prelude.<$> roleArn,
+                  (JSON..=) "TestListenerRule" Prelude.<$> testListenerRule])))
+instance Property "AlternateTargetGroupArn" AdvancedConfigurationProperty where
+  type PropertyType "AlternateTargetGroupArn" AdvancedConfigurationProperty = Value Prelude.Text
+  set newValue AdvancedConfigurationProperty {..}
+    = AdvancedConfigurationProperty
+        {alternateTargetGroupArn = newValue, ..}
+instance Property "ProductionListenerRule" AdvancedConfigurationProperty where
+  type PropertyType "ProductionListenerRule" AdvancedConfigurationProperty = Value Prelude.Text
+  set newValue AdvancedConfigurationProperty {..}
+    = AdvancedConfigurationProperty
+        {productionListenerRule = Prelude.pure newValue, ..}
+instance Property "RoleArn" AdvancedConfigurationProperty where
+  type PropertyType "RoleArn" AdvancedConfigurationProperty = Value Prelude.Text
+  set newValue AdvancedConfigurationProperty {..}
+    = AdvancedConfigurationProperty
+        {roleArn = Prelude.pure newValue, ..}
+instance Property "TestListenerRule" AdvancedConfigurationProperty where
+  type PropertyType "TestListenerRule" AdvancedConfigurationProperty = Value Prelude.Text
+  set newValue AdvancedConfigurationProperty {..}
+    = AdvancedConfigurationProperty
+        {testListenerRule = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/AdvancedConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Service/AdvancedConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/AdvancedConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.AdvancedConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AdvancedConfigurationProperty :: Prelude.Type
+instance ToResourceProperties AdvancedConfigurationProperty
+instance Prelude.Eq AdvancedConfigurationProperty
+instance Prelude.Show AdvancedConfigurationProperty
+instance JSON.ToJSON AdvancedConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Service/AwsVpcConfigurationProperty.hs b/gen/Stratosphere/ECS/Service/AwsVpcConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/AwsVpcConfigurationProperty.hs
@@ -0,0 +1,55 @@
+module Stratosphere.ECS.Service.AwsVpcConfigurationProperty (
+        AwsVpcConfigurationProperty(..), mkAwsVpcConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AwsVpcConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-awsvpcconfiguration.html>
+    AwsVpcConfigurationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-awsvpcconfiguration.html#cfn-ecs-service-awsvpcconfiguration-assignpublicip>
+                                 assignPublicIp :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-awsvpcconfiguration.html#cfn-ecs-service-awsvpcconfiguration-securitygroups>
+                                 securityGroups :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-awsvpcconfiguration.html#cfn-ecs-service-awsvpcconfiguration-subnets>
+                                 subnets :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAwsVpcConfigurationProperty :: AwsVpcConfigurationProperty
+mkAwsVpcConfigurationProperty
+  = AwsVpcConfigurationProperty
+      {haddock_workaround_ = (), assignPublicIp = Prelude.Nothing,
+       securityGroups = Prelude.Nothing, subnets = Prelude.Nothing}
+instance ToResourceProperties AwsVpcConfigurationProperty where
+  toResourceProperties AwsVpcConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.AwsVpcConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AssignPublicIp" Prelude.<$> assignPublicIp,
+                            (JSON..=) "SecurityGroups" Prelude.<$> securityGroups,
+                            (JSON..=) "Subnets" Prelude.<$> subnets])}
+instance JSON.ToJSON AwsVpcConfigurationProperty where
+  toJSON AwsVpcConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AssignPublicIp" Prelude.<$> assignPublicIp,
+               (JSON..=) "SecurityGroups" Prelude.<$> securityGroups,
+               (JSON..=) "Subnets" Prelude.<$> subnets]))
+instance Property "AssignPublicIp" AwsVpcConfigurationProperty where
+  type PropertyType "AssignPublicIp" AwsVpcConfigurationProperty = Value Prelude.Text
+  set newValue AwsVpcConfigurationProperty {..}
+    = AwsVpcConfigurationProperty
+        {assignPublicIp = Prelude.pure newValue, ..}
+instance Property "SecurityGroups" AwsVpcConfigurationProperty where
+  type PropertyType "SecurityGroups" AwsVpcConfigurationProperty = ValueList Prelude.Text
+  set newValue AwsVpcConfigurationProperty {..}
+    = AwsVpcConfigurationProperty
+        {securityGroups = Prelude.pure newValue, ..}
+instance Property "Subnets" AwsVpcConfigurationProperty where
+  type PropertyType "Subnets" AwsVpcConfigurationProperty = ValueList Prelude.Text
+  set newValue AwsVpcConfigurationProperty {..}
+    = AwsVpcConfigurationProperty {subnets = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/AwsVpcConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Service/AwsVpcConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/AwsVpcConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.AwsVpcConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AwsVpcConfigurationProperty :: Prelude.Type
+instance ToResourceProperties AwsVpcConfigurationProperty
+instance Prelude.Eq AwsVpcConfigurationProperty
+instance Prelude.Show AwsVpcConfigurationProperty
+instance JSON.ToJSON AwsVpcConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Service/CanaryConfigurationProperty.hs b/gen/Stratosphere/ECS/Service/CanaryConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/CanaryConfigurationProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.ECS.Service.CanaryConfigurationProperty (
+        CanaryConfigurationProperty(..), mkCanaryConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CanaryConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-canaryconfiguration.html>
+    CanaryConfigurationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-canaryconfiguration.html#cfn-ecs-service-canaryconfiguration-canarybaketimeinminutes>
+                                 canaryBakeTimeInMinutes :: (Prelude.Maybe (Value Prelude.Integer)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-canaryconfiguration.html#cfn-ecs-service-canaryconfiguration-canarypercent>
+                                 canaryPercent :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCanaryConfigurationProperty :: CanaryConfigurationProperty
+mkCanaryConfigurationProperty
+  = CanaryConfigurationProperty
+      {haddock_workaround_ = (),
+       canaryBakeTimeInMinutes = Prelude.Nothing,
+       canaryPercent = Prelude.Nothing}
+instance ToResourceProperties CanaryConfigurationProperty where
+  toResourceProperties CanaryConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.CanaryConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CanaryBakeTimeInMinutes"
+                              Prelude.<$> canaryBakeTimeInMinutes,
+                            (JSON..=) "CanaryPercent" Prelude.<$> canaryPercent])}
+instance JSON.ToJSON CanaryConfigurationProperty where
+  toJSON CanaryConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CanaryBakeTimeInMinutes"
+                 Prelude.<$> canaryBakeTimeInMinutes,
+               (JSON..=) "CanaryPercent" Prelude.<$> canaryPercent]))
+instance Property "CanaryBakeTimeInMinutes" CanaryConfigurationProperty where
+  type PropertyType "CanaryBakeTimeInMinutes" CanaryConfigurationProperty = Value Prelude.Integer
+  set newValue CanaryConfigurationProperty {..}
+    = CanaryConfigurationProperty
+        {canaryBakeTimeInMinutes = Prelude.pure newValue, ..}
+instance Property "CanaryPercent" CanaryConfigurationProperty where
+  type PropertyType "CanaryPercent" CanaryConfigurationProperty = Value Prelude.Double
+  set newValue CanaryConfigurationProperty {..}
+    = CanaryConfigurationProperty
+        {canaryPercent = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/CanaryConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Service/CanaryConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/CanaryConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.CanaryConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CanaryConfigurationProperty :: Prelude.Type
+instance ToResourceProperties CanaryConfigurationProperty
+instance Prelude.Eq CanaryConfigurationProperty
+instance Prelude.Show CanaryConfigurationProperty
+instance JSON.ToJSON CanaryConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Service/CapacityProviderStrategyItemProperty.hs b/gen/Stratosphere/ECS/Service/CapacityProviderStrategyItemProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/CapacityProviderStrategyItemProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.ECS.Service.CapacityProviderStrategyItemProperty (
+        CapacityProviderStrategyItemProperty(..),
+        mkCapacityProviderStrategyItemProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CapacityProviderStrategyItemProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-capacityproviderstrategyitem.html>
+    CapacityProviderStrategyItemProperty {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-capacityproviderstrategyitem.html#cfn-ecs-service-capacityproviderstrategyitem-base>
+                                          base :: (Prelude.Maybe (Value Prelude.Integer)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-capacityproviderstrategyitem.html#cfn-ecs-service-capacityproviderstrategyitem-capacityprovider>
+                                          capacityProvider :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-capacityproviderstrategyitem.html#cfn-ecs-service-capacityproviderstrategyitem-weight>
+                                          weight :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityProviderStrategyItemProperty ::
+  CapacityProviderStrategyItemProperty
+mkCapacityProviderStrategyItemProperty
+  = CapacityProviderStrategyItemProperty
+      {haddock_workaround_ = (), base = Prelude.Nothing,
+       capacityProvider = Prelude.Nothing, weight = Prelude.Nothing}
+instance ToResourceProperties CapacityProviderStrategyItemProperty where
+  toResourceProperties CapacityProviderStrategyItemProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.CapacityProviderStrategyItem",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Base" Prelude.<$> base,
+                            (JSON..=) "CapacityProvider" Prelude.<$> capacityProvider,
+                            (JSON..=) "Weight" Prelude.<$> weight])}
+instance JSON.ToJSON CapacityProviderStrategyItemProperty where
+  toJSON CapacityProviderStrategyItemProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Base" Prelude.<$> base,
+               (JSON..=) "CapacityProvider" Prelude.<$> capacityProvider,
+               (JSON..=) "Weight" Prelude.<$> weight]))
+instance Property "Base" CapacityProviderStrategyItemProperty where
+  type PropertyType "Base" CapacityProviderStrategyItemProperty = Value Prelude.Integer
+  set newValue CapacityProviderStrategyItemProperty {..}
+    = CapacityProviderStrategyItemProperty
+        {base = Prelude.pure newValue, ..}
+instance Property "CapacityProvider" CapacityProviderStrategyItemProperty where
+  type PropertyType "CapacityProvider" CapacityProviderStrategyItemProperty = Value Prelude.Text
+  set newValue CapacityProviderStrategyItemProperty {..}
+    = CapacityProviderStrategyItemProperty
+        {capacityProvider = Prelude.pure newValue, ..}
+instance Property "Weight" CapacityProviderStrategyItemProperty where
+  type PropertyType "Weight" CapacityProviderStrategyItemProperty = Value Prelude.Integer
+  set newValue CapacityProviderStrategyItemProperty {..}
+    = CapacityProviderStrategyItemProperty
+        {weight = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/CapacityProviderStrategyItemProperty.hs-boot b/gen/Stratosphere/ECS/Service/CapacityProviderStrategyItemProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/CapacityProviderStrategyItemProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.CapacityProviderStrategyItemProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CapacityProviderStrategyItemProperty :: Prelude.Type
+instance ToResourceProperties CapacityProviderStrategyItemProperty
+instance Prelude.Eq CapacityProviderStrategyItemProperty
+instance Prelude.Show CapacityProviderStrategyItemProperty
+instance JSON.ToJSON CapacityProviderStrategyItemProperty
diff --git a/gen/Stratosphere/ECS/Service/DeploymentAlarmsProperty.hs b/gen/Stratosphere/ECS/Service/DeploymentAlarmsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/DeploymentAlarmsProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.ECS.Service.DeploymentAlarmsProperty (
+        DeploymentAlarmsProperty(..), mkDeploymentAlarmsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DeploymentAlarmsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentalarms.html>
+    DeploymentAlarmsProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentalarms.html#cfn-ecs-service-deploymentalarms-alarmnames>
+                              alarmNames :: (ValueList Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentalarms.html#cfn-ecs-service-deploymentalarms-enable>
+                              enable :: (Value Prelude.Bool),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentalarms.html#cfn-ecs-service-deploymentalarms-rollback>
+                              rollback :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDeploymentAlarmsProperty ::
+  ValueList Prelude.Text
+  -> Value Prelude.Bool
+     -> Value Prelude.Bool -> DeploymentAlarmsProperty
+mkDeploymentAlarmsProperty alarmNames enable rollback
+  = DeploymentAlarmsProperty
+      {haddock_workaround_ = (), alarmNames = alarmNames,
+       enable = enable, rollback = rollback}
+instance ToResourceProperties DeploymentAlarmsProperty where
+  toResourceProperties DeploymentAlarmsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.DeploymentAlarms",
+         supportsTags = Prelude.False,
+         properties = ["AlarmNames" JSON..= alarmNames,
+                       "Enable" JSON..= enable, "Rollback" JSON..= rollback]}
+instance JSON.ToJSON DeploymentAlarmsProperty where
+  toJSON DeploymentAlarmsProperty {..}
+    = JSON.object
+        ["AlarmNames" JSON..= alarmNames, "Enable" JSON..= enable,
+         "Rollback" JSON..= rollback]
+instance Property "AlarmNames" DeploymentAlarmsProperty where
+  type PropertyType "AlarmNames" DeploymentAlarmsProperty = ValueList Prelude.Text
+  set newValue DeploymentAlarmsProperty {..}
+    = DeploymentAlarmsProperty {alarmNames = newValue, ..}
+instance Property "Enable" DeploymentAlarmsProperty where
+  type PropertyType "Enable" DeploymentAlarmsProperty = Value Prelude.Bool
+  set newValue DeploymentAlarmsProperty {..}
+    = DeploymentAlarmsProperty {enable = newValue, ..}
+instance Property "Rollback" DeploymentAlarmsProperty where
+  type PropertyType "Rollback" DeploymentAlarmsProperty = Value Prelude.Bool
+  set newValue DeploymentAlarmsProperty {..}
+    = DeploymentAlarmsProperty {rollback = newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/DeploymentAlarmsProperty.hs-boot b/gen/Stratosphere/ECS/Service/DeploymentAlarmsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/DeploymentAlarmsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.DeploymentAlarmsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DeploymentAlarmsProperty :: Prelude.Type
+instance ToResourceProperties DeploymentAlarmsProperty
+instance Prelude.Eq DeploymentAlarmsProperty
+instance Prelude.Show DeploymentAlarmsProperty
+instance JSON.ToJSON DeploymentAlarmsProperty
diff --git a/gen/Stratosphere/ECS/Service/DeploymentCircuitBreakerProperty.hs b/gen/Stratosphere/ECS/Service/DeploymentCircuitBreakerProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/DeploymentCircuitBreakerProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.ECS.Service.DeploymentCircuitBreakerProperty (
+        DeploymentCircuitBreakerProperty(..),
+        mkDeploymentCircuitBreakerProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DeploymentCircuitBreakerProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentcircuitbreaker.html>
+    DeploymentCircuitBreakerProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentcircuitbreaker.html#cfn-ecs-service-deploymentcircuitbreaker-enable>
+                                      enable :: (Value Prelude.Bool),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentcircuitbreaker.html#cfn-ecs-service-deploymentcircuitbreaker-rollback>
+                                      rollback :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDeploymentCircuitBreakerProperty ::
+  Value Prelude.Bool
+  -> Value Prelude.Bool -> DeploymentCircuitBreakerProperty
+mkDeploymentCircuitBreakerProperty enable rollback
+  = DeploymentCircuitBreakerProperty
+      {haddock_workaround_ = (), enable = enable, rollback = rollback}
+instance ToResourceProperties DeploymentCircuitBreakerProperty where
+  toResourceProperties DeploymentCircuitBreakerProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.DeploymentCircuitBreaker",
+         supportsTags = Prelude.False,
+         properties = ["Enable" JSON..= enable,
+                       "Rollback" JSON..= rollback]}
+instance JSON.ToJSON DeploymentCircuitBreakerProperty where
+  toJSON DeploymentCircuitBreakerProperty {..}
+    = JSON.object
+        ["Enable" JSON..= enable, "Rollback" JSON..= rollback]
+instance Property "Enable" DeploymentCircuitBreakerProperty where
+  type PropertyType "Enable" DeploymentCircuitBreakerProperty = Value Prelude.Bool
+  set newValue DeploymentCircuitBreakerProperty {..}
+    = DeploymentCircuitBreakerProperty {enable = newValue, ..}
+instance Property "Rollback" DeploymentCircuitBreakerProperty where
+  type PropertyType "Rollback" DeploymentCircuitBreakerProperty = Value Prelude.Bool
+  set newValue DeploymentCircuitBreakerProperty {..}
+    = DeploymentCircuitBreakerProperty {rollback = newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/DeploymentCircuitBreakerProperty.hs-boot b/gen/Stratosphere/ECS/Service/DeploymentCircuitBreakerProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/DeploymentCircuitBreakerProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.DeploymentCircuitBreakerProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DeploymentCircuitBreakerProperty :: Prelude.Type
+instance ToResourceProperties DeploymentCircuitBreakerProperty
+instance Prelude.Eq DeploymentCircuitBreakerProperty
+instance Prelude.Show DeploymentCircuitBreakerProperty
+instance JSON.ToJSON DeploymentCircuitBreakerProperty
diff --git a/gen/Stratosphere/ECS/Service/DeploymentConfigurationProperty.hs b/gen/Stratosphere/ECS/Service/DeploymentConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/DeploymentConfigurationProperty.hs
@@ -0,0 +1,128 @@
+module Stratosphere.ECS.Service.DeploymentConfigurationProperty (
+        module Exports, DeploymentConfigurationProperty(..),
+        mkDeploymentConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.Service.CanaryConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.DeploymentAlarmsProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.DeploymentCircuitBreakerProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.DeploymentLifecycleHookProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.LinearConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DeploymentConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentconfiguration.html>
+    DeploymentConfigurationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentconfiguration.html#cfn-ecs-service-deploymentconfiguration-alarms>
+                                     alarms :: (Prelude.Maybe DeploymentAlarmsProperty),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentconfiguration.html#cfn-ecs-service-deploymentconfiguration-baketimeinminutes>
+                                     bakeTimeInMinutes :: (Prelude.Maybe (Value Prelude.Integer)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentconfiguration.html#cfn-ecs-service-deploymentconfiguration-canaryconfiguration>
+                                     canaryConfiguration :: (Prelude.Maybe CanaryConfigurationProperty),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentconfiguration.html#cfn-ecs-service-deploymentconfiguration-deploymentcircuitbreaker>
+                                     deploymentCircuitBreaker :: (Prelude.Maybe DeploymentCircuitBreakerProperty),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentconfiguration.html#cfn-ecs-service-deploymentconfiguration-lifecyclehooks>
+                                     lifecycleHooks :: (Prelude.Maybe [DeploymentLifecycleHookProperty]),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentconfiguration.html#cfn-ecs-service-deploymentconfiguration-linearconfiguration>
+                                     linearConfiguration :: (Prelude.Maybe LinearConfigurationProperty),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentconfiguration.html#cfn-ecs-service-deploymentconfiguration-maximumpercent>
+                                     maximumPercent :: (Prelude.Maybe (Value Prelude.Integer)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentconfiguration.html#cfn-ecs-service-deploymentconfiguration-minimumhealthypercent>
+                                     minimumHealthyPercent :: (Prelude.Maybe (Value Prelude.Integer)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentconfiguration.html#cfn-ecs-service-deploymentconfiguration-strategy>
+                                     strategy :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDeploymentConfigurationProperty ::
+  DeploymentConfigurationProperty
+mkDeploymentConfigurationProperty
+  = DeploymentConfigurationProperty
+      {haddock_workaround_ = (), alarms = Prelude.Nothing,
+       bakeTimeInMinutes = Prelude.Nothing,
+       canaryConfiguration = Prelude.Nothing,
+       deploymentCircuitBreaker = Prelude.Nothing,
+       lifecycleHooks = Prelude.Nothing,
+       linearConfiguration = Prelude.Nothing,
+       maximumPercent = Prelude.Nothing,
+       minimumHealthyPercent = Prelude.Nothing,
+       strategy = Prelude.Nothing}
+instance ToResourceProperties DeploymentConfigurationProperty where
+  toResourceProperties DeploymentConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.DeploymentConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Alarms" Prelude.<$> alarms,
+                            (JSON..=) "BakeTimeInMinutes" Prelude.<$> bakeTimeInMinutes,
+                            (JSON..=) "CanaryConfiguration" Prelude.<$> canaryConfiguration,
+                            (JSON..=) "DeploymentCircuitBreaker"
+                              Prelude.<$> deploymentCircuitBreaker,
+                            (JSON..=) "LifecycleHooks" Prelude.<$> lifecycleHooks,
+                            (JSON..=) "LinearConfiguration" Prelude.<$> linearConfiguration,
+                            (JSON..=) "MaximumPercent" Prelude.<$> maximumPercent,
+                            (JSON..=) "MinimumHealthyPercent"
+                              Prelude.<$> minimumHealthyPercent,
+                            (JSON..=) "Strategy" Prelude.<$> strategy])}
+instance JSON.ToJSON DeploymentConfigurationProperty where
+  toJSON DeploymentConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Alarms" Prelude.<$> alarms,
+               (JSON..=) "BakeTimeInMinutes" Prelude.<$> bakeTimeInMinutes,
+               (JSON..=) "CanaryConfiguration" Prelude.<$> canaryConfiguration,
+               (JSON..=) "DeploymentCircuitBreaker"
+                 Prelude.<$> deploymentCircuitBreaker,
+               (JSON..=) "LifecycleHooks" Prelude.<$> lifecycleHooks,
+               (JSON..=) "LinearConfiguration" Prelude.<$> linearConfiguration,
+               (JSON..=) "MaximumPercent" Prelude.<$> maximumPercent,
+               (JSON..=) "MinimumHealthyPercent"
+                 Prelude.<$> minimumHealthyPercent,
+               (JSON..=) "Strategy" Prelude.<$> strategy]))
+instance Property "Alarms" DeploymentConfigurationProperty where
+  type PropertyType "Alarms" DeploymentConfigurationProperty = DeploymentAlarmsProperty
+  set newValue DeploymentConfigurationProperty {..}
+    = DeploymentConfigurationProperty
+        {alarms = Prelude.pure newValue, ..}
+instance Property "BakeTimeInMinutes" DeploymentConfigurationProperty where
+  type PropertyType "BakeTimeInMinutes" DeploymentConfigurationProperty = Value Prelude.Integer
+  set newValue DeploymentConfigurationProperty {..}
+    = DeploymentConfigurationProperty
+        {bakeTimeInMinutes = Prelude.pure newValue, ..}
+instance Property "CanaryConfiguration" DeploymentConfigurationProperty where
+  type PropertyType "CanaryConfiguration" DeploymentConfigurationProperty = CanaryConfigurationProperty
+  set newValue DeploymentConfigurationProperty {..}
+    = DeploymentConfigurationProperty
+        {canaryConfiguration = Prelude.pure newValue, ..}
+instance Property "DeploymentCircuitBreaker" DeploymentConfigurationProperty where
+  type PropertyType "DeploymentCircuitBreaker" DeploymentConfigurationProperty = DeploymentCircuitBreakerProperty
+  set newValue DeploymentConfigurationProperty {..}
+    = DeploymentConfigurationProperty
+        {deploymentCircuitBreaker = Prelude.pure newValue, ..}
+instance Property "LifecycleHooks" DeploymentConfigurationProperty where
+  type PropertyType "LifecycleHooks" DeploymentConfigurationProperty = [DeploymentLifecycleHookProperty]
+  set newValue DeploymentConfigurationProperty {..}
+    = DeploymentConfigurationProperty
+        {lifecycleHooks = Prelude.pure newValue, ..}
+instance Property "LinearConfiguration" DeploymentConfigurationProperty where
+  type PropertyType "LinearConfiguration" DeploymentConfigurationProperty = LinearConfigurationProperty
+  set newValue DeploymentConfigurationProperty {..}
+    = DeploymentConfigurationProperty
+        {linearConfiguration = Prelude.pure newValue, ..}
+instance Property "MaximumPercent" DeploymentConfigurationProperty where
+  type PropertyType "MaximumPercent" DeploymentConfigurationProperty = Value Prelude.Integer
+  set newValue DeploymentConfigurationProperty {..}
+    = DeploymentConfigurationProperty
+        {maximumPercent = Prelude.pure newValue, ..}
+instance Property "MinimumHealthyPercent" DeploymentConfigurationProperty where
+  type PropertyType "MinimumHealthyPercent" DeploymentConfigurationProperty = Value Prelude.Integer
+  set newValue DeploymentConfigurationProperty {..}
+    = DeploymentConfigurationProperty
+        {minimumHealthyPercent = Prelude.pure newValue, ..}
+instance Property "Strategy" DeploymentConfigurationProperty where
+  type PropertyType "Strategy" DeploymentConfigurationProperty = Value Prelude.Text
+  set newValue DeploymentConfigurationProperty {..}
+    = DeploymentConfigurationProperty
+        {strategy = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/DeploymentConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Service/DeploymentConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/DeploymentConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.DeploymentConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DeploymentConfigurationProperty :: Prelude.Type
+instance ToResourceProperties DeploymentConfigurationProperty
+instance Prelude.Eq DeploymentConfigurationProperty
+instance Prelude.Show DeploymentConfigurationProperty
+instance JSON.ToJSON DeploymentConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Service/DeploymentControllerProperty.hs b/gen/Stratosphere/ECS/Service/DeploymentControllerProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/DeploymentControllerProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.ECS.Service.DeploymentControllerProperty (
+        DeploymentControllerProperty(..), mkDeploymentControllerProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DeploymentControllerProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentcontroller.html>
+    DeploymentControllerProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentcontroller.html#cfn-ecs-service-deploymentcontroller-type>
+                                  type' :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDeploymentControllerProperty :: DeploymentControllerProperty
+mkDeploymentControllerProperty
+  = DeploymentControllerProperty
+      {haddock_workaround_ = (), type' = Prelude.Nothing}
+instance ToResourceProperties DeploymentControllerProperty where
+  toResourceProperties DeploymentControllerProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.DeploymentController",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Type" Prelude.<$> type'])}
+instance JSON.ToJSON DeploymentControllerProperty where
+  toJSON DeploymentControllerProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Type" Prelude.<$> type']))
+instance Property "Type" DeploymentControllerProperty where
+  type PropertyType "Type" DeploymentControllerProperty = Value Prelude.Text
+  set newValue DeploymentControllerProperty {..}
+    = DeploymentControllerProperty {type' = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/DeploymentControllerProperty.hs-boot b/gen/Stratosphere/ECS/Service/DeploymentControllerProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/DeploymentControllerProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.DeploymentControllerProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DeploymentControllerProperty :: Prelude.Type
+instance ToResourceProperties DeploymentControllerProperty
+instance Prelude.Eq DeploymentControllerProperty
+instance Prelude.Show DeploymentControllerProperty
+instance JSON.ToJSON DeploymentControllerProperty
diff --git a/gen/Stratosphere/ECS/Service/DeploymentLifecycleHookProperty.hs b/gen/Stratosphere/ECS/Service/DeploymentLifecycleHookProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/DeploymentLifecycleHookProperty.hs
@@ -0,0 +1,72 @@
+module Stratosphere.ECS.Service.DeploymentLifecycleHookProperty (
+        DeploymentLifecycleHookProperty(..),
+        mkDeploymentLifecycleHookProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DeploymentLifecycleHookProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentlifecyclehook.html>
+    DeploymentLifecycleHookProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentlifecyclehook.html#cfn-ecs-service-deploymentlifecyclehook-hookdetails>
+                                     hookDetails :: (Prelude.Maybe JSON.Object),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentlifecyclehook.html#cfn-ecs-service-deploymentlifecyclehook-hooktargetarn>
+                                     hookTargetArn :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentlifecyclehook.html#cfn-ecs-service-deploymentlifecyclehook-lifecyclestages>
+                                     lifecycleStages :: (ValueList Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentlifecyclehook.html#cfn-ecs-service-deploymentlifecyclehook-rolearn>
+                                     roleArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDeploymentLifecycleHookProperty ::
+  Value Prelude.Text
+  -> ValueList Prelude.Text
+     -> Value Prelude.Text -> DeploymentLifecycleHookProperty
+mkDeploymentLifecycleHookProperty
+  hookTargetArn
+  lifecycleStages
+  roleArn
+  = DeploymentLifecycleHookProperty
+      {haddock_workaround_ = (), hookTargetArn = hookTargetArn,
+       lifecycleStages = lifecycleStages, roleArn = roleArn,
+       hookDetails = Prelude.Nothing}
+instance ToResourceProperties DeploymentLifecycleHookProperty where
+  toResourceProperties DeploymentLifecycleHookProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.DeploymentLifecycleHook",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["HookTargetArn" JSON..= hookTargetArn,
+                            "LifecycleStages" JSON..= lifecycleStages,
+                            "RoleArn" JSON..= roleArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "HookDetails" Prelude.<$> hookDetails]))}
+instance JSON.ToJSON DeploymentLifecycleHookProperty where
+  toJSON DeploymentLifecycleHookProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["HookTargetArn" JSON..= hookTargetArn,
+               "LifecycleStages" JSON..= lifecycleStages,
+               "RoleArn" JSON..= roleArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "HookDetails" Prelude.<$> hookDetails])))
+instance Property "HookDetails" DeploymentLifecycleHookProperty where
+  type PropertyType "HookDetails" DeploymentLifecycleHookProperty = JSON.Object
+  set newValue DeploymentLifecycleHookProperty {..}
+    = DeploymentLifecycleHookProperty
+        {hookDetails = Prelude.pure newValue, ..}
+instance Property "HookTargetArn" DeploymentLifecycleHookProperty where
+  type PropertyType "HookTargetArn" DeploymentLifecycleHookProperty = Value Prelude.Text
+  set newValue DeploymentLifecycleHookProperty {..}
+    = DeploymentLifecycleHookProperty {hookTargetArn = newValue, ..}
+instance Property "LifecycleStages" DeploymentLifecycleHookProperty where
+  type PropertyType "LifecycleStages" DeploymentLifecycleHookProperty = ValueList Prelude.Text
+  set newValue DeploymentLifecycleHookProperty {..}
+    = DeploymentLifecycleHookProperty {lifecycleStages = newValue, ..}
+instance Property "RoleArn" DeploymentLifecycleHookProperty where
+  type PropertyType "RoleArn" DeploymentLifecycleHookProperty = Value Prelude.Text
+  set newValue DeploymentLifecycleHookProperty {..}
+    = DeploymentLifecycleHookProperty {roleArn = newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/DeploymentLifecycleHookProperty.hs-boot b/gen/Stratosphere/ECS/Service/DeploymentLifecycleHookProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/DeploymentLifecycleHookProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.DeploymentLifecycleHookProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DeploymentLifecycleHookProperty :: Prelude.Type
+instance ToResourceProperties DeploymentLifecycleHookProperty
+instance Prelude.Eq DeploymentLifecycleHookProperty
+instance Prelude.Show DeploymentLifecycleHookProperty
+instance JSON.ToJSON DeploymentLifecycleHookProperty
diff --git a/gen/Stratosphere/ECS/Service/EBSTagSpecificationProperty.hs b/gen/Stratosphere/ECS/Service/EBSTagSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/EBSTagSpecificationProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.ECS.Service.EBSTagSpecificationProperty (
+        EBSTagSpecificationProperty(..), mkEBSTagSpecificationProperty
+    ) 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 EBSTagSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-ebstagspecification.html>
+    EBSTagSpecificationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-ebstagspecification.html#cfn-ecs-service-ebstagspecification-propagatetags>
+                                 propagateTags :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-ebstagspecification.html#cfn-ecs-service-ebstagspecification-resourcetype>
+                                 resourceType :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-ebstagspecification.html#cfn-ecs-service-ebstagspecification-tags>
+                                 tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEBSTagSpecificationProperty ::
+  Value Prelude.Text -> EBSTagSpecificationProperty
+mkEBSTagSpecificationProperty resourceType
+  = EBSTagSpecificationProperty
+      {haddock_workaround_ = (), resourceType = resourceType,
+       propagateTags = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties EBSTagSpecificationProperty where
+  toResourceProperties EBSTagSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.EBSTagSpecification",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ResourceType" JSON..= resourceType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "PropagateTags" Prelude.<$> propagateTags,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON EBSTagSpecificationProperty where
+  toJSON EBSTagSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ResourceType" JSON..= resourceType]
+              (Prelude.catMaybes
+                 [(JSON..=) "PropagateTags" Prelude.<$> propagateTags,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "PropagateTags" EBSTagSpecificationProperty where
+  type PropertyType "PropagateTags" EBSTagSpecificationProperty = Value Prelude.Text
+  set newValue EBSTagSpecificationProperty {..}
+    = EBSTagSpecificationProperty
+        {propagateTags = Prelude.pure newValue, ..}
+instance Property "ResourceType" EBSTagSpecificationProperty where
+  type PropertyType "ResourceType" EBSTagSpecificationProperty = Value Prelude.Text
+  set newValue EBSTagSpecificationProperty {..}
+    = EBSTagSpecificationProperty {resourceType = newValue, ..}
+instance Property "Tags" EBSTagSpecificationProperty where
+  type PropertyType "Tags" EBSTagSpecificationProperty = [Tag]
+  set newValue EBSTagSpecificationProperty {..}
+    = EBSTagSpecificationProperty {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/EBSTagSpecificationProperty.hs-boot b/gen/Stratosphere/ECS/Service/EBSTagSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/EBSTagSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.EBSTagSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EBSTagSpecificationProperty :: Prelude.Type
+instance ToResourceProperties EBSTagSpecificationProperty
+instance Prelude.Eq EBSTagSpecificationProperty
+instance Prelude.Show EBSTagSpecificationProperty
+instance JSON.ToJSON EBSTagSpecificationProperty
diff --git a/gen/Stratosphere/ECS/Service/ForceNewDeploymentProperty.hs b/gen/Stratosphere/ECS/Service/ForceNewDeploymentProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ForceNewDeploymentProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.ECS.Service.ForceNewDeploymentProperty (
+        ForceNewDeploymentProperty(..), mkForceNewDeploymentProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ForceNewDeploymentProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-forcenewdeployment.html>
+    ForceNewDeploymentProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-forcenewdeployment.html#cfn-ecs-service-forcenewdeployment-enableforcenewdeployment>
+                                enableForceNewDeployment :: (Value Prelude.Bool),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-forcenewdeployment.html#cfn-ecs-service-forcenewdeployment-forcenewdeploymentnonce>
+                                forceNewDeploymentNonce :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkForceNewDeploymentProperty ::
+  Value Prelude.Bool -> ForceNewDeploymentProperty
+mkForceNewDeploymentProperty enableForceNewDeployment
+  = ForceNewDeploymentProperty
+      {haddock_workaround_ = (),
+       enableForceNewDeployment = enableForceNewDeployment,
+       forceNewDeploymentNonce = Prelude.Nothing}
+instance ToResourceProperties ForceNewDeploymentProperty where
+  toResourceProperties ForceNewDeploymentProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.ForceNewDeployment",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["EnableForceNewDeployment" JSON..= enableForceNewDeployment]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ForceNewDeploymentNonce"
+                                 Prelude.<$> forceNewDeploymentNonce]))}
+instance JSON.ToJSON ForceNewDeploymentProperty where
+  toJSON ForceNewDeploymentProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["EnableForceNewDeployment" JSON..= enableForceNewDeployment]
+              (Prelude.catMaybes
+                 [(JSON..=) "ForceNewDeploymentNonce"
+                    Prelude.<$> forceNewDeploymentNonce])))
+instance Property "EnableForceNewDeployment" ForceNewDeploymentProperty where
+  type PropertyType "EnableForceNewDeployment" ForceNewDeploymentProperty = Value Prelude.Bool
+  set newValue ForceNewDeploymentProperty {..}
+    = ForceNewDeploymentProperty
+        {enableForceNewDeployment = newValue, ..}
+instance Property "ForceNewDeploymentNonce" ForceNewDeploymentProperty where
+  type PropertyType "ForceNewDeploymentNonce" ForceNewDeploymentProperty = Value Prelude.Text
+  set newValue ForceNewDeploymentProperty {..}
+    = ForceNewDeploymentProperty
+        {forceNewDeploymentNonce = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/ForceNewDeploymentProperty.hs-boot b/gen/Stratosphere/ECS/Service/ForceNewDeploymentProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ForceNewDeploymentProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.ForceNewDeploymentProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ForceNewDeploymentProperty :: Prelude.Type
+instance ToResourceProperties ForceNewDeploymentProperty
+instance Prelude.Eq ForceNewDeploymentProperty
+instance Prelude.Show ForceNewDeploymentProperty
+instance JSON.ToJSON ForceNewDeploymentProperty
diff --git a/gen/Stratosphere/ECS/Service/LinearConfigurationProperty.hs b/gen/Stratosphere/ECS/Service/LinearConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/LinearConfigurationProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ECS.Service.LinearConfigurationProperty (
+        LinearConfigurationProperty(..), mkLinearConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LinearConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-linearconfiguration.html>
+    LinearConfigurationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-linearconfiguration.html#cfn-ecs-service-linearconfiguration-stepbaketimeinminutes>
+                                 stepBakeTimeInMinutes :: (Prelude.Maybe (Value Prelude.Integer)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-linearconfiguration.html#cfn-ecs-service-linearconfiguration-steppercent>
+                                 stepPercent :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLinearConfigurationProperty :: LinearConfigurationProperty
+mkLinearConfigurationProperty
+  = LinearConfigurationProperty
+      {haddock_workaround_ = (), stepBakeTimeInMinutes = Prelude.Nothing,
+       stepPercent = Prelude.Nothing}
+instance ToResourceProperties LinearConfigurationProperty where
+  toResourceProperties LinearConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.LinearConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "StepBakeTimeInMinutes"
+                              Prelude.<$> stepBakeTimeInMinutes,
+                            (JSON..=) "StepPercent" Prelude.<$> stepPercent])}
+instance JSON.ToJSON LinearConfigurationProperty where
+  toJSON LinearConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "StepBakeTimeInMinutes"
+                 Prelude.<$> stepBakeTimeInMinutes,
+               (JSON..=) "StepPercent" Prelude.<$> stepPercent]))
+instance Property "StepBakeTimeInMinutes" LinearConfigurationProperty where
+  type PropertyType "StepBakeTimeInMinutes" LinearConfigurationProperty = Value Prelude.Integer
+  set newValue LinearConfigurationProperty {..}
+    = LinearConfigurationProperty
+        {stepBakeTimeInMinutes = Prelude.pure newValue, ..}
+instance Property "StepPercent" LinearConfigurationProperty where
+  type PropertyType "StepPercent" LinearConfigurationProperty = Value Prelude.Double
+  set newValue LinearConfigurationProperty {..}
+    = LinearConfigurationProperty
+        {stepPercent = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/LinearConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Service/LinearConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/LinearConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.LinearConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LinearConfigurationProperty :: Prelude.Type
+instance ToResourceProperties LinearConfigurationProperty
+instance Prelude.Eq LinearConfigurationProperty
+instance Prelude.Show LinearConfigurationProperty
+instance JSON.ToJSON LinearConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Service/LoadBalancerProperty.hs b/gen/Stratosphere/ECS/Service/LoadBalancerProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/LoadBalancerProperty.hs
@@ -0,0 +1,76 @@
+module Stratosphere.ECS.Service.LoadBalancerProperty (
+        module Exports, LoadBalancerProperty(..), mkLoadBalancerProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.Service.AdvancedConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LoadBalancerProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-loadbalancer.html>
+    LoadBalancerProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-loadbalancer.html#cfn-ecs-service-loadbalancer-advancedconfiguration>
+                          advancedConfiguration :: (Prelude.Maybe AdvancedConfigurationProperty),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-loadbalancer.html#cfn-ecs-service-loadbalancer-containername>
+                          containerName :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-loadbalancer.html#cfn-ecs-service-loadbalancer-containerport>
+                          containerPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-loadbalancer.html#cfn-ecs-service-loadbalancer-loadbalancername>
+                          loadBalancerName :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-loadbalancer.html#cfn-ecs-service-loadbalancer-targetgrouparn>
+                          targetGroupArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLoadBalancerProperty :: LoadBalancerProperty
+mkLoadBalancerProperty
+  = LoadBalancerProperty
+      {haddock_workaround_ = (), advancedConfiguration = Prelude.Nothing,
+       containerName = Prelude.Nothing, containerPort = Prelude.Nothing,
+       loadBalancerName = Prelude.Nothing,
+       targetGroupArn = Prelude.Nothing}
+instance ToResourceProperties LoadBalancerProperty where
+  toResourceProperties LoadBalancerProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.LoadBalancer",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AdvancedConfiguration"
+                              Prelude.<$> advancedConfiguration,
+                            (JSON..=) "ContainerName" Prelude.<$> containerName,
+                            (JSON..=) "ContainerPort" Prelude.<$> containerPort,
+                            (JSON..=) "LoadBalancerName" Prelude.<$> loadBalancerName,
+                            (JSON..=) "TargetGroupArn" Prelude.<$> targetGroupArn])}
+instance JSON.ToJSON LoadBalancerProperty where
+  toJSON LoadBalancerProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AdvancedConfiguration"
+                 Prelude.<$> advancedConfiguration,
+               (JSON..=) "ContainerName" Prelude.<$> containerName,
+               (JSON..=) "ContainerPort" Prelude.<$> containerPort,
+               (JSON..=) "LoadBalancerName" Prelude.<$> loadBalancerName,
+               (JSON..=) "TargetGroupArn" Prelude.<$> targetGroupArn]))
+instance Property "AdvancedConfiguration" LoadBalancerProperty where
+  type PropertyType "AdvancedConfiguration" LoadBalancerProperty = AdvancedConfigurationProperty
+  set newValue LoadBalancerProperty {..}
+    = LoadBalancerProperty
+        {advancedConfiguration = Prelude.pure newValue, ..}
+instance Property "ContainerName" LoadBalancerProperty where
+  type PropertyType "ContainerName" LoadBalancerProperty = Value Prelude.Text
+  set newValue LoadBalancerProperty {..}
+    = LoadBalancerProperty {containerName = Prelude.pure newValue, ..}
+instance Property "ContainerPort" LoadBalancerProperty where
+  type PropertyType "ContainerPort" LoadBalancerProperty = Value Prelude.Integer
+  set newValue LoadBalancerProperty {..}
+    = LoadBalancerProperty {containerPort = Prelude.pure newValue, ..}
+instance Property "LoadBalancerName" LoadBalancerProperty where
+  type PropertyType "LoadBalancerName" LoadBalancerProperty = Value Prelude.Text
+  set newValue LoadBalancerProperty {..}
+    = LoadBalancerProperty
+        {loadBalancerName = Prelude.pure newValue, ..}
+instance Property "TargetGroupArn" LoadBalancerProperty where
+  type PropertyType "TargetGroupArn" LoadBalancerProperty = Value Prelude.Text
+  set newValue LoadBalancerProperty {..}
+    = LoadBalancerProperty {targetGroupArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/LoadBalancerProperty.hs-boot b/gen/Stratosphere/ECS/Service/LoadBalancerProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/LoadBalancerProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.LoadBalancerProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LoadBalancerProperty :: Prelude.Type
+instance ToResourceProperties LoadBalancerProperty
+instance Prelude.Eq LoadBalancerProperty
+instance Prelude.Show LoadBalancerProperty
+instance JSON.ToJSON LoadBalancerProperty
diff --git a/gen/Stratosphere/ECS/Service/LogConfigurationProperty.hs b/gen/Stratosphere/ECS/Service/LogConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/LogConfigurationProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.ECS.Service.LogConfigurationProperty (
+        module Exports, LogConfigurationProperty(..),
+        mkLogConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.Service.SecretProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LogConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-logconfiguration.html>
+    LogConfigurationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-logconfiguration.html#cfn-ecs-service-logconfiguration-logdriver>
+                              logDriver :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-logconfiguration.html#cfn-ecs-service-logconfiguration-options>
+                              options :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-logconfiguration.html#cfn-ecs-service-logconfiguration-secretoptions>
+                              secretOptions :: (Prelude.Maybe [SecretProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLogConfigurationProperty :: LogConfigurationProperty
+mkLogConfigurationProperty
+  = LogConfigurationProperty
+      {haddock_workaround_ = (), logDriver = Prelude.Nothing,
+       options = Prelude.Nothing, secretOptions = Prelude.Nothing}
+instance ToResourceProperties LogConfigurationProperty where
+  toResourceProperties LogConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.LogConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "LogDriver" Prelude.<$> logDriver,
+                            (JSON..=) "Options" Prelude.<$> options,
+                            (JSON..=) "SecretOptions" Prelude.<$> secretOptions])}
+instance JSON.ToJSON LogConfigurationProperty where
+  toJSON LogConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "LogDriver" Prelude.<$> logDriver,
+               (JSON..=) "Options" Prelude.<$> options,
+               (JSON..=) "SecretOptions" Prelude.<$> secretOptions]))
+instance Property "LogDriver" LogConfigurationProperty where
+  type PropertyType "LogDriver" LogConfigurationProperty = Value Prelude.Text
+  set newValue LogConfigurationProperty {..}
+    = LogConfigurationProperty {logDriver = Prelude.pure newValue, ..}
+instance Property "Options" LogConfigurationProperty where
+  type PropertyType "Options" LogConfigurationProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue LogConfigurationProperty {..}
+    = LogConfigurationProperty {options = Prelude.pure newValue, ..}
+instance Property "SecretOptions" LogConfigurationProperty where
+  type PropertyType "SecretOptions" LogConfigurationProperty = [SecretProperty]
+  set newValue LogConfigurationProperty {..}
+    = LogConfigurationProperty
+        {secretOptions = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/LogConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Service/LogConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/LogConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.LogConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LogConfigurationProperty :: Prelude.Type
+instance ToResourceProperties LogConfigurationProperty
+instance Prelude.Eq LogConfigurationProperty
+instance Prelude.Show LogConfigurationProperty
+instance JSON.ToJSON LogConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Service/NetworkConfigurationProperty.hs b/gen/Stratosphere/ECS/Service/NetworkConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/NetworkConfigurationProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.ECS.Service.NetworkConfigurationProperty (
+        module Exports, NetworkConfigurationProperty(..),
+        mkNetworkConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.Service.AwsVpcConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+data NetworkConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-networkconfiguration.html>
+    NetworkConfigurationProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-networkconfiguration.html#cfn-ecs-service-networkconfiguration-awsvpcconfiguration>
+                                  awsvpcConfiguration :: (Prelude.Maybe AwsVpcConfigurationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkConfigurationProperty :: NetworkConfigurationProperty
+mkNetworkConfigurationProperty
+  = NetworkConfigurationProperty
+      {haddock_workaround_ = (), awsvpcConfiguration = Prelude.Nothing}
+instance ToResourceProperties NetworkConfigurationProperty where
+  toResourceProperties NetworkConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.NetworkConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AwsvpcConfiguration" Prelude.<$> awsvpcConfiguration])}
+instance JSON.ToJSON NetworkConfigurationProperty where
+  toJSON NetworkConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AwsvpcConfiguration" Prelude.<$> awsvpcConfiguration]))
+instance Property "AwsvpcConfiguration" NetworkConfigurationProperty where
+  type PropertyType "AwsvpcConfiguration" NetworkConfigurationProperty = AwsVpcConfigurationProperty
+  set newValue NetworkConfigurationProperty {..}
+    = NetworkConfigurationProperty
+        {awsvpcConfiguration = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/NetworkConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Service/NetworkConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/NetworkConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.NetworkConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NetworkConfigurationProperty :: Prelude.Type
+instance ToResourceProperties NetworkConfigurationProperty
+instance Prelude.Eq NetworkConfigurationProperty
+instance Prelude.Show NetworkConfigurationProperty
+instance JSON.ToJSON NetworkConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Service/PlacementConstraintProperty.hs b/gen/Stratosphere/ECS/Service/PlacementConstraintProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/PlacementConstraintProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ECS.Service.PlacementConstraintProperty (
+        PlacementConstraintProperty(..), mkPlacementConstraintProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PlacementConstraintProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-placementconstraint.html>
+    PlacementConstraintProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-placementconstraint.html#cfn-ecs-service-placementconstraint-expression>
+                                 expression :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-placementconstraint.html#cfn-ecs-service-placementconstraint-type>
+                                 type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPlacementConstraintProperty ::
+  Value Prelude.Text -> PlacementConstraintProperty
+mkPlacementConstraintProperty type'
+  = PlacementConstraintProperty
+      {haddock_workaround_ = (), type' = type',
+       expression = Prelude.Nothing}
+instance ToResourceProperties PlacementConstraintProperty where
+  toResourceProperties PlacementConstraintProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.PlacementConstraint",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "Expression" Prelude.<$> expression]))}
+instance JSON.ToJSON PlacementConstraintProperty where
+  toJSON PlacementConstraintProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "Expression" Prelude.<$> expression])))
+instance Property "Expression" PlacementConstraintProperty where
+  type PropertyType "Expression" PlacementConstraintProperty = Value Prelude.Text
+  set newValue PlacementConstraintProperty {..}
+    = PlacementConstraintProperty
+        {expression = Prelude.pure newValue, ..}
+instance Property "Type" PlacementConstraintProperty where
+  type PropertyType "Type" PlacementConstraintProperty = Value Prelude.Text
+  set newValue PlacementConstraintProperty {..}
+    = PlacementConstraintProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/PlacementConstraintProperty.hs-boot b/gen/Stratosphere/ECS/Service/PlacementConstraintProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/PlacementConstraintProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.PlacementConstraintProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PlacementConstraintProperty :: Prelude.Type
+instance ToResourceProperties PlacementConstraintProperty
+instance Prelude.Eq PlacementConstraintProperty
+instance Prelude.Show PlacementConstraintProperty
+instance JSON.ToJSON PlacementConstraintProperty
diff --git a/gen/Stratosphere/ECS/Service/PlacementStrategyProperty.hs b/gen/Stratosphere/ECS/Service/PlacementStrategyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/PlacementStrategyProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ECS.Service.PlacementStrategyProperty (
+        PlacementStrategyProperty(..), mkPlacementStrategyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PlacementStrategyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-placementstrategy.html>
+    PlacementStrategyProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-placementstrategy.html#cfn-ecs-service-placementstrategy-field>
+                               field :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-placementstrategy.html#cfn-ecs-service-placementstrategy-type>
+                               type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPlacementStrategyProperty ::
+  Value Prelude.Text -> PlacementStrategyProperty
+mkPlacementStrategyProperty type'
+  = PlacementStrategyProperty
+      {haddock_workaround_ = (), type' = type', field = Prelude.Nothing}
+instance ToResourceProperties PlacementStrategyProperty where
+  toResourceProperties PlacementStrategyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.PlacementStrategy",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Type" JSON..= type']
+                           (Prelude.catMaybes [(JSON..=) "Field" Prelude.<$> field]))}
+instance JSON.ToJSON PlacementStrategyProperty where
+  toJSON PlacementStrategyProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Type" JSON..= type']
+              (Prelude.catMaybes [(JSON..=) "Field" Prelude.<$> field])))
+instance Property "Field" PlacementStrategyProperty where
+  type PropertyType "Field" PlacementStrategyProperty = Value Prelude.Text
+  set newValue PlacementStrategyProperty {..}
+    = PlacementStrategyProperty {field = Prelude.pure newValue, ..}
+instance Property "Type" PlacementStrategyProperty where
+  type PropertyType "Type" PlacementStrategyProperty = Value Prelude.Text
+  set newValue PlacementStrategyProperty {..}
+    = PlacementStrategyProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/PlacementStrategyProperty.hs-boot b/gen/Stratosphere/ECS/Service/PlacementStrategyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/PlacementStrategyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.PlacementStrategyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PlacementStrategyProperty :: Prelude.Type
+instance ToResourceProperties PlacementStrategyProperty
+instance Prelude.Eq PlacementStrategyProperty
+instance Prelude.Show PlacementStrategyProperty
+instance JSON.ToJSON PlacementStrategyProperty
diff --git a/gen/Stratosphere/ECS/Service/SecretProperty.hs b/gen/Stratosphere/ECS/Service/SecretProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/SecretProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.ECS.Service.SecretProperty (
+        SecretProperty(..), mkSecretProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SecretProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-secret.html>
+    SecretProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-secret.html#cfn-ecs-service-secret-name>
+                    name :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-secret.html#cfn-ecs-service-secret-valuefrom>
+                    valueFrom :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSecretProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> SecretProperty
+mkSecretProperty name valueFrom
+  = SecretProperty
+      {haddock_workaround_ = (), name = name, valueFrom = valueFrom}
+instance ToResourceProperties SecretProperty where
+  toResourceProperties SecretProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.Secret",
+         supportsTags = Prelude.False,
+         properties = ["Name" JSON..= name, "ValueFrom" JSON..= valueFrom]}
+instance JSON.ToJSON SecretProperty where
+  toJSON SecretProperty {..}
+    = JSON.object ["Name" JSON..= name, "ValueFrom" JSON..= valueFrom]
+instance Property "Name" SecretProperty where
+  type PropertyType "Name" SecretProperty = Value Prelude.Text
+  set newValue SecretProperty {..}
+    = SecretProperty {name = newValue, ..}
+instance Property "ValueFrom" SecretProperty where
+  type PropertyType "ValueFrom" SecretProperty = Value Prelude.Text
+  set newValue SecretProperty {..}
+    = SecretProperty {valueFrom = newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/SecretProperty.hs-boot b/gen/Stratosphere/ECS/Service/SecretProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/SecretProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.SecretProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SecretProperty :: Prelude.Type
+instance ToResourceProperties SecretProperty
+instance Prelude.Eq SecretProperty
+instance Prelude.Show SecretProperty
+instance JSON.ToJSON SecretProperty
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectAccessLogConfigurationProperty.hs b/gen/Stratosphere/ECS/Service/ServiceConnectAccessLogConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectAccessLogConfigurationProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.ECS.Service.ServiceConnectAccessLogConfigurationProperty (
+        ServiceConnectAccessLogConfigurationProperty(..),
+        mkServiceConnectAccessLogConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ServiceConnectAccessLogConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectaccesslogconfiguration.html>
+    ServiceConnectAccessLogConfigurationProperty {haddock_workaround_ :: (),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectaccesslogconfiguration.html#cfn-ecs-service-serviceconnectaccesslogconfiguration-format>
+                                                  format :: (Value Prelude.Text),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectaccesslogconfiguration.html#cfn-ecs-service-serviceconnectaccesslogconfiguration-includequeryparameters>
+                                                  includeQueryParameters :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkServiceConnectAccessLogConfigurationProperty ::
+  Value Prelude.Text -> ServiceConnectAccessLogConfigurationProperty
+mkServiceConnectAccessLogConfigurationProperty format
+  = ServiceConnectAccessLogConfigurationProperty
+      {haddock_workaround_ = (), format = format,
+       includeQueryParameters = Prelude.Nothing}
+instance ToResourceProperties ServiceConnectAccessLogConfigurationProperty where
+  toResourceProperties
+    ServiceConnectAccessLogConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.ServiceConnectAccessLogConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Format" JSON..= format]
+                           (Prelude.catMaybes
+                              [(JSON..=) "IncludeQueryParameters"
+                                 Prelude.<$> includeQueryParameters]))}
+instance JSON.ToJSON ServiceConnectAccessLogConfigurationProperty where
+  toJSON ServiceConnectAccessLogConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Format" JSON..= format]
+              (Prelude.catMaybes
+                 [(JSON..=) "IncludeQueryParameters"
+                    Prelude.<$> includeQueryParameters])))
+instance Property "Format" ServiceConnectAccessLogConfigurationProperty where
+  type PropertyType "Format" ServiceConnectAccessLogConfigurationProperty = Value Prelude.Text
+  set newValue ServiceConnectAccessLogConfigurationProperty {..}
+    = ServiceConnectAccessLogConfigurationProperty
+        {format = newValue, ..}
+instance Property "IncludeQueryParameters" ServiceConnectAccessLogConfigurationProperty where
+  type PropertyType "IncludeQueryParameters" ServiceConnectAccessLogConfigurationProperty = Value Prelude.Text
+  set newValue ServiceConnectAccessLogConfigurationProperty {..}
+    = ServiceConnectAccessLogConfigurationProperty
+        {includeQueryParameters = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectAccessLogConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Service/ServiceConnectAccessLogConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectAccessLogConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.ServiceConnectAccessLogConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ServiceConnectAccessLogConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ServiceConnectAccessLogConfigurationProperty
+instance Prelude.Eq ServiceConnectAccessLogConfigurationProperty
+instance Prelude.Show ServiceConnectAccessLogConfigurationProperty
+instance JSON.ToJSON ServiceConnectAccessLogConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectClientAliasProperty.hs b/gen/Stratosphere/ECS/Service/ServiceConnectClientAliasProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectClientAliasProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.ECS.Service.ServiceConnectClientAliasProperty (
+        module Exports, ServiceConnectClientAliasProperty(..),
+        mkServiceConnectClientAliasProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.Service.ServiceConnectTestTrafficRulesProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ServiceConnectClientAliasProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectclientalias.html>
+    ServiceConnectClientAliasProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectclientalias.html#cfn-ecs-service-serviceconnectclientalias-dnsname>
+                                       dnsName :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectclientalias.html#cfn-ecs-service-serviceconnectclientalias-port>
+                                       port :: (Value Prelude.Integer),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectclientalias.html#cfn-ecs-service-serviceconnectclientalias-testtrafficrules>
+                                       testTrafficRules :: (Prelude.Maybe ServiceConnectTestTrafficRulesProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkServiceConnectClientAliasProperty ::
+  Value Prelude.Integer -> ServiceConnectClientAliasProperty
+mkServiceConnectClientAliasProperty port
+  = ServiceConnectClientAliasProperty
+      {haddock_workaround_ = (), port = port, dnsName = Prelude.Nothing,
+       testTrafficRules = Prelude.Nothing}
+instance ToResourceProperties ServiceConnectClientAliasProperty where
+  toResourceProperties ServiceConnectClientAliasProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.ServiceConnectClientAlias",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Port" JSON..= port]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DnsName" Prelude.<$> dnsName,
+                               (JSON..=) "TestTrafficRules" Prelude.<$> testTrafficRules]))}
+instance JSON.ToJSON ServiceConnectClientAliasProperty where
+  toJSON ServiceConnectClientAliasProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Port" JSON..= port]
+              (Prelude.catMaybes
+                 [(JSON..=) "DnsName" Prelude.<$> dnsName,
+                  (JSON..=) "TestTrafficRules" Prelude.<$> testTrafficRules])))
+instance Property "DnsName" ServiceConnectClientAliasProperty where
+  type PropertyType "DnsName" ServiceConnectClientAliasProperty = Value Prelude.Text
+  set newValue ServiceConnectClientAliasProperty {..}
+    = ServiceConnectClientAliasProperty
+        {dnsName = Prelude.pure newValue, ..}
+instance Property "Port" ServiceConnectClientAliasProperty where
+  type PropertyType "Port" ServiceConnectClientAliasProperty = Value Prelude.Integer
+  set newValue ServiceConnectClientAliasProperty {..}
+    = ServiceConnectClientAliasProperty {port = newValue, ..}
+instance Property "TestTrafficRules" ServiceConnectClientAliasProperty where
+  type PropertyType "TestTrafficRules" ServiceConnectClientAliasProperty = ServiceConnectTestTrafficRulesProperty
+  set newValue ServiceConnectClientAliasProperty {..}
+    = ServiceConnectClientAliasProperty
+        {testTrafficRules = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectClientAliasProperty.hs-boot b/gen/Stratosphere/ECS/Service/ServiceConnectClientAliasProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectClientAliasProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.ServiceConnectClientAliasProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ServiceConnectClientAliasProperty :: Prelude.Type
+instance ToResourceProperties ServiceConnectClientAliasProperty
+instance Prelude.Eq ServiceConnectClientAliasProperty
+instance Prelude.Show ServiceConnectClientAliasProperty
+instance JSON.ToJSON ServiceConnectClientAliasProperty
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectConfigurationProperty.hs b/gen/Stratosphere/ECS/Service/ServiceConnectConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectConfigurationProperty.hs
@@ -0,0 +1,84 @@
+module Stratosphere.ECS.Service.ServiceConnectConfigurationProperty (
+        module Exports, ServiceConnectConfigurationProperty(..),
+        mkServiceConnectConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.Service.LogConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.ServiceConnectAccessLogConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.ServiceConnectServiceProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ServiceConnectConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectconfiguration.html>
+    ServiceConnectConfigurationProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectconfiguration.html#cfn-ecs-service-serviceconnectconfiguration-accesslogconfiguration>
+                                         accessLogConfiguration :: (Prelude.Maybe ServiceConnectAccessLogConfigurationProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectconfiguration.html#cfn-ecs-service-serviceconnectconfiguration-enabled>
+                                         enabled :: (Value Prelude.Bool),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectconfiguration.html#cfn-ecs-service-serviceconnectconfiguration-logconfiguration>
+                                         logConfiguration :: (Prelude.Maybe LogConfigurationProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectconfiguration.html#cfn-ecs-service-serviceconnectconfiguration-namespace>
+                                         namespace :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectconfiguration.html#cfn-ecs-service-serviceconnectconfiguration-services>
+                                         services :: (Prelude.Maybe [ServiceConnectServiceProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkServiceConnectConfigurationProperty ::
+  Value Prelude.Bool -> ServiceConnectConfigurationProperty
+mkServiceConnectConfigurationProperty enabled
+  = ServiceConnectConfigurationProperty
+      {haddock_workaround_ = (), enabled = enabled,
+       accessLogConfiguration = Prelude.Nothing,
+       logConfiguration = Prelude.Nothing, namespace = Prelude.Nothing,
+       services = Prelude.Nothing}
+instance ToResourceProperties ServiceConnectConfigurationProperty where
+  toResourceProperties ServiceConnectConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.ServiceConnectConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Enabled" JSON..= enabled]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AccessLogConfiguration"
+                                 Prelude.<$> accessLogConfiguration,
+                               (JSON..=) "LogConfiguration" Prelude.<$> logConfiguration,
+                               (JSON..=) "Namespace" Prelude.<$> namespace,
+                               (JSON..=) "Services" Prelude.<$> services]))}
+instance JSON.ToJSON ServiceConnectConfigurationProperty where
+  toJSON ServiceConnectConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Enabled" JSON..= enabled]
+              (Prelude.catMaybes
+                 [(JSON..=) "AccessLogConfiguration"
+                    Prelude.<$> accessLogConfiguration,
+                  (JSON..=) "LogConfiguration" Prelude.<$> logConfiguration,
+                  (JSON..=) "Namespace" Prelude.<$> namespace,
+                  (JSON..=) "Services" Prelude.<$> services])))
+instance Property "AccessLogConfiguration" ServiceConnectConfigurationProperty where
+  type PropertyType "AccessLogConfiguration" ServiceConnectConfigurationProperty = ServiceConnectAccessLogConfigurationProperty
+  set newValue ServiceConnectConfigurationProperty {..}
+    = ServiceConnectConfigurationProperty
+        {accessLogConfiguration = Prelude.pure newValue, ..}
+instance Property "Enabled" ServiceConnectConfigurationProperty where
+  type PropertyType "Enabled" ServiceConnectConfigurationProperty = Value Prelude.Bool
+  set newValue ServiceConnectConfigurationProperty {..}
+    = ServiceConnectConfigurationProperty {enabled = newValue, ..}
+instance Property "LogConfiguration" ServiceConnectConfigurationProperty where
+  type PropertyType "LogConfiguration" ServiceConnectConfigurationProperty = LogConfigurationProperty
+  set newValue ServiceConnectConfigurationProperty {..}
+    = ServiceConnectConfigurationProperty
+        {logConfiguration = Prelude.pure newValue, ..}
+instance Property "Namespace" ServiceConnectConfigurationProperty where
+  type PropertyType "Namespace" ServiceConnectConfigurationProperty = Value Prelude.Text
+  set newValue ServiceConnectConfigurationProperty {..}
+    = ServiceConnectConfigurationProperty
+        {namespace = Prelude.pure newValue, ..}
+instance Property "Services" ServiceConnectConfigurationProperty where
+  type PropertyType "Services" ServiceConnectConfigurationProperty = [ServiceConnectServiceProperty]
+  set newValue ServiceConnectConfigurationProperty {..}
+    = ServiceConnectConfigurationProperty
+        {services = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Service/ServiceConnectConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.ServiceConnectConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ServiceConnectConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ServiceConnectConfigurationProperty
+instance Prelude.Eq ServiceConnectConfigurationProperty
+instance Prelude.Show ServiceConnectConfigurationProperty
+instance JSON.ToJSON ServiceConnectConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectServiceProperty.hs b/gen/Stratosphere/ECS/Service/ServiceConnectServiceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectServiceProperty.hs
@@ -0,0 +1,90 @@
+module Stratosphere.ECS.Service.ServiceConnectServiceProperty (
+        module Exports, ServiceConnectServiceProperty(..),
+        mkServiceConnectServiceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.Service.ServiceConnectClientAliasProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.ServiceConnectTlsConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.Service.TimeoutConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ServiceConnectServiceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectservice.html>
+    ServiceConnectServiceProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectservice.html#cfn-ecs-service-serviceconnectservice-clientaliases>
+                                   clientAliases :: (Prelude.Maybe [ServiceConnectClientAliasProperty]),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectservice.html#cfn-ecs-service-serviceconnectservice-discoveryname>
+                                   discoveryName :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectservice.html#cfn-ecs-service-serviceconnectservice-ingressportoverride>
+                                   ingressPortOverride :: (Prelude.Maybe (Value Prelude.Integer)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectservice.html#cfn-ecs-service-serviceconnectservice-portname>
+                                   portName :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectservice.html#cfn-ecs-service-serviceconnectservice-timeout>
+                                   timeout :: (Prelude.Maybe TimeoutConfigurationProperty),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectservice.html#cfn-ecs-service-serviceconnectservice-tls>
+                                   tls :: (Prelude.Maybe ServiceConnectTlsConfigurationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkServiceConnectServiceProperty ::
+  Value Prelude.Text -> ServiceConnectServiceProperty
+mkServiceConnectServiceProperty portName
+  = ServiceConnectServiceProperty
+      {haddock_workaround_ = (), portName = portName,
+       clientAliases = Prelude.Nothing, discoveryName = Prelude.Nothing,
+       ingressPortOverride = Prelude.Nothing, timeout = Prelude.Nothing,
+       tls = Prelude.Nothing}
+instance ToResourceProperties ServiceConnectServiceProperty where
+  toResourceProperties ServiceConnectServiceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.ServiceConnectService",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["PortName" JSON..= portName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ClientAliases" Prelude.<$> clientAliases,
+                               (JSON..=) "DiscoveryName" Prelude.<$> discoveryName,
+                               (JSON..=) "IngressPortOverride" Prelude.<$> ingressPortOverride,
+                               (JSON..=) "Timeout" Prelude.<$> timeout,
+                               (JSON..=) "Tls" Prelude.<$> tls]))}
+instance JSON.ToJSON ServiceConnectServiceProperty where
+  toJSON ServiceConnectServiceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["PortName" JSON..= portName]
+              (Prelude.catMaybes
+                 [(JSON..=) "ClientAliases" Prelude.<$> clientAliases,
+                  (JSON..=) "DiscoveryName" Prelude.<$> discoveryName,
+                  (JSON..=) "IngressPortOverride" Prelude.<$> ingressPortOverride,
+                  (JSON..=) "Timeout" Prelude.<$> timeout,
+                  (JSON..=) "Tls" Prelude.<$> tls])))
+instance Property "ClientAliases" ServiceConnectServiceProperty where
+  type PropertyType "ClientAliases" ServiceConnectServiceProperty = [ServiceConnectClientAliasProperty]
+  set newValue ServiceConnectServiceProperty {..}
+    = ServiceConnectServiceProperty
+        {clientAliases = Prelude.pure newValue, ..}
+instance Property "DiscoveryName" ServiceConnectServiceProperty where
+  type PropertyType "DiscoveryName" ServiceConnectServiceProperty = Value Prelude.Text
+  set newValue ServiceConnectServiceProperty {..}
+    = ServiceConnectServiceProperty
+        {discoveryName = Prelude.pure newValue, ..}
+instance Property "IngressPortOverride" ServiceConnectServiceProperty where
+  type PropertyType "IngressPortOverride" ServiceConnectServiceProperty = Value Prelude.Integer
+  set newValue ServiceConnectServiceProperty {..}
+    = ServiceConnectServiceProperty
+        {ingressPortOverride = Prelude.pure newValue, ..}
+instance Property "PortName" ServiceConnectServiceProperty where
+  type PropertyType "PortName" ServiceConnectServiceProperty = Value Prelude.Text
+  set newValue ServiceConnectServiceProperty {..}
+    = ServiceConnectServiceProperty {portName = newValue, ..}
+instance Property "Timeout" ServiceConnectServiceProperty where
+  type PropertyType "Timeout" ServiceConnectServiceProperty = TimeoutConfigurationProperty
+  set newValue ServiceConnectServiceProperty {..}
+    = ServiceConnectServiceProperty
+        {timeout = Prelude.pure newValue, ..}
+instance Property "Tls" ServiceConnectServiceProperty where
+  type PropertyType "Tls" ServiceConnectServiceProperty = ServiceConnectTlsConfigurationProperty
+  set newValue ServiceConnectServiceProperty {..}
+    = ServiceConnectServiceProperty {tls = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectServiceProperty.hs-boot b/gen/Stratosphere/ECS/Service/ServiceConnectServiceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectServiceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.ServiceConnectServiceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ServiceConnectServiceProperty :: Prelude.Type
+instance ToResourceProperties ServiceConnectServiceProperty
+instance Prelude.Eq ServiceConnectServiceProperty
+instance Prelude.Show ServiceConnectServiceProperty
+instance JSON.ToJSON ServiceConnectServiceProperty
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesHeaderProperty.hs b/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesHeaderProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesHeaderProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.ECS.Service.ServiceConnectTestTrafficRulesHeaderProperty (
+        module Exports, ServiceConnectTestTrafficRulesHeaderProperty(..),
+        mkServiceConnectTestTrafficRulesHeaderProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.Service.ServiceConnectTestTrafficRulesHeaderValueProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ServiceConnectTestTrafficRulesHeaderProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnecttesttrafficrulesheader.html>
+    ServiceConnectTestTrafficRulesHeaderProperty {haddock_workaround_ :: (),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnecttesttrafficrulesheader.html#cfn-ecs-service-serviceconnecttesttrafficrulesheader-name>
+                                                  name :: (Value Prelude.Text),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnecttesttrafficrulesheader.html#cfn-ecs-service-serviceconnecttesttrafficrulesheader-value>
+                                                  value :: (Prelude.Maybe ServiceConnectTestTrafficRulesHeaderValueProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkServiceConnectTestTrafficRulesHeaderProperty ::
+  Value Prelude.Text -> ServiceConnectTestTrafficRulesHeaderProperty
+mkServiceConnectTestTrafficRulesHeaderProperty name
+  = ServiceConnectTestTrafficRulesHeaderProperty
+      {haddock_workaround_ = (), name = name, value = Prelude.Nothing}
+instance ToResourceProperties ServiceConnectTestTrafficRulesHeaderProperty where
+  toResourceProperties
+    ServiceConnectTestTrafficRulesHeaderProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.ServiceConnectTestTrafficRulesHeader",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Name" JSON..= name]
+                           (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value]))}
+instance JSON.ToJSON ServiceConnectTestTrafficRulesHeaderProperty where
+  toJSON ServiceConnectTestTrafficRulesHeaderProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Name" JSON..= name]
+              (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value])))
+instance Property "Name" ServiceConnectTestTrafficRulesHeaderProperty where
+  type PropertyType "Name" ServiceConnectTestTrafficRulesHeaderProperty = Value Prelude.Text
+  set newValue ServiceConnectTestTrafficRulesHeaderProperty {..}
+    = ServiceConnectTestTrafficRulesHeaderProperty
+        {name = newValue, ..}
+instance Property "Value" ServiceConnectTestTrafficRulesHeaderProperty where
+  type PropertyType "Value" ServiceConnectTestTrafficRulesHeaderProperty = ServiceConnectTestTrafficRulesHeaderValueProperty
+  set newValue ServiceConnectTestTrafficRulesHeaderProperty {..}
+    = ServiceConnectTestTrafficRulesHeaderProperty
+        {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesHeaderProperty.hs-boot b/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesHeaderProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesHeaderProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.ServiceConnectTestTrafficRulesHeaderProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ServiceConnectTestTrafficRulesHeaderProperty :: Prelude.Type
+instance ToResourceProperties ServiceConnectTestTrafficRulesHeaderProperty
+instance Prelude.Eq ServiceConnectTestTrafficRulesHeaderProperty
+instance Prelude.Show ServiceConnectTestTrafficRulesHeaderProperty
+instance JSON.ToJSON ServiceConnectTestTrafficRulesHeaderProperty
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesHeaderValueProperty.hs b/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesHeaderValueProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesHeaderValueProperty.hs
@@ -0,0 +1,35 @@
+module Stratosphere.ECS.Service.ServiceConnectTestTrafficRulesHeaderValueProperty (
+        ServiceConnectTestTrafficRulesHeaderValueProperty(..),
+        mkServiceConnectTestTrafficRulesHeaderValueProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ServiceConnectTestTrafficRulesHeaderValueProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnecttesttrafficrulesheadervalue.html>
+    ServiceConnectTestTrafficRulesHeaderValueProperty {haddock_workaround_ :: (),
+                                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnecttesttrafficrulesheadervalue.html#cfn-ecs-service-serviceconnecttesttrafficrulesheadervalue-exact>
+                                                       exact :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkServiceConnectTestTrafficRulesHeaderValueProperty ::
+  Value Prelude.Text
+  -> ServiceConnectTestTrafficRulesHeaderValueProperty
+mkServiceConnectTestTrafficRulesHeaderValueProperty exact
+  = ServiceConnectTestTrafficRulesHeaderValueProperty
+      {haddock_workaround_ = (), exact = exact}
+instance ToResourceProperties ServiceConnectTestTrafficRulesHeaderValueProperty where
+  toResourceProperties
+    ServiceConnectTestTrafficRulesHeaderValueProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.ServiceConnectTestTrafficRulesHeaderValue",
+         supportsTags = Prelude.False, properties = ["Exact" JSON..= exact]}
+instance JSON.ToJSON ServiceConnectTestTrafficRulesHeaderValueProperty where
+  toJSON ServiceConnectTestTrafficRulesHeaderValueProperty {..}
+    = JSON.object ["Exact" JSON..= exact]
+instance Property "Exact" ServiceConnectTestTrafficRulesHeaderValueProperty where
+  type PropertyType "Exact" ServiceConnectTestTrafficRulesHeaderValueProperty = Value Prelude.Text
+  set newValue ServiceConnectTestTrafficRulesHeaderValueProperty {..}
+    = ServiceConnectTestTrafficRulesHeaderValueProperty
+        {exact = newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesHeaderValueProperty.hs-boot b/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesHeaderValueProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesHeaderValueProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.ServiceConnectTestTrafficRulesHeaderValueProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ServiceConnectTestTrafficRulesHeaderValueProperty :: Prelude.Type
+instance ToResourceProperties ServiceConnectTestTrafficRulesHeaderValueProperty
+instance Prelude.Eq ServiceConnectTestTrafficRulesHeaderValueProperty
+instance Prelude.Show ServiceConnectTestTrafficRulesHeaderValueProperty
+instance JSON.ToJSON ServiceConnectTestTrafficRulesHeaderValueProperty
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesProperty.hs b/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.ECS.Service.ServiceConnectTestTrafficRulesProperty (
+        module Exports, ServiceConnectTestTrafficRulesProperty(..),
+        mkServiceConnectTestTrafficRulesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.Service.ServiceConnectTestTrafficRulesHeaderProperty as Exports
+import Stratosphere.ResourceProperties
+data ServiceConnectTestTrafficRulesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnecttesttrafficrules.html>
+    ServiceConnectTestTrafficRulesProperty {haddock_workaround_ :: (),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnecttesttrafficrules.html#cfn-ecs-service-serviceconnecttesttrafficrules-header>
+                                            header :: ServiceConnectTestTrafficRulesHeaderProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkServiceConnectTestTrafficRulesProperty ::
+  ServiceConnectTestTrafficRulesHeaderProperty
+  -> ServiceConnectTestTrafficRulesProperty
+mkServiceConnectTestTrafficRulesProperty header
+  = ServiceConnectTestTrafficRulesProperty
+      {haddock_workaround_ = (), header = header}
+instance ToResourceProperties ServiceConnectTestTrafficRulesProperty where
+  toResourceProperties ServiceConnectTestTrafficRulesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.ServiceConnectTestTrafficRules",
+         supportsTags = Prelude.False,
+         properties = ["Header" JSON..= header]}
+instance JSON.ToJSON ServiceConnectTestTrafficRulesProperty where
+  toJSON ServiceConnectTestTrafficRulesProperty {..}
+    = JSON.object ["Header" JSON..= header]
+instance Property "Header" ServiceConnectTestTrafficRulesProperty where
+  type PropertyType "Header" ServiceConnectTestTrafficRulesProperty = ServiceConnectTestTrafficRulesHeaderProperty
+  set newValue ServiceConnectTestTrafficRulesProperty {..}
+    = ServiceConnectTestTrafficRulesProperty {header = newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesProperty.hs-boot b/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectTestTrafficRulesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.ServiceConnectTestTrafficRulesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ServiceConnectTestTrafficRulesProperty :: Prelude.Type
+instance ToResourceProperties ServiceConnectTestTrafficRulesProperty
+instance Prelude.Eq ServiceConnectTestTrafficRulesProperty
+instance Prelude.Show ServiceConnectTestTrafficRulesProperty
+instance JSON.ToJSON ServiceConnectTestTrafficRulesProperty
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectTlsCertificateAuthorityProperty.hs b/gen/Stratosphere/ECS/Service/ServiceConnectTlsCertificateAuthorityProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectTlsCertificateAuthorityProperty.hs
@@ -0,0 +1,40 @@
+module Stratosphere.ECS.Service.ServiceConnectTlsCertificateAuthorityProperty (
+        ServiceConnectTlsCertificateAuthorityProperty(..),
+        mkServiceConnectTlsCertificateAuthorityProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ServiceConnectTlsCertificateAuthorityProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnecttlscertificateauthority.html>
+    ServiceConnectTlsCertificateAuthorityProperty {haddock_workaround_ :: (),
+                                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnecttlscertificateauthority.html#cfn-ecs-service-serviceconnecttlscertificateauthority-awspcaauthorityarn>
+                                                   awsPcaAuthorityArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkServiceConnectTlsCertificateAuthorityProperty ::
+  ServiceConnectTlsCertificateAuthorityProperty
+mkServiceConnectTlsCertificateAuthorityProperty
+  = ServiceConnectTlsCertificateAuthorityProperty
+      {haddock_workaround_ = (), awsPcaAuthorityArn = Prelude.Nothing}
+instance ToResourceProperties ServiceConnectTlsCertificateAuthorityProperty where
+  toResourceProperties
+    ServiceConnectTlsCertificateAuthorityProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.ServiceConnectTlsCertificateAuthority",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AwsPcaAuthorityArn" Prelude.<$> awsPcaAuthorityArn])}
+instance JSON.ToJSON ServiceConnectTlsCertificateAuthorityProperty where
+  toJSON ServiceConnectTlsCertificateAuthorityProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AwsPcaAuthorityArn" Prelude.<$> awsPcaAuthorityArn]))
+instance Property "AwsPcaAuthorityArn" ServiceConnectTlsCertificateAuthorityProperty where
+  type PropertyType "AwsPcaAuthorityArn" ServiceConnectTlsCertificateAuthorityProperty = Value Prelude.Text
+  set newValue ServiceConnectTlsCertificateAuthorityProperty {..}
+    = ServiceConnectTlsCertificateAuthorityProperty
+        {awsPcaAuthorityArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectTlsCertificateAuthorityProperty.hs-boot b/gen/Stratosphere/ECS/Service/ServiceConnectTlsCertificateAuthorityProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectTlsCertificateAuthorityProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.ServiceConnectTlsCertificateAuthorityProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ServiceConnectTlsCertificateAuthorityProperty :: Prelude.Type
+instance ToResourceProperties ServiceConnectTlsCertificateAuthorityProperty
+instance Prelude.Eq ServiceConnectTlsCertificateAuthorityProperty
+instance Prelude.Show ServiceConnectTlsCertificateAuthorityProperty
+instance JSON.ToJSON ServiceConnectTlsCertificateAuthorityProperty
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectTlsConfigurationProperty.hs b/gen/Stratosphere/ECS/Service/ServiceConnectTlsConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectTlsConfigurationProperty.hs
@@ -0,0 +1,63 @@
+module Stratosphere.ECS.Service.ServiceConnectTlsConfigurationProperty (
+        module Exports, ServiceConnectTlsConfigurationProperty(..),
+        mkServiceConnectTlsConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.Service.ServiceConnectTlsCertificateAuthorityProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ServiceConnectTlsConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnecttlsconfiguration.html>
+    ServiceConnectTlsConfigurationProperty {haddock_workaround_ :: (),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnecttlsconfiguration.html#cfn-ecs-service-serviceconnecttlsconfiguration-issuercertificateauthority>
+                                            issuerCertificateAuthority :: ServiceConnectTlsCertificateAuthorityProperty,
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnecttlsconfiguration.html#cfn-ecs-service-serviceconnecttlsconfiguration-kmskey>
+                                            kmsKey :: (Prelude.Maybe (Value Prelude.Text)),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnecttlsconfiguration.html#cfn-ecs-service-serviceconnecttlsconfiguration-rolearn>
+                                            roleArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkServiceConnectTlsConfigurationProperty ::
+  ServiceConnectTlsCertificateAuthorityProperty
+  -> ServiceConnectTlsConfigurationProperty
+mkServiceConnectTlsConfigurationProperty issuerCertificateAuthority
+  = ServiceConnectTlsConfigurationProperty
+      {haddock_workaround_ = (),
+       issuerCertificateAuthority = issuerCertificateAuthority,
+       kmsKey = Prelude.Nothing, roleArn = Prelude.Nothing}
+instance ToResourceProperties ServiceConnectTlsConfigurationProperty where
+  toResourceProperties ServiceConnectTlsConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.ServiceConnectTlsConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IssuerCertificateAuthority" JSON..= issuerCertificateAuthority]
+                           (Prelude.catMaybes
+                              [(JSON..=) "KmsKey" Prelude.<$> kmsKey,
+                               (JSON..=) "RoleArn" Prelude.<$> roleArn]))}
+instance JSON.ToJSON ServiceConnectTlsConfigurationProperty where
+  toJSON ServiceConnectTlsConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IssuerCertificateAuthority" JSON..= issuerCertificateAuthority]
+              (Prelude.catMaybes
+                 [(JSON..=) "KmsKey" Prelude.<$> kmsKey,
+                  (JSON..=) "RoleArn" Prelude.<$> roleArn])))
+instance Property "IssuerCertificateAuthority" ServiceConnectTlsConfigurationProperty where
+  type PropertyType "IssuerCertificateAuthority" ServiceConnectTlsConfigurationProperty = ServiceConnectTlsCertificateAuthorityProperty
+  set newValue ServiceConnectTlsConfigurationProperty {..}
+    = ServiceConnectTlsConfigurationProperty
+        {issuerCertificateAuthority = newValue, ..}
+instance Property "KmsKey" ServiceConnectTlsConfigurationProperty where
+  type PropertyType "KmsKey" ServiceConnectTlsConfigurationProperty = Value Prelude.Text
+  set newValue ServiceConnectTlsConfigurationProperty {..}
+    = ServiceConnectTlsConfigurationProperty
+        {kmsKey = Prelude.pure newValue, ..}
+instance Property "RoleArn" ServiceConnectTlsConfigurationProperty where
+  type PropertyType "RoleArn" ServiceConnectTlsConfigurationProperty = Value Prelude.Text
+  set newValue ServiceConnectTlsConfigurationProperty {..}
+    = ServiceConnectTlsConfigurationProperty
+        {roleArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/ServiceConnectTlsConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Service/ServiceConnectTlsConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceConnectTlsConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.ServiceConnectTlsConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ServiceConnectTlsConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ServiceConnectTlsConfigurationProperty
+instance Prelude.Eq ServiceConnectTlsConfigurationProperty
+instance Prelude.Show ServiceConnectTlsConfigurationProperty
+instance JSON.ToJSON ServiceConnectTlsConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Service/ServiceManagedEBSVolumeConfigurationProperty.hs b/gen/Stratosphere/ECS/Service/ServiceManagedEBSVolumeConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceManagedEBSVolumeConfigurationProperty.hs
@@ -0,0 +1,141 @@
+module Stratosphere.ECS.Service.ServiceManagedEBSVolumeConfigurationProperty (
+        module Exports, ServiceManagedEBSVolumeConfigurationProperty(..),
+        mkServiceManagedEBSVolumeConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.Service.EBSTagSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ServiceManagedEBSVolumeConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-servicemanagedebsvolumeconfiguration.html>
+    ServiceManagedEBSVolumeConfigurationProperty {haddock_workaround_ :: (),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-servicemanagedebsvolumeconfiguration.html#cfn-ecs-service-servicemanagedebsvolumeconfiguration-encrypted>
+                                                  encrypted :: (Prelude.Maybe (Value Prelude.Bool)),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-servicemanagedebsvolumeconfiguration.html#cfn-ecs-service-servicemanagedebsvolumeconfiguration-filesystemtype>
+                                                  filesystemType :: (Prelude.Maybe (Value Prelude.Text)),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-servicemanagedebsvolumeconfiguration.html#cfn-ecs-service-servicemanagedebsvolumeconfiguration-iops>
+                                                  iops :: (Prelude.Maybe (Value Prelude.Integer)),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-servicemanagedebsvolumeconfiguration.html#cfn-ecs-service-servicemanagedebsvolumeconfiguration-kmskeyid>
+                                                  kmsKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-servicemanagedebsvolumeconfiguration.html#cfn-ecs-service-servicemanagedebsvolumeconfiguration-rolearn>
+                                                  roleArn :: (Value Prelude.Text),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-servicemanagedebsvolumeconfiguration.html#cfn-ecs-service-servicemanagedebsvolumeconfiguration-sizeingib>
+                                                  sizeInGiB :: (Prelude.Maybe (Value Prelude.Integer)),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-servicemanagedebsvolumeconfiguration.html#cfn-ecs-service-servicemanagedebsvolumeconfiguration-snapshotid>
+                                                  snapshotId :: (Prelude.Maybe (Value Prelude.Text)),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-servicemanagedebsvolumeconfiguration.html#cfn-ecs-service-servicemanagedebsvolumeconfiguration-tagspecifications>
+                                                  tagSpecifications :: (Prelude.Maybe [EBSTagSpecificationProperty]),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-servicemanagedebsvolumeconfiguration.html#cfn-ecs-service-servicemanagedebsvolumeconfiguration-throughput>
+                                                  throughput :: (Prelude.Maybe (Value Prelude.Integer)),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-servicemanagedebsvolumeconfiguration.html#cfn-ecs-service-servicemanagedebsvolumeconfiguration-volumeinitializationrate>
+                                                  volumeInitializationRate :: (Prelude.Maybe (Value Prelude.Integer)),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-servicemanagedebsvolumeconfiguration.html#cfn-ecs-service-servicemanagedebsvolumeconfiguration-volumetype>
+                                                  volumeType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkServiceManagedEBSVolumeConfigurationProperty ::
+  Value Prelude.Text -> ServiceManagedEBSVolumeConfigurationProperty
+mkServiceManagedEBSVolumeConfigurationProperty roleArn
+  = ServiceManagedEBSVolumeConfigurationProperty
+      {haddock_workaround_ = (), roleArn = roleArn,
+       encrypted = Prelude.Nothing, filesystemType = Prelude.Nothing,
+       iops = Prelude.Nothing, kmsKeyId = Prelude.Nothing,
+       sizeInGiB = Prelude.Nothing, snapshotId = Prelude.Nothing,
+       tagSpecifications = Prelude.Nothing, throughput = Prelude.Nothing,
+       volumeInitializationRate = Prelude.Nothing,
+       volumeType = Prelude.Nothing}
+instance ToResourceProperties ServiceManagedEBSVolumeConfigurationProperty where
+  toResourceProperties
+    ServiceManagedEBSVolumeConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.ServiceManagedEBSVolumeConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["RoleArn" JSON..= roleArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Encrypted" Prelude.<$> encrypted,
+                               (JSON..=) "FilesystemType" Prelude.<$> filesystemType,
+                               (JSON..=) "Iops" Prelude.<$> iops,
+                               (JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId,
+                               (JSON..=) "SizeInGiB" Prelude.<$> sizeInGiB,
+                               (JSON..=) "SnapshotId" Prelude.<$> snapshotId,
+                               (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+                               (JSON..=) "Throughput" Prelude.<$> throughput,
+                               (JSON..=) "VolumeInitializationRate"
+                                 Prelude.<$> volumeInitializationRate,
+                               (JSON..=) "VolumeType" Prelude.<$> volumeType]))}
+instance JSON.ToJSON ServiceManagedEBSVolumeConfigurationProperty where
+  toJSON ServiceManagedEBSVolumeConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["RoleArn" JSON..= roleArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "Encrypted" Prelude.<$> encrypted,
+                  (JSON..=) "FilesystemType" Prelude.<$> filesystemType,
+                  (JSON..=) "Iops" Prelude.<$> iops,
+                  (JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId,
+                  (JSON..=) "SizeInGiB" Prelude.<$> sizeInGiB,
+                  (JSON..=) "SnapshotId" Prelude.<$> snapshotId,
+                  (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+                  (JSON..=) "Throughput" Prelude.<$> throughput,
+                  (JSON..=) "VolumeInitializationRate"
+                    Prelude.<$> volumeInitializationRate,
+                  (JSON..=) "VolumeType" Prelude.<$> volumeType])))
+instance Property "Encrypted" ServiceManagedEBSVolumeConfigurationProperty where
+  type PropertyType "Encrypted" ServiceManagedEBSVolumeConfigurationProperty = Value Prelude.Bool
+  set newValue ServiceManagedEBSVolumeConfigurationProperty {..}
+    = ServiceManagedEBSVolumeConfigurationProperty
+        {encrypted = Prelude.pure newValue, ..}
+instance Property "FilesystemType" ServiceManagedEBSVolumeConfigurationProperty where
+  type PropertyType "FilesystemType" ServiceManagedEBSVolumeConfigurationProperty = Value Prelude.Text
+  set newValue ServiceManagedEBSVolumeConfigurationProperty {..}
+    = ServiceManagedEBSVolumeConfigurationProperty
+        {filesystemType = Prelude.pure newValue, ..}
+instance Property "Iops" ServiceManagedEBSVolumeConfigurationProperty where
+  type PropertyType "Iops" ServiceManagedEBSVolumeConfigurationProperty = Value Prelude.Integer
+  set newValue ServiceManagedEBSVolumeConfigurationProperty {..}
+    = ServiceManagedEBSVolumeConfigurationProperty
+        {iops = Prelude.pure newValue, ..}
+instance Property "KmsKeyId" ServiceManagedEBSVolumeConfigurationProperty where
+  type PropertyType "KmsKeyId" ServiceManagedEBSVolumeConfigurationProperty = Value Prelude.Text
+  set newValue ServiceManagedEBSVolumeConfigurationProperty {..}
+    = ServiceManagedEBSVolumeConfigurationProperty
+        {kmsKeyId = Prelude.pure newValue, ..}
+instance Property "RoleArn" ServiceManagedEBSVolumeConfigurationProperty where
+  type PropertyType "RoleArn" ServiceManagedEBSVolumeConfigurationProperty = Value Prelude.Text
+  set newValue ServiceManagedEBSVolumeConfigurationProperty {..}
+    = ServiceManagedEBSVolumeConfigurationProperty
+        {roleArn = newValue, ..}
+instance Property "SizeInGiB" ServiceManagedEBSVolumeConfigurationProperty where
+  type PropertyType "SizeInGiB" ServiceManagedEBSVolumeConfigurationProperty = Value Prelude.Integer
+  set newValue ServiceManagedEBSVolumeConfigurationProperty {..}
+    = ServiceManagedEBSVolumeConfigurationProperty
+        {sizeInGiB = Prelude.pure newValue, ..}
+instance Property "SnapshotId" ServiceManagedEBSVolumeConfigurationProperty where
+  type PropertyType "SnapshotId" ServiceManagedEBSVolumeConfigurationProperty = Value Prelude.Text
+  set newValue ServiceManagedEBSVolumeConfigurationProperty {..}
+    = ServiceManagedEBSVolumeConfigurationProperty
+        {snapshotId = Prelude.pure newValue, ..}
+instance Property "TagSpecifications" ServiceManagedEBSVolumeConfigurationProperty where
+  type PropertyType "TagSpecifications" ServiceManagedEBSVolumeConfigurationProperty = [EBSTagSpecificationProperty]
+  set newValue ServiceManagedEBSVolumeConfigurationProperty {..}
+    = ServiceManagedEBSVolumeConfigurationProperty
+        {tagSpecifications = Prelude.pure newValue, ..}
+instance Property "Throughput" ServiceManagedEBSVolumeConfigurationProperty where
+  type PropertyType "Throughput" ServiceManagedEBSVolumeConfigurationProperty = Value Prelude.Integer
+  set newValue ServiceManagedEBSVolumeConfigurationProperty {..}
+    = ServiceManagedEBSVolumeConfigurationProperty
+        {throughput = Prelude.pure newValue, ..}
+instance Property "VolumeInitializationRate" ServiceManagedEBSVolumeConfigurationProperty where
+  type PropertyType "VolumeInitializationRate" ServiceManagedEBSVolumeConfigurationProperty = Value Prelude.Integer
+  set newValue ServiceManagedEBSVolumeConfigurationProperty {..}
+    = ServiceManagedEBSVolumeConfigurationProperty
+        {volumeInitializationRate = Prelude.pure newValue, ..}
+instance Property "VolumeType" ServiceManagedEBSVolumeConfigurationProperty where
+  type PropertyType "VolumeType" ServiceManagedEBSVolumeConfigurationProperty = Value Prelude.Text
+  set newValue ServiceManagedEBSVolumeConfigurationProperty {..}
+    = ServiceManagedEBSVolumeConfigurationProperty
+        {volumeType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/ServiceManagedEBSVolumeConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Service/ServiceManagedEBSVolumeConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceManagedEBSVolumeConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.ServiceManagedEBSVolumeConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ServiceManagedEBSVolumeConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ServiceManagedEBSVolumeConfigurationProperty
+instance Prelude.Eq ServiceManagedEBSVolumeConfigurationProperty
+instance Prelude.Show ServiceManagedEBSVolumeConfigurationProperty
+instance JSON.ToJSON ServiceManagedEBSVolumeConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Service/ServiceRegistryProperty.hs b/gen/Stratosphere/ECS/Service/ServiceRegistryProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceRegistryProperty.hs
@@ -0,0 +1,64 @@
+module Stratosphere.ECS.Service.ServiceRegistryProperty (
+        ServiceRegistryProperty(..), mkServiceRegistryProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ServiceRegistryProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceregistry.html>
+    ServiceRegistryProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceregistry.html#cfn-ecs-service-serviceregistry-containername>
+                             containerName :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceregistry.html#cfn-ecs-service-serviceregistry-containerport>
+                             containerPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceregistry.html#cfn-ecs-service-serviceregistry-port>
+                             port :: (Prelude.Maybe (Value Prelude.Integer)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceregistry.html#cfn-ecs-service-serviceregistry-registryarn>
+                             registryArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkServiceRegistryProperty :: ServiceRegistryProperty
+mkServiceRegistryProperty
+  = ServiceRegistryProperty
+      {haddock_workaround_ = (), containerName = Prelude.Nothing,
+       containerPort = Prelude.Nothing, port = Prelude.Nothing,
+       registryArn = Prelude.Nothing}
+instance ToResourceProperties ServiceRegistryProperty where
+  toResourceProperties ServiceRegistryProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.ServiceRegistry",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ContainerName" Prelude.<$> containerName,
+                            (JSON..=) "ContainerPort" Prelude.<$> containerPort,
+                            (JSON..=) "Port" Prelude.<$> port,
+                            (JSON..=) "RegistryArn" Prelude.<$> registryArn])}
+instance JSON.ToJSON ServiceRegistryProperty where
+  toJSON ServiceRegistryProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ContainerName" Prelude.<$> containerName,
+               (JSON..=) "ContainerPort" Prelude.<$> containerPort,
+               (JSON..=) "Port" Prelude.<$> port,
+               (JSON..=) "RegistryArn" Prelude.<$> registryArn]))
+instance Property "ContainerName" ServiceRegistryProperty where
+  type PropertyType "ContainerName" ServiceRegistryProperty = Value Prelude.Text
+  set newValue ServiceRegistryProperty {..}
+    = ServiceRegistryProperty
+        {containerName = Prelude.pure newValue, ..}
+instance Property "ContainerPort" ServiceRegistryProperty where
+  type PropertyType "ContainerPort" ServiceRegistryProperty = Value Prelude.Integer
+  set newValue ServiceRegistryProperty {..}
+    = ServiceRegistryProperty
+        {containerPort = Prelude.pure newValue, ..}
+instance Property "Port" ServiceRegistryProperty where
+  type PropertyType "Port" ServiceRegistryProperty = Value Prelude.Integer
+  set newValue ServiceRegistryProperty {..}
+    = ServiceRegistryProperty {port = Prelude.pure newValue, ..}
+instance Property "RegistryArn" ServiceRegistryProperty where
+  type PropertyType "RegistryArn" ServiceRegistryProperty = Value Prelude.Text
+  set newValue ServiceRegistryProperty {..}
+    = ServiceRegistryProperty {registryArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/ServiceRegistryProperty.hs-boot b/gen/Stratosphere/ECS/Service/ServiceRegistryProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceRegistryProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.ServiceRegistryProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ServiceRegistryProperty :: Prelude.Type
+instance ToResourceProperties ServiceRegistryProperty
+instance Prelude.Eq ServiceRegistryProperty
+instance Prelude.Show ServiceRegistryProperty
+instance JSON.ToJSON ServiceRegistryProperty
diff --git a/gen/Stratosphere/ECS/Service/ServiceVolumeConfigurationProperty.hs b/gen/Stratosphere/ECS/Service/ServiceVolumeConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceVolumeConfigurationProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.ECS.Service.ServiceVolumeConfigurationProperty (
+        module Exports, ServiceVolumeConfigurationProperty(..),
+        mkServiceVolumeConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.Service.ServiceManagedEBSVolumeConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ServiceVolumeConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-servicevolumeconfiguration.html>
+    ServiceVolumeConfigurationProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-servicevolumeconfiguration.html#cfn-ecs-service-servicevolumeconfiguration-managedebsvolume>
+                                        managedEBSVolume :: (Prelude.Maybe ServiceManagedEBSVolumeConfigurationProperty),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-servicevolumeconfiguration.html#cfn-ecs-service-servicevolumeconfiguration-name>
+                                        name :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkServiceVolumeConfigurationProperty ::
+  Value Prelude.Text -> ServiceVolumeConfigurationProperty
+mkServiceVolumeConfigurationProperty name
+  = ServiceVolumeConfigurationProperty
+      {haddock_workaround_ = (), name = name,
+       managedEBSVolume = Prelude.Nothing}
+instance ToResourceProperties ServiceVolumeConfigurationProperty where
+  toResourceProperties ServiceVolumeConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.ServiceVolumeConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ManagedEBSVolume" Prelude.<$> managedEBSVolume]))}
+instance JSON.ToJSON ServiceVolumeConfigurationProperty where
+  toJSON ServiceVolumeConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "ManagedEBSVolume" Prelude.<$> managedEBSVolume])))
+instance Property "ManagedEBSVolume" ServiceVolumeConfigurationProperty where
+  type PropertyType "ManagedEBSVolume" ServiceVolumeConfigurationProperty = ServiceManagedEBSVolumeConfigurationProperty
+  set newValue ServiceVolumeConfigurationProperty {..}
+    = ServiceVolumeConfigurationProperty
+        {managedEBSVolume = Prelude.pure newValue, ..}
+instance Property "Name" ServiceVolumeConfigurationProperty where
+  type PropertyType "Name" ServiceVolumeConfigurationProperty = Value Prelude.Text
+  set newValue ServiceVolumeConfigurationProperty {..}
+    = ServiceVolumeConfigurationProperty {name = newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/ServiceVolumeConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Service/ServiceVolumeConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/ServiceVolumeConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.ServiceVolumeConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ServiceVolumeConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ServiceVolumeConfigurationProperty
+instance Prelude.Eq ServiceVolumeConfigurationProperty
+instance Prelude.Show ServiceVolumeConfigurationProperty
+instance JSON.ToJSON ServiceVolumeConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Service/TimeoutConfigurationProperty.hs b/gen/Stratosphere/ECS/Service/TimeoutConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/TimeoutConfigurationProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ECS.Service.TimeoutConfigurationProperty (
+        TimeoutConfigurationProperty(..), mkTimeoutConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TimeoutConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-timeoutconfiguration.html>
+    TimeoutConfigurationProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-timeoutconfiguration.html#cfn-ecs-service-timeoutconfiguration-idletimeoutseconds>
+                                  idleTimeoutSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-timeoutconfiguration.html#cfn-ecs-service-timeoutconfiguration-perrequesttimeoutseconds>
+                                  perRequestTimeoutSeconds :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTimeoutConfigurationProperty :: TimeoutConfigurationProperty
+mkTimeoutConfigurationProperty
+  = TimeoutConfigurationProperty
+      {haddock_workaround_ = (), idleTimeoutSeconds = Prelude.Nothing,
+       perRequestTimeoutSeconds = Prelude.Nothing}
+instance ToResourceProperties TimeoutConfigurationProperty where
+  toResourceProperties TimeoutConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.TimeoutConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "IdleTimeoutSeconds" Prelude.<$> idleTimeoutSeconds,
+                            (JSON..=) "PerRequestTimeoutSeconds"
+                              Prelude.<$> perRequestTimeoutSeconds])}
+instance JSON.ToJSON TimeoutConfigurationProperty where
+  toJSON TimeoutConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "IdleTimeoutSeconds" Prelude.<$> idleTimeoutSeconds,
+               (JSON..=) "PerRequestTimeoutSeconds"
+                 Prelude.<$> perRequestTimeoutSeconds]))
+instance Property "IdleTimeoutSeconds" TimeoutConfigurationProperty where
+  type PropertyType "IdleTimeoutSeconds" TimeoutConfigurationProperty = Value Prelude.Integer
+  set newValue TimeoutConfigurationProperty {..}
+    = TimeoutConfigurationProperty
+        {idleTimeoutSeconds = Prelude.pure newValue, ..}
+instance Property "PerRequestTimeoutSeconds" TimeoutConfigurationProperty where
+  type PropertyType "PerRequestTimeoutSeconds" TimeoutConfigurationProperty = Value Prelude.Integer
+  set newValue TimeoutConfigurationProperty {..}
+    = TimeoutConfigurationProperty
+        {perRequestTimeoutSeconds = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/TimeoutConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Service/TimeoutConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/TimeoutConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.TimeoutConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TimeoutConfigurationProperty :: Prelude.Type
+instance ToResourceProperties TimeoutConfigurationProperty
+instance Prelude.Eq TimeoutConfigurationProperty
+instance Prelude.Show TimeoutConfigurationProperty
+instance JSON.ToJSON TimeoutConfigurationProperty
diff --git a/gen/Stratosphere/ECS/Service/VpcLatticeConfigurationProperty.hs b/gen/Stratosphere/ECS/Service/VpcLatticeConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/VpcLatticeConfigurationProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.ECS.Service.VpcLatticeConfigurationProperty (
+        VpcLatticeConfigurationProperty(..),
+        mkVpcLatticeConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VpcLatticeConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-vpclatticeconfiguration.html>
+    VpcLatticeConfigurationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-vpclatticeconfiguration.html#cfn-ecs-service-vpclatticeconfiguration-portname>
+                                     portName :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-vpclatticeconfiguration.html#cfn-ecs-service-vpclatticeconfiguration-rolearn>
+                                     roleArn :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-vpclatticeconfiguration.html#cfn-ecs-service-vpclatticeconfiguration-targetgrouparn>
+                                     targetGroupArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVpcLatticeConfigurationProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> VpcLatticeConfigurationProperty
+mkVpcLatticeConfigurationProperty portName roleArn targetGroupArn
+  = VpcLatticeConfigurationProperty
+      {haddock_workaround_ = (), portName = portName, roleArn = roleArn,
+       targetGroupArn = targetGroupArn}
+instance ToResourceProperties VpcLatticeConfigurationProperty where
+  toResourceProperties VpcLatticeConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::Service.VpcLatticeConfiguration",
+         supportsTags = Prelude.False,
+         properties = ["PortName" JSON..= portName,
+                       "RoleArn" JSON..= roleArn,
+                       "TargetGroupArn" JSON..= targetGroupArn]}
+instance JSON.ToJSON VpcLatticeConfigurationProperty where
+  toJSON VpcLatticeConfigurationProperty {..}
+    = JSON.object
+        ["PortName" JSON..= portName, "RoleArn" JSON..= roleArn,
+         "TargetGroupArn" JSON..= targetGroupArn]
+instance Property "PortName" VpcLatticeConfigurationProperty where
+  type PropertyType "PortName" VpcLatticeConfigurationProperty = Value Prelude.Text
+  set newValue VpcLatticeConfigurationProperty {..}
+    = VpcLatticeConfigurationProperty {portName = newValue, ..}
+instance Property "RoleArn" VpcLatticeConfigurationProperty where
+  type PropertyType "RoleArn" VpcLatticeConfigurationProperty = Value Prelude.Text
+  set newValue VpcLatticeConfigurationProperty {..}
+    = VpcLatticeConfigurationProperty {roleArn = newValue, ..}
+instance Property "TargetGroupArn" VpcLatticeConfigurationProperty where
+  type PropertyType "TargetGroupArn" VpcLatticeConfigurationProperty = Value Prelude.Text
+  set newValue VpcLatticeConfigurationProperty {..}
+    = VpcLatticeConfigurationProperty {targetGroupArn = newValue, ..}
diff --git a/gen/Stratosphere/ECS/Service/VpcLatticeConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/Service/VpcLatticeConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/Service/VpcLatticeConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.Service.VpcLatticeConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VpcLatticeConfigurationProperty :: Prelude.Type
+instance ToResourceProperties VpcLatticeConfigurationProperty
+instance Prelude.Eq VpcLatticeConfigurationProperty
+instance Prelude.Show VpcLatticeConfigurationProperty
+instance JSON.ToJSON VpcLatticeConfigurationProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition.hs b/gen/Stratosphere/ECS/TaskDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition.hs
@@ -0,0 +1,183 @@
+module Stratosphere.ECS.TaskDefinition (
+        module Exports, TaskDefinition(..), mkTaskDefinition
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.ContainerDefinitionProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.EphemeralStorageProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.ProxyConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.RuntimePlatformProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.TaskDefinitionPlacementConstraintProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.VolumeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TaskDefinition
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html>
+    TaskDefinition {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-containerdefinitions>
+                    containerDefinitions :: (Prelude.Maybe [ContainerDefinitionProperty]),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-cpu>
+                    cpu :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-enablefaultinjection>
+                    enableFaultInjection :: (Prelude.Maybe (Value Prelude.Bool)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-ephemeralstorage>
+                    ephemeralStorage :: (Prelude.Maybe EphemeralStorageProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-executionrolearn>
+                    executionRoleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-family>
+                    family :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-ipcmode>
+                    ipcMode :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-memory>
+                    memory :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-networkmode>
+                    networkMode :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-pidmode>
+                    pidMode :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-placementconstraints>
+                    placementConstraints :: (Prelude.Maybe [TaskDefinitionPlacementConstraintProperty]),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-proxyconfiguration>
+                    proxyConfiguration :: (Prelude.Maybe ProxyConfigurationProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-requirescompatibilities>
+                    requiresCompatibilities :: (Prelude.Maybe (ValueList Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-runtimeplatform>
+                    runtimePlatform :: (Prelude.Maybe RuntimePlatformProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-tags>
+                    tags :: (Prelude.Maybe [Tag]),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-taskrolearn>
+                    taskRoleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-volumes>
+                    volumes :: (Prelude.Maybe [VolumeProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTaskDefinition :: TaskDefinition
+mkTaskDefinition
+  = TaskDefinition
+      {haddock_workaround_ = (), containerDefinitions = Prelude.Nothing,
+       cpu = Prelude.Nothing, enableFaultInjection = Prelude.Nothing,
+       ephemeralStorage = Prelude.Nothing,
+       executionRoleArn = Prelude.Nothing, family = Prelude.Nothing,
+       ipcMode = Prelude.Nothing, memory = Prelude.Nothing,
+       networkMode = Prelude.Nothing, pidMode = Prelude.Nothing,
+       placementConstraints = Prelude.Nothing,
+       proxyConfiguration = Prelude.Nothing,
+       requiresCompatibilities = Prelude.Nothing,
+       runtimePlatform = Prelude.Nothing, tags = Prelude.Nothing,
+       taskRoleArn = Prelude.Nothing, volumes = Prelude.Nothing}
+instance ToResourceProperties TaskDefinition where
+  toResourceProperties TaskDefinition {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ContainerDefinitions" Prelude.<$> containerDefinitions,
+                            (JSON..=) "Cpu" Prelude.<$> cpu,
+                            (JSON..=) "EnableFaultInjection" Prelude.<$> enableFaultInjection,
+                            (JSON..=) "EphemeralStorage" Prelude.<$> ephemeralStorage,
+                            (JSON..=) "ExecutionRoleArn" Prelude.<$> executionRoleArn,
+                            (JSON..=) "Family" Prelude.<$> family,
+                            (JSON..=) "IpcMode" Prelude.<$> ipcMode,
+                            (JSON..=) "Memory" Prelude.<$> memory,
+                            (JSON..=) "NetworkMode" Prelude.<$> networkMode,
+                            (JSON..=) "PidMode" Prelude.<$> pidMode,
+                            (JSON..=) "PlacementConstraints" Prelude.<$> placementConstraints,
+                            (JSON..=) "ProxyConfiguration" Prelude.<$> proxyConfiguration,
+                            (JSON..=) "RequiresCompatibilities"
+                              Prelude.<$> requiresCompatibilities,
+                            (JSON..=) "RuntimePlatform" Prelude.<$> runtimePlatform,
+                            (JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "TaskRoleArn" Prelude.<$> taskRoleArn,
+                            (JSON..=) "Volumes" Prelude.<$> volumes])}
+instance JSON.ToJSON TaskDefinition where
+  toJSON TaskDefinition {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ContainerDefinitions" Prelude.<$> containerDefinitions,
+               (JSON..=) "Cpu" Prelude.<$> cpu,
+               (JSON..=) "EnableFaultInjection" Prelude.<$> enableFaultInjection,
+               (JSON..=) "EphemeralStorage" Prelude.<$> ephemeralStorage,
+               (JSON..=) "ExecutionRoleArn" Prelude.<$> executionRoleArn,
+               (JSON..=) "Family" Prelude.<$> family,
+               (JSON..=) "IpcMode" Prelude.<$> ipcMode,
+               (JSON..=) "Memory" Prelude.<$> memory,
+               (JSON..=) "NetworkMode" Prelude.<$> networkMode,
+               (JSON..=) "PidMode" Prelude.<$> pidMode,
+               (JSON..=) "PlacementConstraints" Prelude.<$> placementConstraints,
+               (JSON..=) "ProxyConfiguration" Prelude.<$> proxyConfiguration,
+               (JSON..=) "RequiresCompatibilities"
+                 Prelude.<$> requiresCompatibilities,
+               (JSON..=) "RuntimePlatform" Prelude.<$> runtimePlatform,
+               (JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "TaskRoleArn" Prelude.<$> taskRoleArn,
+               (JSON..=) "Volumes" Prelude.<$> volumes]))
+instance Property "ContainerDefinitions" TaskDefinition where
+  type PropertyType "ContainerDefinitions" TaskDefinition = [ContainerDefinitionProperty]
+  set newValue TaskDefinition {..}
+    = TaskDefinition {containerDefinitions = Prelude.pure newValue, ..}
+instance Property "Cpu" TaskDefinition where
+  type PropertyType "Cpu" TaskDefinition = Value Prelude.Text
+  set newValue TaskDefinition {..}
+    = TaskDefinition {cpu = Prelude.pure newValue, ..}
+instance Property "EnableFaultInjection" TaskDefinition where
+  type PropertyType "EnableFaultInjection" TaskDefinition = Value Prelude.Bool
+  set newValue TaskDefinition {..}
+    = TaskDefinition {enableFaultInjection = Prelude.pure newValue, ..}
+instance Property "EphemeralStorage" TaskDefinition where
+  type PropertyType "EphemeralStorage" TaskDefinition = EphemeralStorageProperty
+  set newValue TaskDefinition {..}
+    = TaskDefinition {ephemeralStorage = Prelude.pure newValue, ..}
+instance Property "ExecutionRoleArn" TaskDefinition where
+  type PropertyType "ExecutionRoleArn" TaskDefinition = Value Prelude.Text
+  set newValue TaskDefinition {..}
+    = TaskDefinition {executionRoleArn = Prelude.pure newValue, ..}
+instance Property "Family" TaskDefinition where
+  type PropertyType "Family" TaskDefinition = Value Prelude.Text
+  set newValue TaskDefinition {..}
+    = TaskDefinition {family = Prelude.pure newValue, ..}
+instance Property "IpcMode" TaskDefinition where
+  type PropertyType "IpcMode" TaskDefinition = Value Prelude.Text
+  set newValue TaskDefinition {..}
+    = TaskDefinition {ipcMode = Prelude.pure newValue, ..}
+instance Property "Memory" TaskDefinition where
+  type PropertyType "Memory" TaskDefinition = Value Prelude.Text
+  set newValue TaskDefinition {..}
+    = TaskDefinition {memory = Prelude.pure newValue, ..}
+instance Property "NetworkMode" TaskDefinition where
+  type PropertyType "NetworkMode" TaskDefinition = Value Prelude.Text
+  set newValue TaskDefinition {..}
+    = TaskDefinition {networkMode = Prelude.pure newValue, ..}
+instance Property "PidMode" TaskDefinition where
+  type PropertyType "PidMode" TaskDefinition = Value Prelude.Text
+  set newValue TaskDefinition {..}
+    = TaskDefinition {pidMode = Prelude.pure newValue, ..}
+instance Property "PlacementConstraints" TaskDefinition where
+  type PropertyType "PlacementConstraints" TaskDefinition = [TaskDefinitionPlacementConstraintProperty]
+  set newValue TaskDefinition {..}
+    = TaskDefinition {placementConstraints = Prelude.pure newValue, ..}
+instance Property "ProxyConfiguration" TaskDefinition where
+  type PropertyType "ProxyConfiguration" TaskDefinition = ProxyConfigurationProperty
+  set newValue TaskDefinition {..}
+    = TaskDefinition {proxyConfiguration = Prelude.pure newValue, ..}
+instance Property "RequiresCompatibilities" TaskDefinition where
+  type PropertyType "RequiresCompatibilities" TaskDefinition = ValueList Prelude.Text
+  set newValue TaskDefinition {..}
+    = TaskDefinition
+        {requiresCompatibilities = Prelude.pure newValue, ..}
+instance Property "RuntimePlatform" TaskDefinition where
+  type PropertyType "RuntimePlatform" TaskDefinition = RuntimePlatformProperty
+  set newValue TaskDefinition {..}
+    = TaskDefinition {runtimePlatform = Prelude.pure newValue, ..}
+instance Property "Tags" TaskDefinition where
+  type PropertyType "Tags" TaskDefinition = [Tag]
+  set newValue TaskDefinition {..}
+    = TaskDefinition {tags = Prelude.pure newValue, ..}
+instance Property "TaskRoleArn" TaskDefinition where
+  type PropertyType "TaskRoleArn" TaskDefinition = Value Prelude.Text
+  set newValue TaskDefinition {..}
+    = TaskDefinition {taskRoleArn = Prelude.pure newValue, ..}
+instance Property "Volumes" TaskDefinition where
+  type PropertyType "Volumes" TaskDefinition = [VolumeProperty]
+  set newValue TaskDefinition {..}
+    = TaskDefinition {volumes = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/AuthorizationConfigProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/AuthorizationConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/AuthorizationConfigProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.ECS.TaskDefinition.AuthorizationConfigProperty (
+        AuthorizationConfigProperty(..), mkAuthorizationConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AuthorizationConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-authorizationconfig.html>
+    AuthorizationConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-authorizationconfig.html#cfn-ecs-taskdefinition-authorizationconfig-accesspointid>
+                                 accessPointId :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-authorizationconfig.html#cfn-ecs-taskdefinition-authorizationconfig-iam>
+                                 iAM :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAuthorizationConfigProperty :: AuthorizationConfigProperty
+mkAuthorizationConfigProperty
+  = AuthorizationConfigProperty
+      {haddock_workaround_ = (), accessPointId = Prelude.Nothing,
+       iAM = Prelude.Nothing}
+instance ToResourceProperties AuthorizationConfigProperty where
+  toResourceProperties AuthorizationConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.AuthorizationConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AccessPointId" Prelude.<$> accessPointId,
+                            (JSON..=) "IAM" Prelude.<$> iAM])}
+instance JSON.ToJSON AuthorizationConfigProperty where
+  toJSON AuthorizationConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AccessPointId" Prelude.<$> accessPointId,
+               (JSON..=) "IAM" Prelude.<$> iAM]))
+instance Property "AccessPointId" AuthorizationConfigProperty where
+  type PropertyType "AccessPointId" AuthorizationConfigProperty = Value Prelude.Text
+  set newValue AuthorizationConfigProperty {..}
+    = AuthorizationConfigProperty
+        {accessPointId = Prelude.pure newValue, ..}
+instance Property "IAM" AuthorizationConfigProperty where
+  type PropertyType "IAM" AuthorizationConfigProperty = Value Prelude.Text
+  set newValue AuthorizationConfigProperty {..}
+    = AuthorizationConfigProperty {iAM = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/AuthorizationConfigProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/AuthorizationConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/AuthorizationConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.AuthorizationConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AuthorizationConfigProperty :: Prelude.Type
+instance ToResourceProperties AuthorizationConfigProperty
+instance Prelude.Eq AuthorizationConfigProperty
+instance Prelude.Show AuthorizationConfigProperty
+instance JSON.ToJSON AuthorizationConfigProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/ContainerDefinitionProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/ContainerDefinitionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/ContainerDefinitionProperty.hs
@@ -0,0 +1,450 @@
+module Stratosphere.ECS.TaskDefinition.ContainerDefinitionProperty (
+        module Exports, ContainerDefinitionProperty(..),
+        mkContainerDefinitionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.ContainerDependencyProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.EnvironmentFileProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.FirelensConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.HealthCheckProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.HostEntryProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.KeyValuePairProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.LinuxParametersProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.LogConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.MountPointProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.PortMappingProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.RepositoryCredentialsProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.ResourceRequirementProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.RestartPolicyProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.SecretProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.SystemControlProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.UlimitProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.VolumeFromProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ContainerDefinitionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html>
+    ContainerDefinitionProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-command>
+                                 command :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-cpu>
+                                 cpu :: (Prelude.Maybe (Value Prelude.Integer)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-credentialspecs>
+                                 credentialSpecs :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-dependson>
+                                 dependsOn :: (Prelude.Maybe [ContainerDependencyProperty]),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-disablenetworking>
+                                 disableNetworking :: (Prelude.Maybe (Value Prelude.Bool)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-dnssearchdomains>
+                                 dnsSearchDomains :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-dnsservers>
+                                 dnsServers :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-dockerlabels>
+                                 dockerLabels :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-dockersecurityoptions>
+                                 dockerSecurityOptions :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-entrypoint>
+                                 entryPoint :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-environment>
+                                 environment :: (Prelude.Maybe [KeyValuePairProperty]),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-environmentfiles>
+                                 environmentFiles :: (Prelude.Maybe [EnvironmentFileProperty]),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-essential>
+                                 essential :: (Prelude.Maybe (Value Prelude.Bool)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-extrahosts>
+                                 extraHosts :: (Prelude.Maybe [HostEntryProperty]),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-firelensconfiguration>
+                                 firelensConfiguration :: (Prelude.Maybe FirelensConfigurationProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-healthcheck>
+                                 healthCheck :: (Prelude.Maybe HealthCheckProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-hostname>
+                                 hostname :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-image>
+                                 image :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-interactive>
+                                 interactive :: (Prelude.Maybe (Value Prelude.Bool)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-links>
+                                 links :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-linuxparameters>
+                                 linuxParameters :: (Prelude.Maybe LinuxParametersProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-logconfiguration>
+                                 logConfiguration :: (Prelude.Maybe LogConfigurationProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-memory>
+                                 memory :: (Prelude.Maybe (Value Prelude.Integer)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-memoryreservation>
+                                 memoryReservation :: (Prelude.Maybe (Value Prelude.Integer)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-mountpoints>
+                                 mountPoints :: (Prelude.Maybe [MountPointProperty]),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-name>
+                                 name :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-portmappings>
+                                 portMappings :: (Prelude.Maybe [PortMappingProperty]),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-privileged>
+                                 privileged :: (Prelude.Maybe (Value Prelude.Bool)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-pseudoterminal>
+                                 pseudoTerminal :: (Prelude.Maybe (Value Prelude.Bool)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-readonlyrootfilesystem>
+                                 readonlyRootFilesystem :: (Prelude.Maybe (Value Prelude.Bool)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-repositorycredentials>
+                                 repositoryCredentials :: (Prelude.Maybe RepositoryCredentialsProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-resourcerequirements>
+                                 resourceRequirements :: (Prelude.Maybe [ResourceRequirementProperty]),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-restartpolicy>
+                                 restartPolicy :: (Prelude.Maybe RestartPolicyProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-secrets>
+                                 secrets :: (Prelude.Maybe [SecretProperty]),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-starttimeout>
+                                 startTimeout :: (Prelude.Maybe (Value Prelude.Integer)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-stoptimeout>
+                                 stopTimeout :: (Prelude.Maybe (Value Prelude.Integer)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-systemcontrols>
+                                 systemControls :: (Prelude.Maybe [SystemControlProperty]),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-ulimits>
+                                 ulimits :: (Prelude.Maybe [UlimitProperty]),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-user>
+                                 user :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-versionconsistency>
+                                 versionConsistency :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-volumesfrom>
+                                 volumesFrom :: (Prelude.Maybe [VolumeFromProperty]),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-workingdirectory>
+                                 workingDirectory :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkContainerDefinitionProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> ContainerDefinitionProperty
+mkContainerDefinitionProperty image name
+  = ContainerDefinitionProperty
+      {haddock_workaround_ = (), image = image, name = name,
+       command = Prelude.Nothing, cpu = Prelude.Nothing,
+       credentialSpecs = Prelude.Nothing, dependsOn = Prelude.Nothing,
+       disableNetworking = Prelude.Nothing,
+       dnsSearchDomains = Prelude.Nothing, dnsServers = Prelude.Nothing,
+       dockerLabels = Prelude.Nothing,
+       dockerSecurityOptions = Prelude.Nothing,
+       entryPoint = Prelude.Nothing, environment = Prelude.Nothing,
+       environmentFiles = Prelude.Nothing, essential = Prelude.Nothing,
+       extraHosts = Prelude.Nothing,
+       firelensConfiguration = Prelude.Nothing,
+       healthCheck = Prelude.Nothing, hostname = Prelude.Nothing,
+       interactive = Prelude.Nothing, links = Prelude.Nothing,
+       linuxParameters = Prelude.Nothing,
+       logConfiguration = Prelude.Nothing, memory = Prelude.Nothing,
+       memoryReservation = Prelude.Nothing, mountPoints = Prelude.Nothing,
+       portMappings = Prelude.Nothing, privileged = Prelude.Nothing,
+       pseudoTerminal = Prelude.Nothing,
+       readonlyRootFilesystem = Prelude.Nothing,
+       repositoryCredentials = Prelude.Nothing,
+       resourceRequirements = Prelude.Nothing,
+       restartPolicy = Prelude.Nothing, secrets = Prelude.Nothing,
+       startTimeout = Prelude.Nothing, stopTimeout = Prelude.Nothing,
+       systemControls = Prelude.Nothing, ulimits = Prelude.Nothing,
+       user = Prelude.Nothing, versionConsistency = Prelude.Nothing,
+       volumesFrom = Prelude.Nothing, workingDirectory = Prelude.Nothing}
+instance ToResourceProperties ContainerDefinitionProperty where
+  toResourceProperties ContainerDefinitionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.ContainerDefinition",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Image" JSON..= image, "Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Command" Prelude.<$> command,
+                               (JSON..=) "Cpu" Prelude.<$> cpu,
+                               (JSON..=) "CredentialSpecs" Prelude.<$> credentialSpecs,
+                               (JSON..=) "DependsOn" Prelude.<$> dependsOn,
+                               (JSON..=) "DisableNetworking" Prelude.<$> disableNetworking,
+                               (JSON..=) "DnsSearchDomains" Prelude.<$> dnsSearchDomains,
+                               (JSON..=) "DnsServers" Prelude.<$> dnsServers,
+                               (JSON..=) "DockerLabels" Prelude.<$> dockerLabels,
+                               (JSON..=) "DockerSecurityOptions"
+                                 Prelude.<$> dockerSecurityOptions,
+                               (JSON..=) "EntryPoint" Prelude.<$> entryPoint,
+                               (JSON..=) "Environment" Prelude.<$> environment,
+                               (JSON..=) "EnvironmentFiles" Prelude.<$> environmentFiles,
+                               (JSON..=) "Essential" Prelude.<$> essential,
+                               (JSON..=) "ExtraHosts" Prelude.<$> extraHosts,
+                               (JSON..=) "FirelensConfiguration"
+                                 Prelude.<$> firelensConfiguration,
+                               (JSON..=) "HealthCheck" Prelude.<$> healthCheck,
+                               (JSON..=) "Hostname" Prelude.<$> hostname,
+                               (JSON..=) "Interactive" Prelude.<$> interactive,
+                               (JSON..=) "Links" Prelude.<$> links,
+                               (JSON..=) "LinuxParameters" Prelude.<$> linuxParameters,
+                               (JSON..=) "LogConfiguration" Prelude.<$> logConfiguration,
+                               (JSON..=) "Memory" Prelude.<$> memory,
+                               (JSON..=) "MemoryReservation" Prelude.<$> memoryReservation,
+                               (JSON..=) "MountPoints" Prelude.<$> mountPoints,
+                               (JSON..=) "PortMappings" Prelude.<$> portMappings,
+                               (JSON..=) "Privileged" Prelude.<$> privileged,
+                               (JSON..=) "PseudoTerminal" Prelude.<$> pseudoTerminal,
+                               (JSON..=) "ReadonlyRootFilesystem"
+                                 Prelude.<$> readonlyRootFilesystem,
+                               (JSON..=) "RepositoryCredentials"
+                                 Prelude.<$> repositoryCredentials,
+                               (JSON..=) "ResourceRequirements" Prelude.<$> resourceRequirements,
+                               (JSON..=) "RestartPolicy" Prelude.<$> restartPolicy,
+                               (JSON..=) "Secrets" Prelude.<$> secrets,
+                               (JSON..=) "StartTimeout" Prelude.<$> startTimeout,
+                               (JSON..=) "StopTimeout" Prelude.<$> stopTimeout,
+                               (JSON..=) "SystemControls" Prelude.<$> systemControls,
+                               (JSON..=) "Ulimits" Prelude.<$> ulimits,
+                               (JSON..=) "User" Prelude.<$> user,
+                               (JSON..=) "VersionConsistency" Prelude.<$> versionConsistency,
+                               (JSON..=) "VolumesFrom" Prelude.<$> volumesFrom,
+                               (JSON..=) "WorkingDirectory" Prelude.<$> workingDirectory]))}
+instance JSON.ToJSON ContainerDefinitionProperty where
+  toJSON ContainerDefinitionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Image" JSON..= image, "Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "Command" Prelude.<$> command,
+                  (JSON..=) "Cpu" Prelude.<$> cpu,
+                  (JSON..=) "CredentialSpecs" Prelude.<$> credentialSpecs,
+                  (JSON..=) "DependsOn" Prelude.<$> dependsOn,
+                  (JSON..=) "DisableNetworking" Prelude.<$> disableNetworking,
+                  (JSON..=) "DnsSearchDomains" Prelude.<$> dnsSearchDomains,
+                  (JSON..=) "DnsServers" Prelude.<$> dnsServers,
+                  (JSON..=) "DockerLabels" Prelude.<$> dockerLabels,
+                  (JSON..=) "DockerSecurityOptions"
+                    Prelude.<$> dockerSecurityOptions,
+                  (JSON..=) "EntryPoint" Prelude.<$> entryPoint,
+                  (JSON..=) "Environment" Prelude.<$> environment,
+                  (JSON..=) "EnvironmentFiles" Prelude.<$> environmentFiles,
+                  (JSON..=) "Essential" Prelude.<$> essential,
+                  (JSON..=) "ExtraHosts" Prelude.<$> extraHosts,
+                  (JSON..=) "FirelensConfiguration"
+                    Prelude.<$> firelensConfiguration,
+                  (JSON..=) "HealthCheck" Prelude.<$> healthCheck,
+                  (JSON..=) "Hostname" Prelude.<$> hostname,
+                  (JSON..=) "Interactive" Prelude.<$> interactive,
+                  (JSON..=) "Links" Prelude.<$> links,
+                  (JSON..=) "LinuxParameters" Prelude.<$> linuxParameters,
+                  (JSON..=) "LogConfiguration" Prelude.<$> logConfiguration,
+                  (JSON..=) "Memory" Prelude.<$> memory,
+                  (JSON..=) "MemoryReservation" Prelude.<$> memoryReservation,
+                  (JSON..=) "MountPoints" Prelude.<$> mountPoints,
+                  (JSON..=) "PortMappings" Prelude.<$> portMappings,
+                  (JSON..=) "Privileged" Prelude.<$> privileged,
+                  (JSON..=) "PseudoTerminal" Prelude.<$> pseudoTerminal,
+                  (JSON..=) "ReadonlyRootFilesystem"
+                    Prelude.<$> readonlyRootFilesystem,
+                  (JSON..=) "RepositoryCredentials"
+                    Prelude.<$> repositoryCredentials,
+                  (JSON..=) "ResourceRequirements" Prelude.<$> resourceRequirements,
+                  (JSON..=) "RestartPolicy" Prelude.<$> restartPolicy,
+                  (JSON..=) "Secrets" Prelude.<$> secrets,
+                  (JSON..=) "StartTimeout" Prelude.<$> startTimeout,
+                  (JSON..=) "StopTimeout" Prelude.<$> stopTimeout,
+                  (JSON..=) "SystemControls" Prelude.<$> systemControls,
+                  (JSON..=) "Ulimits" Prelude.<$> ulimits,
+                  (JSON..=) "User" Prelude.<$> user,
+                  (JSON..=) "VersionConsistency" Prelude.<$> versionConsistency,
+                  (JSON..=) "VolumesFrom" Prelude.<$> volumesFrom,
+                  (JSON..=) "WorkingDirectory" Prelude.<$> workingDirectory])))
+instance Property "Command" ContainerDefinitionProperty where
+  type PropertyType "Command" ContainerDefinitionProperty = ValueList Prelude.Text
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty {command = Prelude.pure newValue, ..}
+instance Property "Cpu" ContainerDefinitionProperty where
+  type PropertyType "Cpu" ContainerDefinitionProperty = Value Prelude.Integer
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty {cpu = Prelude.pure newValue, ..}
+instance Property "CredentialSpecs" ContainerDefinitionProperty where
+  type PropertyType "CredentialSpecs" ContainerDefinitionProperty = ValueList Prelude.Text
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {credentialSpecs = Prelude.pure newValue, ..}
+instance Property "DependsOn" ContainerDefinitionProperty where
+  type PropertyType "DependsOn" ContainerDefinitionProperty = [ContainerDependencyProperty]
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {dependsOn = Prelude.pure newValue, ..}
+instance Property "DisableNetworking" ContainerDefinitionProperty where
+  type PropertyType "DisableNetworking" ContainerDefinitionProperty = Value Prelude.Bool
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {disableNetworking = Prelude.pure newValue, ..}
+instance Property "DnsSearchDomains" ContainerDefinitionProperty where
+  type PropertyType "DnsSearchDomains" ContainerDefinitionProperty = ValueList Prelude.Text
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {dnsSearchDomains = Prelude.pure newValue, ..}
+instance Property "DnsServers" ContainerDefinitionProperty where
+  type PropertyType "DnsServers" ContainerDefinitionProperty = ValueList Prelude.Text
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {dnsServers = Prelude.pure newValue, ..}
+instance Property "DockerLabels" ContainerDefinitionProperty where
+  type PropertyType "DockerLabels" ContainerDefinitionProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {dockerLabels = Prelude.pure newValue, ..}
+instance Property "DockerSecurityOptions" ContainerDefinitionProperty where
+  type PropertyType "DockerSecurityOptions" ContainerDefinitionProperty = ValueList Prelude.Text
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {dockerSecurityOptions = Prelude.pure newValue, ..}
+instance Property "EntryPoint" ContainerDefinitionProperty where
+  type PropertyType "EntryPoint" ContainerDefinitionProperty = ValueList Prelude.Text
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {entryPoint = Prelude.pure newValue, ..}
+instance Property "Environment" ContainerDefinitionProperty where
+  type PropertyType "Environment" ContainerDefinitionProperty = [KeyValuePairProperty]
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {environment = Prelude.pure newValue, ..}
+instance Property "EnvironmentFiles" ContainerDefinitionProperty where
+  type PropertyType "EnvironmentFiles" ContainerDefinitionProperty = [EnvironmentFileProperty]
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {environmentFiles = Prelude.pure newValue, ..}
+instance Property "Essential" ContainerDefinitionProperty where
+  type PropertyType "Essential" ContainerDefinitionProperty = Value Prelude.Bool
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {essential = Prelude.pure newValue, ..}
+instance Property "ExtraHosts" ContainerDefinitionProperty where
+  type PropertyType "ExtraHosts" ContainerDefinitionProperty = [HostEntryProperty]
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {extraHosts = Prelude.pure newValue, ..}
+instance Property "FirelensConfiguration" ContainerDefinitionProperty where
+  type PropertyType "FirelensConfiguration" ContainerDefinitionProperty = FirelensConfigurationProperty
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {firelensConfiguration = Prelude.pure newValue, ..}
+instance Property "HealthCheck" ContainerDefinitionProperty where
+  type PropertyType "HealthCheck" ContainerDefinitionProperty = HealthCheckProperty
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {healthCheck = Prelude.pure newValue, ..}
+instance Property "Hostname" ContainerDefinitionProperty where
+  type PropertyType "Hostname" ContainerDefinitionProperty = Value Prelude.Text
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {hostname = Prelude.pure newValue, ..}
+instance Property "Image" ContainerDefinitionProperty where
+  type PropertyType "Image" ContainerDefinitionProperty = Value Prelude.Text
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty {image = newValue, ..}
+instance Property "Interactive" ContainerDefinitionProperty where
+  type PropertyType "Interactive" ContainerDefinitionProperty = Value Prelude.Bool
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {interactive = Prelude.pure newValue, ..}
+instance Property "Links" ContainerDefinitionProperty where
+  type PropertyType "Links" ContainerDefinitionProperty = ValueList Prelude.Text
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty {links = Prelude.pure newValue, ..}
+instance Property "LinuxParameters" ContainerDefinitionProperty where
+  type PropertyType "LinuxParameters" ContainerDefinitionProperty = LinuxParametersProperty
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {linuxParameters = Prelude.pure newValue, ..}
+instance Property "LogConfiguration" ContainerDefinitionProperty where
+  type PropertyType "LogConfiguration" ContainerDefinitionProperty = LogConfigurationProperty
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {logConfiguration = Prelude.pure newValue, ..}
+instance Property "Memory" ContainerDefinitionProperty where
+  type PropertyType "Memory" ContainerDefinitionProperty = Value Prelude.Integer
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty {memory = Prelude.pure newValue, ..}
+instance Property "MemoryReservation" ContainerDefinitionProperty where
+  type PropertyType "MemoryReservation" ContainerDefinitionProperty = Value Prelude.Integer
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {memoryReservation = Prelude.pure newValue, ..}
+instance Property "MountPoints" ContainerDefinitionProperty where
+  type PropertyType "MountPoints" ContainerDefinitionProperty = [MountPointProperty]
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {mountPoints = Prelude.pure newValue, ..}
+instance Property "Name" ContainerDefinitionProperty where
+  type PropertyType "Name" ContainerDefinitionProperty = Value Prelude.Text
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty {name = newValue, ..}
+instance Property "PortMappings" ContainerDefinitionProperty where
+  type PropertyType "PortMappings" ContainerDefinitionProperty = [PortMappingProperty]
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {portMappings = Prelude.pure newValue, ..}
+instance Property "Privileged" ContainerDefinitionProperty where
+  type PropertyType "Privileged" ContainerDefinitionProperty = Value Prelude.Bool
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {privileged = Prelude.pure newValue, ..}
+instance Property "PseudoTerminal" ContainerDefinitionProperty where
+  type PropertyType "PseudoTerminal" ContainerDefinitionProperty = Value Prelude.Bool
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {pseudoTerminal = Prelude.pure newValue, ..}
+instance Property "ReadonlyRootFilesystem" ContainerDefinitionProperty where
+  type PropertyType "ReadonlyRootFilesystem" ContainerDefinitionProperty = Value Prelude.Bool
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {readonlyRootFilesystem = Prelude.pure newValue, ..}
+instance Property "RepositoryCredentials" ContainerDefinitionProperty where
+  type PropertyType "RepositoryCredentials" ContainerDefinitionProperty = RepositoryCredentialsProperty
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {repositoryCredentials = Prelude.pure newValue, ..}
+instance Property "ResourceRequirements" ContainerDefinitionProperty where
+  type PropertyType "ResourceRequirements" ContainerDefinitionProperty = [ResourceRequirementProperty]
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {resourceRequirements = Prelude.pure newValue, ..}
+instance Property "RestartPolicy" ContainerDefinitionProperty where
+  type PropertyType "RestartPolicy" ContainerDefinitionProperty = RestartPolicyProperty
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {restartPolicy = Prelude.pure newValue, ..}
+instance Property "Secrets" ContainerDefinitionProperty where
+  type PropertyType "Secrets" ContainerDefinitionProperty = [SecretProperty]
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty {secrets = Prelude.pure newValue, ..}
+instance Property "StartTimeout" ContainerDefinitionProperty where
+  type PropertyType "StartTimeout" ContainerDefinitionProperty = Value Prelude.Integer
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {startTimeout = Prelude.pure newValue, ..}
+instance Property "StopTimeout" ContainerDefinitionProperty where
+  type PropertyType "StopTimeout" ContainerDefinitionProperty = Value Prelude.Integer
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {stopTimeout = Prelude.pure newValue, ..}
+instance Property "SystemControls" ContainerDefinitionProperty where
+  type PropertyType "SystemControls" ContainerDefinitionProperty = [SystemControlProperty]
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {systemControls = Prelude.pure newValue, ..}
+instance Property "Ulimits" ContainerDefinitionProperty where
+  type PropertyType "Ulimits" ContainerDefinitionProperty = [UlimitProperty]
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty {ulimits = Prelude.pure newValue, ..}
+instance Property "User" ContainerDefinitionProperty where
+  type PropertyType "User" ContainerDefinitionProperty = Value Prelude.Text
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty {user = Prelude.pure newValue, ..}
+instance Property "VersionConsistency" ContainerDefinitionProperty where
+  type PropertyType "VersionConsistency" ContainerDefinitionProperty = Value Prelude.Text
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {versionConsistency = Prelude.pure newValue, ..}
+instance Property "VolumesFrom" ContainerDefinitionProperty where
+  type PropertyType "VolumesFrom" ContainerDefinitionProperty = [VolumeFromProperty]
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {volumesFrom = Prelude.pure newValue, ..}
+instance Property "WorkingDirectory" ContainerDefinitionProperty where
+  type PropertyType "WorkingDirectory" ContainerDefinitionProperty = Value Prelude.Text
+  set newValue ContainerDefinitionProperty {..}
+    = ContainerDefinitionProperty
+        {workingDirectory = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/ContainerDefinitionProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/ContainerDefinitionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/ContainerDefinitionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.ContainerDefinitionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ContainerDefinitionProperty :: Prelude.Type
+instance ToResourceProperties ContainerDefinitionProperty
+instance Prelude.Eq ContainerDefinitionProperty
+instance Prelude.Show ContainerDefinitionProperty
+instance JSON.ToJSON ContainerDefinitionProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/ContainerDependencyProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/ContainerDependencyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/ContainerDependencyProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.ECS.TaskDefinition.ContainerDependencyProperty (
+        ContainerDependencyProperty(..), mkContainerDependencyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ContainerDependencyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdependency.html>
+    ContainerDependencyProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdependency.html#cfn-ecs-taskdefinition-containerdependency-condition>
+                                 condition :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdependency.html#cfn-ecs-taskdefinition-containerdependency-containername>
+                                 containerName :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkContainerDependencyProperty :: ContainerDependencyProperty
+mkContainerDependencyProperty
+  = ContainerDependencyProperty
+      {haddock_workaround_ = (), condition = Prelude.Nothing,
+       containerName = Prelude.Nothing}
+instance ToResourceProperties ContainerDependencyProperty where
+  toResourceProperties ContainerDependencyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.ContainerDependency",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Condition" Prelude.<$> condition,
+                            (JSON..=) "ContainerName" Prelude.<$> containerName])}
+instance JSON.ToJSON ContainerDependencyProperty where
+  toJSON ContainerDependencyProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Condition" Prelude.<$> condition,
+               (JSON..=) "ContainerName" Prelude.<$> containerName]))
+instance Property "Condition" ContainerDependencyProperty where
+  type PropertyType "Condition" ContainerDependencyProperty = Value Prelude.Text
+  set newValue ContainerDependencyProperty {..}
+    = ContainerDependencyProperty
+        {condition = Prelude.pure newValue, ..}
+instance Property "ContainerName" ContainerDependencyProperty where
+  type PropertyType "ContainerName" ContainerDependencyProperty = Value Prelude.Text
+  set newValue ContainerDependencyProperty {..}
+    = ContainerDependencyProperty
+        {containerName = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/ContainerDependencyProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/ContainerDependencyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/ContainerDependencyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.ContainerDependencyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ContainerDependencyProperty :: Prelude.Type
+instance ToResourceProperties ContainerDependencyProperty
+instance Prelude.Eq ContainerDependencyProperty
+instance Prelude.Show ContainerDependencyProperty
+instance JSON.ToJSON ContainerDependencyProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/DeviceProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/DeviceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/DeviceProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.ECS.TaskDefinition.DeviceProperty (
+        DeviceProperty(..), mkDeviceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DeviceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-device.html>
+    DeviceProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-device.html#cfn-ecs-taskdefinition-device-containerpath>
+                    containerPath :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-device.html#cfn-ecs-taskdefinition-device-hostpath>
+                    hostPath :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-device.html#cfn-ecs-taskdefinition-device-permissions>
+                    permissions :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDeviceProperty :: DeviceProperty
+mkDeviceProperty
+  = DeviceProperty
+      {haddock_workaround_ = (), containerPath = Prelude.Nothing,
+       hostPath = Prelude.Nothing, permissions = Prelude.Nothing}
+instance ToResourceProperties DeviceProperty where
+  toResourceProperties DeviceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.Device",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ContainerPath" Prelude.<$> containerPath,
+                            (JSON..=) "HostPath" Prelude.<$> hostPath,
+                            (JSON..=) "Permissions" Prelude.<$> permissions])}
+instance JSON.ToJSON DeviceProperty where
+  toJSON DeviceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ContainerPath" Prelude.<$> containerPath,
+               (JSON..=) "HostPath" Prelude.<$> hostPath,
+               (JSON..=) "Permissions" Prelude.<$> permissions]))
+instance Property "ContainerPath" DeviceProperty where
+  type PropertyType "ContainerPath" DeviceProperty = Value Prelude.Text
+  set newValue DeviceProperty {..}
+    = DeviceProperty {containerPath = Prelude.pure newValue, ..}
+instance Property "HostPath" DeviceProperty where
+  type PropertyType "HostPath" DeviceProperty = Value Prelude.Text
+  set newValue DeviceProperty {..}
+    = DeviceProperty {hostPath = Prelude.pure newValue, ..}
+instance Property "Permissions" DeviceProperty where
+  type PropertyType "Permissions" DeviceProperty = ValueList Prelude.Text
+  set newValue DeviceProperty {..}
+    = DeviceProperty {permissions = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/DeviceProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/DeviceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/DeviceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.DeviceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DeviceProperty :: Prelude.Type
+instance ToResourceProperties DeviceProperty
+instance Prelude.Eq DeviceProperty
+instance Prelude.Show DeviceProperty
+instance JSON.ToJSON DeviceProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/DockerVolumeConfigurationProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/DockerVolumeConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/DockerVolumeConfigurationProperty.hs
@@ -0,0 +1,77 @@
+module Stratosphere.ECS.TaskDefinition.DockerVolumeConfigurationProperty (
+        DockerVolumeConfigurationProperty(..),
+        mkDockerVolumeConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DockerVolumeConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-dockervolumeconfiguration.html>
+    DockerVolumeConfigurationProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-dockervolumeconfiguration.html#cfn-ecs-taskdefinition-dockervolumeconfiguration-autoprovision>
+                                       autoprovision :: (Prelude.Maybe (Value Prelude.Bool)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-dockervolumeconfiguration.html#cfn-ecs-taskdefinition-dockervolumeconfiguration-driver>
+                                       driver :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-dockervolumeconfiguration.html#cfn-ecs-taskdefinition-dockervolumeconfiguration-driveropts>
+                                       driverOpts :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-dockervolumeconfiguration.html#cfn-ecs-taskdefinition-dockervolumeconfiguration-labels>
+                                       labels :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-dockervolumeconfiguration.html#cfn-ecs-taskdefinition-dockervolumeconfiguration-scope>
+                                       scope :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDockerVolumeConfigurationProperty ::
+  DockerVolumeConfigurationProperty
+mkDockerVolumeConfigurationProperty
+  = DockerVolumeConfigurationProperty
+      {haddock_workaround_ = (), autoprovision = Prelude.Nothing,
+       driver = Prelude.Nothing, driverOpts = Prelude.Nothing,
+       labels = Prelude.Nothing, scope = Prelude.Nothing}
+instance ToResourceProperties DockerVolumeConfigurationProperty where
+  toResourceProperties DockerVolumeConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.DockerVolumeConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Autoprovision" Prelude.<$> autoprovision,
+                            (JSON..=) "Driver" Prelude.<$> driver,
+                            (JSON..=) "DriverOpts" Prelude.<$> driverOpts,
+                            (JSON..=) "Labels" Prelude.<$> labels,
+                            (JSON..=) "Scope" Prelude.<$> scope])}
+instance JSON.ToJSON DockerVolumeConfigurationProperty where
+  toJSON DockerVolumeConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Autoprovision" Prelude.<$> autoprovision,
+               (JSON..=) "Driver" Prelude.<$> driver,
+               (JSON..=) "DriverOpts" Prelude.<$> driverOpts,
+               (JSON..=) "Labels" Prelude.<$> labels,
+               (JSON..=) "Scope" Prelude.<$> scope]))
+instance Property "Autoprovision" DockerVolumeConfigurationProperty where
+  type PropertyType "Autoprovision" DockerVolumeConfigurationProperty = Value Prelude.Bool
+  set newValue DockerVolumeConfigurationProperty {..}
+    = DockerVolumeConfigurationProperty
+        {autoprovision = Prelude.pure newValue, ..}
+instance Property "Driver" DockerVolumeConfigurationProperty where
+  type PropertyType "Driver" DockerVolumeConfigurationProperty = Value Prelude.Text
+  set newValue DockerVolumeConfigurationProperty {..}
+    = DockerVolumeConfigurationProperty
+        {driver = Prelude.pure newValue, ..}
+instance Property "DriverOpts" DockerVolumeConfigurationProperty where
+  type PropertyType "DriverOpts" DockerVolumeConfigurationProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue DockerVolumeConfigurationProperty {..}
+    = DockerVolumeConfigurationProperty
+        {driverOpts = Prelude.pure newValue, ..}
+instance Property "Labels" DockerVolumeConfigurationProperty where
+  type PropertyType "Labels" DockerVolumeConfigurationProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue DockerVolumeConfigurationProperty {..}
+    = DockerVolumeConfigurationProperty
+        {labels = Prelude.pure newValue, ..}
+instance Property "Scope" DockerVolumeConfigurationProperty where
+  type PropertyType "Scope" DockerVolumeConfigurationProperty = Value Prelude.Text
+  set newValue DockerVolumeConfigurationProperty {..}
+    = DockerVolumeConfigurationProperty
+        {scope = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/DockerVolumeConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/DockerVolumeConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/DockerVolumeConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.DockerVolumeConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DockerVolumeConfigurationProperty :: Prelude.Type
+instance ToResourceProperties DockerVolumeConfigurationProperty
+instance Prelude.Eq DockerVolumeConfigurationProperty
+instance Prelude.Show DockerVolumeConfigurationProperty
+instance JSON.ToJSON DockerVolumeConfigurationProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/EFSVolumeConfigurationProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/EFSVolumeConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/EFSVolumeConfigurationProperty.hs
@@ -0,0 +1,83 @@
+module Stratosphere.ECS.TaskDefinition.EFSVolumeConfigurationProperty (
+        module Exports, EFSVolumeConfigurationProperty(..),
+        mkEFSVolumeConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.AuthorizationConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EFSVolumeConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-efsvolumeconfiguration.html>
+    EFSVolumeConfigurationProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-efsvolumeconfiguration.html#cfn-ecs-taskdefinition-efsvolumeconfiguration-authorizationconfig>
+                                    authorizationConfig :: (Prelude.Maybe AuthorizationConfigProperty),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-efsvolumeconfiguration.html#cfn-ecs-taskdefinition-efsvolumeconfiguration-filesystemid>
+                                    filesystemId :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-efsvolumeconfiguration.html#cfn-ecs-taskdefinition-efsvolumeconfiguration-rootdirectory>
+                                    rootDirectory :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-efsvolumeconfiguration.html#cfn-ecs-taskdefinition-efsvolumeconfiguration-transitencryption>
+                                    transitEncryption :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-efsvolumeconfiguration.html#cfn-ecs-taskdefinition-efsvolumeconfiguration-transitencryptionport>
+                                    transitEncryptionPort :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEFSVolumeConfigurationProperty ::
+  Value Prelude.Text -> EFSVolumeConfigurationProperty
+mkEFSVolumeConfigurationProperty filesystemId
+  = EFSVolumeConfigurationProperty
+      {haddock_workaround_ = (), filesystemId = filesystemId,
+       authorizationConfig = Prelude.Nothing,
+       rootDirectory = Prelude.Nothing,
+       transitEncryption = Prelude.Nothing,
+       transitEncryptionPort = Prelude.Nothing}
+instance ToResourceProperties EFSVolumeConfigurationProperty where
+  toResourceProperties EFSVolumeConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.EFSVolumeConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["FilesystemId" JSON..= filesystemId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AuthorizationConfig" Prelude.<$> authorizationConfig,
+                               (JSON..=) "RootDirectory" Prelude.<$> rootDirectory,
+                               (JSON..=) "TransitEncryption" Prelude.<$> transitEncryption,
+                               (JSON..=) "TransitEncryptionPort"
+                                 Prelude.<$> transitEncryptionPort]))}
+instance JSON.ToJSON EFSVolumeConfigurationProperty where
+  toJSON EFSVolumeConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["FilesystemId" JSON..= filesystemId]
+              (Prelude.catMaybes
+                 [(JSON..=) "AuthorizationConfig" Prelude.<$> authorizationConfig,
+                  (JSON..=) "RootDirectory" Prelude.<$> rootDirectory,
+                  (JSON..=) "TransitEncryption" Prelude.<$> transitEncryption,
+                  (JSON..=) "TransitEncryptionPort"
+                    Prelude.<$> transitEncryptionPort])))
+instance Property "AuthorizationConfig" EFSVolumeConfigurationProperty where
+  type PropertyType "AuthorizationConfig" EFSVolumeConfigurationProperty = AuthorizationConfigProperty
+  set newValue EFSVolumeConfigurationProperty {..}
+    = EFSVolumeConfigurationProperty
+        {authorizationConfig = Prelude.pure newValue, ..}
+instance Property "FilesystemId" EFSVolumeConfigurationProperty where
+  type PropertyType "FilesystemId" EFSVolumeConfigurationProperty = Value Prelude.Text
+  set newValue EFSVolumeConfigurationProperty {..}
+    = EFSVolumeConfigurationProperty {filesystemId = newValue, ..}
+instance Property "RootDirectory" EFSVolumeConfigurationProperty where
+  type PropertyType "RootDirectory" EFSVolumeConfigurationProperty = Value Prelude.Text
+  set newValue EFSVolumeConfigurationProperty {..}
+    = EFSVolumeConfigurationProperty
+        {rootDirectory = Prelude.pure newValue, ..}
+instance Property "TransitEncryption" EFSVolumeConfigurationProperty where
+  type PropertyType "TransitEncryption" EFSVolumeConfigurationProperty = Value Prelude.Text
+  set newValue EFSVolumeConfigurationProperty {..}
+    = EFSVolumeConfigurationProperty
+        {transitEncryption = Prelude.pure newValue, ..}
+instance Property "TransitEncryptionPort" EFSVolumeConfigurationProperty where
+  type PropertyType "TransitEncryptionPort" EFSVolumeConfigurationProperty = Value Prelude.Integer
+  set newValue EFSVolumeConfigurationProperty {..}
+    = EFSVolumeConfigurationProperty
+        {transitEncryptionPort = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/EFSVolumeConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/EFSVolumeConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/EFSVolumeConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.EFSVolumeConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EFSVolumeConfigurationProperty :: Prelude.Type
+instance ToResourceProperties EFSVolumeConfigurationProperty
+instance Prelude.Eq EFSVolumeConfigurationProperty
+instance Prelude.Show EFSVolumeConfigurationProperty
+instance JSON.ToJSON EFSVolumeConfigurationProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/EnvironmentFileProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/EnvironmentFileProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/EnvironmentFileProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ECS.TaskDefinition.EnvironmentFileProperty (
+        EnvironmentFileProperty(..), mkEnvironmentFileProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EnvironmentFileProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-environmentfile.html>
+    EnvironmentFileProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-environmentfile.html#cfn-ecs-taskdefinition-environmentfile-type>
+                             type' :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-environmentfile.html#cfn-ecs-taskdefinition-environmentfile-value>
+                             value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEnvironmentFileProperty :: EnvironmentFileProperty
+mkEnvironmentFileProperty
+  = EnvironmentFileProperty
+      {haddock_workaround_ = (), type' = Prelude.Nothing,
+       value = Prelude.Nothing}
+instance ToResourceProperties EnvironmentFileProperty where
+  toResourceProperties EnvironmentFileProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.EnvironmentFile",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Type" Prelude.<$> type',
+                            (JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON EnvironmentFileProperty where
+  toJSON EnvironmentFileProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Type" Prelude.<$> type',
+               (JSON..=) "Value" Prelude.<$> value]))
+instance Property "Type" EnvironmentFileProperty where
+  type PropertyType "Type" EnvironmentFileProperty = Value Prelude.Text
+  set newValue EnvironmentFileProperty {..}
+    = EnvironmentFileProperty {type' = Prelude.pure newValue, ..}
+instance Property "Value" EnvironmentFileProperty where
+  type PropertyType "Value" EnvironmentFileProperty = Value Prelude.Text
+  set newValue EnvironmentFileProperty {..}
+    = EnvironmentFileProperty {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/EnvironmentFileProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/EnvironmentFileProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/EnvironmentFileProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.EnvironmentFileProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EnvironmentFileProperty :: Prelude.Type
+instance ToResourceProperties EnvironmentFileProperty
+instance Prelude.Eq EnvironmentFileProperty
+instance Prelude.Show EnvironmentFileProperty
+instance JSON.ToJSON EnvironmentFileProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/EphemeralStorageProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/EphemeralStorageProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/EphemeralStorageProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.ECS.TaskDefinition.EphemeralStorageProperty (
+        EphemeralStorageProperty(..), mkEphemeralStorageProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EphemeralStorageProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-ephemeralstorage.html>
+    EphemeralStorageProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-ephemeralstorage.html#cfn-ecs-taskdefinition-ephemeralstorage-sizeingib>
+                              sizeInGiB :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEphemeralStorageProperty :: EphemeralStorageProperty
+mkEphemeralStorageProperty
+  = EphemeralStorageProperty
+      {haddock_workaround_ = (), sizeInGiB = Prelude.Nothing}
+instance ToResourceProperties EphemeralStorageProperty where
+  toResourceProperties EphemeralStorageProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.EphemeralStorage",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "SizeInGiB" Prelude.<$> sizeInGiB])}
+instance JSON.ToJSON EphemeralStorageProperty where
+  toJSON EphemeralStorageProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "SizeInGiB" Prelude.<$> sizeInGiB]))
+instance Property "SizeInGiB" EphemeralStorageProperty where
+  type PropertyType "SizeInGiB" EphemeralStorageProperty = Value Prelude.Integer
+  set newValue EphemeralStorageProperty {..}
+    = EphemeralStorageProperty {sizeInGiB = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/EphemeralStorageProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/EphemeralStorageProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/EphemeralStorageProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.EphemeralStorageProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EphemeralStorageProperty :: Prelude.Type
+instance ToResourceProperties EphemeralStorageProperty
+instance Prelude.Eq EphemeralStorageProperty
+instance Prelude.Show EphemeralStorageProperty
+instance JSON.ToJSON EphemeralStorageProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/FSxAuthorizationConfigProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/FSxAuthorizationConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/FSxAuthorizationConfigProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ECS.TaskDefinition.FSxAuthorizationConfigProperty (
+        FSxAuthorizationConfigProperty(..),
+        mkFSxAuthorizationConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FSxAuthorizationConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-fsxauthorizationconfig.html>
+    FSxAuthorizationConfigProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-fsxauthorizationconfig.html#cfn-ecs-taskdefinition-fsxauthorizationconfig-credentialsparameter>
+                                    credentialsParameter :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-fsxauthorizationconfig.html#cfn-ecs-taskdefinition-fsxauthorizationconfig-domain>
+                                    domain :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFSxAuthorizationConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> FSxAuthorizationConfigProperty
+mkFSxAuthorizationConfigProperty credentialsParameter domain
+  = FSxAuthorizationConfigProperty
+      {haddock_workaround_ = (),
+       credentialsParameter = credentialsParameter, domain = domain}
+instance ToResourceProperties FSxAuthorizationConfigProperty where
+  toResourceProperties FSxAuthorizationConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.FSxAuthorizationConfig",
+         supportsTags = Prelude.False,
+         properties = ["CredentialsParameter" JSON..= credentialsParameter,
+                       "Domain" JSON..= domain]}
+instance JSON.ToJSON FSxAuthorizationConfigProperty where
+  toJSON FSxAuthorizationConfigProperty {..}
+    = JSON.object
+        ["CredentialsParameter" JSON..= credentialsParameter,
+         "Domain" JSON..= domain]
+instance Property "CredentialsParameter" FSxAuthorizationConfigProperty where
+  type PropertyType "CredentialsParameter" FSxAuthorizationConfigProperty = Value Prelude.Text
+  set newValue FSxAuthorizationConfigProperty {..}
+    = FSxAuthorizationConfigProperty
+        {credentialsParameter = newValue, ..}
+instance Property "Domain" FSxAuthorizationConfigProperty where
+  type PropertyType "Domain" FSxAuthorizationConfigProperty = Value Prelude.Text
+  set newValue FSxAuthorizationConfigProperty {..}
+    = FSxAuthorizationConfigProperty {domain = newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/FSxAuthorizationConfigProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/FSxAuthorizationConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/FSxAuthorizationConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.FSxAuthorizationConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FSxAuthorizationConfigProperty :: Prelude.Type
+instance ToResourceProperties FSxAuthorizationConfigProperty
+instance Prelude.Eq FSxAuthorizationConfigProperty
+instance Prelude.Show FSxAuthorizationConfigProperty
+instance JSON.ToJSON FSxAuthorizationConfigProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/FSxWindowsFileServerVolumeConfigurationProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/FSxWindowsFileServerVolumeConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/FSxWindowsFileServerVolumeConfigurationProperty.hs
@@ -0,0 +1,70 @@
+module Stratosphere.ECS.TaskDefinition.FSxWindowsFileServerVolumeConfigurationProperty (
+        module Exports,
+        FSxWindowsFileServerVolumeConfigurationProperty(..),
+        mkFSxWindowsFileServerVolumeConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.FSxAuthorizationConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FSxWindowsFileServerVolumeConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-fsxwindowsfileservervolumeconfiguration.html>
+    FSxWindowsFileServerVolumeConfigurationProperty {haddock_workaround_ :: (),
+                                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-fsxwindowsfileservervolumeconfiguration.html#cfn-ecs-taskdefinition-fsxwindowsfileservervolumeconfiguration-authorizationconfig>
+                                                     authorizationConfig :: (Prelude.Maybe FSxAuthorizationConfigProperty),
+                                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-fsxwindowsfileservervolumeconfiguration.html#cfn-ecs-taskdefinition-fsxwindowsfileservervolumeconfiguration-filesystemid>
+                                                     fileSystemId :: (Value Prelude.Text),
+                                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-fsxwindowsfileservervolumeconfiguration.html#cfn-ecs-taskdefinition-fsxwindowsfileservervolumeconfiguration-rootdirectory>
+                                                     rootDirectory :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFSxWindowsFileServerVolumeConfigurationProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> FSxWindowsFileServerVolumeConfigurationProperty
+mkFSxWindowsFileServerVolumeConfigurationProperty
+  fileSystemId
+  rootDirectory
+  = FSxWindowsFileServerVolumeConfigurationProperty
+      {haddock_workaround_ = (), fileSystemId = fileSystemId,
+       rootDirectory = rootDirectory,
+       authorizationConfig = Prelude.Nothing}
+instance ToResourceProperties FSxWindowsFileServerVolumeConfigurationProperty where
+  toResourceProperties
+    FSxWindowsFileServerVolumeConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.FSxWindowsFileServerVolumeConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["FileSystemId" JSON..= fileSystemId,
+                            "RootDirectory" JSON..= rootDirectory]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AuthorizationConfig"
+                                 Prelude.<$> authorizationConfig]))}
+instance JSON.ToJSON FSxWindowsFileServerVolumeConfigurationProperty where
+  toJSON FSxWindowsFileServerVolumeConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["FileSystemId" JSON..= fileSystemId,
+               "RootDirectory" JSON..= rootDirectory]
+              (Prelude.catMaybes
+                 [(JSON..=) "AuthorizationConfig"
+                    Prelude.<$> authorizationConfig])))
+instance Property "AuthorizationConfig" FSxWindowsFileServerVolumeConfigurationProperty where
+  type PropertyType "AuthorizationConfig" FSxWindowsFileServerVolumeConfigurationProperty = FSxAuthorizationConfigProperty
+  set newValue FSxWindowsFileServerVolumeConfigurationProperty {..}
+    = FSxWindowsFileServerVolumeConfigurationProperty
+        {authorizationConfig = Prelude.pure newValue, ..}
+instance Property "FileSystemId" FSxWindowsFileServerVolumeConfigurationProperty where
+  type PropertyType "FileSystemId" FSxWindowsFileServerVolumeConfigurationProperty = Value Prelude.Text
+  set newValue FSxWindowsFileServerVolumeConfigurationProperty {..}
+    = FSxWindowsFileServerVolumeConfigurationProperty
+        {fileSystemId = newValue, ..}
+instance Property "RootDirectory" FSxWindowsFileServerVolumeConfigurationProperty where
+  type PropertyType "RootDirectory" FSxWindowsFileServerVolumeConfigurationProperty = Value Prelude.Text
+  set newValue FSxWindowsFileServerVolumeConfigurationProperty {..}
+    = FSxWindowsFileServerVolumeConfigurationProperty
+        {rootDirectory = newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/FSxWindowsFileServerVolumeConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/FSxWindowsFileServerVolumeConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/FSxWindowsFileServerVolumeConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.FSxWindowsFileServerVolumeConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FSxWindowsFileServerVolumeConfigurationProperty :: Prelude.Type
+instance ToResourceProperties FSxWindowsFileServerVolumeConfigurationProperty
+instance Prelude.Eq FSxWindowsFileServerVolumeConfigurationProperty
+instance Prelude.Show FSxWindowsFileServerVolumeConfigurationProperty
+instance JSON.ToJSON FSxWindowsFileServerVolumeConfigurationProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/FirelensConfigurationProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/FirelensConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/FirelensConfigurationProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.ECS.TaskDefinition.FirelensConfigurationProperty (
+        FirelensConfigurationProperty(..), mkFirelensConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FirelensConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-firelensconfiguration.html>
+    FirelensConfigurationProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-firelensconfiguration.html#cfn-ecs-taskdefinition-firelensconfiguration-options>
+                                   options :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-firelensconfiguration.html#cfn-ecs-taskdefinition-firelensconfiguration-type>
+                                   type' :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFirelensConfigurationProperty :: FirelensConfigurationProperty
+mkFirelensConfigurationProperty
+  = FirelensConfigurationProperty
+      {haddock_workaround_ = (), options = Prelude.Nothing,
+       type' = Prelude.Nothing}
+instance ToResourceProperties FirelensConfigurationProperty where
+  toResourceProperties FirelensConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.FirelensConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Options" Prelude.<$> options,
+                            (JSON..=) "Type" Prelude.<$> type'])}
+instance JSON.ToJSON FirelensConfigurationProperty where
+  toJSON FirelensConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Options" Prelude.<$> options,
+               (JSON..=) "Type" Prelude.<$> type']))
+instance Property "Options" FirelensConfigurationProperty where
+  type PropertyType "Options" FirelensConfigurationProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue FirelensConfigurationProperty {..}
+    = FirelensConfigurationProperty
+        {options = Prelude.pure newValue, ..}
+instance Property "Type" FirelensConfigurationProperty where
+  type PropertyType "Type" FirelensConfigurationProperty = Value Prelude.Text
+  set newValue FirelensConfigurationProperty {..}
+    = FirelensConfigurationProperty {type' = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/FirelensConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/FirelensConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/FirelensConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.FirelensConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FirelensConfigurationProperty :: Prelude.Type
+instance ToResourceProperties FirelensConfigurationProperty
+instance Prelude.Eq FirelensConfigurationProperty
+instance Prelude.Show FirelensConfigurationProperty
+instance JSON.ToJSON FirelensConfigurationProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/HealthCheckProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/HealthCheckProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/HealthCheckProperty.hs
@@ -0,0 +1,70 @@
+module Stratosphere.ECS.TaskDefinition.HealthCheckProperty (
+        HealthCheckProperty(..), mkHealthCheckProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data HealthCheckProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-healthcheck.html>
+    HealthCheckProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-healthcheck.html#cfn-ecs-taskdefinition-healthcheck-command>
+                         command :: (Prelude.Maybe (ValueList Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-healthcheck.html#cfn-ecs-taskdefinition-healthcheck-interval>
+                         interval :: (Prelude.Maybe (Value Prelude.Integer)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-healthcheck.html#cfn-ecs-taskdefinition-healthcheck-retries>
+                         retries :: (Prelude.Maybe (Value Prelude.Integer)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-healthcheck.html#cfn-ecs-taskdefinition-healthcheck-startperiod>
+                         startPeriod :: (Prelude.Maybe (Value Prelude.Integer)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-healthcheck.html#cfn-ecs-taskdefinition-healthcheck-timeout>
+                         timeout :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHealthCheckProperty :: HealthCheckProperty
+mkHealthCheckProperty
+  = HealthCheckProperty
+      {haddock_workaround_ = (), command = Prelude.Nothing,
+       interval = Prelude.Nothing, retries = Prelude.Nothing,
+       startPeriod = Prelude.Nothing, timeout = Prelude.Nothing}
+instance ToResourceProperties HealthCheckProperty where
+  toResourceProperties HealthCheckProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.HealthCheck",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Command" Prelude.<$> command,
+                            (JSON..=) "Interval" Prelude.<$> interval,
+                            (JSON..=) "Retries" Prelude.<$> retries,
+                            (JSON..=) "StartPeriod" Prelude.<$> startPeriod,
+                            (JSON..=) "Timeout" Prelude.<$> timeout])}
+instance JSON.ToJSON HealthCheckProperty where
+  toJSON HealthCheckProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Command" Prelude.<$> command,
+               (JSON..=) "Interval" Prelude.<$> interval,
+               (JSON..=) "Retries" Prelude.<$> retries,
+               (JSON..=) "StartPeriod" Prelude.<$> startPeriod,
+               (JSON..=) "Timeout" Prelude.<$> timeout]))
+instance Property "Command" HealthCheckProperty where
+  type PropertyType "Command" HealthCheckProperty = ValueList Prelude.Text
+  set newValue HealthCheckProperty {..}
+    = HealthCheckProperty {command = Prelude.pure newValue, ..}
+instance Property "Interval" HealthCheckProperty where
+  type PropertyType "Interval" HealthCheckProperty = Value Prelude.Integer
+  set newValue HealthCheckProperty {..}
+    = HealthCheckProperty {interval = Prelude.pure newValue, ..}
+instance Property "Retries" HealthCheckProperty where
+  type PropertyType "Retries" HealthCheckProperty = Value Prelude.Integer
+  set newValue HealthCheckProperty {..}
+    = HealthCheckProperty {retries = Prelude.pure newValue, ..}
+instance Property "StartPeriod" HealthCheckProperty where
+  type PropertyType "StartPeriod" HealthCheckProperty = Value Prelude.Integer
+  set newValue HealthCheckProperty {..}
+    = HealthCheckProperty {startPeriod = Prelude.pure newValue, ..}
+instance Property "Timeout" HealthCheckProperty where
+  type PropertyType "Timeout" HealthCheckProperty = Value Prelude.Integer
+  set newValue HealthCheckProperty {..}
+    = HealthCheckProperty {timeout = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/HealthCheckProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/HealthCheckProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/HealthCheckProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.HealthCheckProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HealthCheckProperty :: Prelude.Type
+instance ToResourceProperties HealthCheckProperty
+instance Prelude.Eq HealthCheckProperty
+instance Prelude.Show HealthCheckProperty
+instance JSON.ToJSON HealthCheckProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/HostEntryProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/HostEntryProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/HostEntryProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ECS.TaskDefinition.HostEntryProperty (
+        HostEntryProperty(..), mkHostEntryProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data HostEntryProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-hostentry.html>
+    HostEntryProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-hostentry.html#cfn-ecs-taskdefinition-hostentry-hostname>
+                       hostname :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-hostentry.html#cfn-ecs-taskdefinition-hostentry-ipaddress>
+                       ipAddress :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHostEntryProperty :: HostEntryProperty
+mkHostEntryProperty
+  = HostEntryProperty
+      {haddock_workaround_ = (), hostname = Prelude.Nothing,
+       ipAddress = Prelude.Nothing}
+instance ToResourceProperties HostEntryProperty where
+  toResourceProperties HostEntryProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.HostEntry",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Hostname" Prelude.<$> hostname,
+                            (JSON..=) "IpAddress" Prelude.<$> ipAddress])}
+instance JSON.ToJSON HostEntryProperty where
+  toJSON HostEntryProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Hostname" Prelude.<$> hostname,
+               (JSON..=) "IpAddress" Prelude.<$> ipAddress]))
+instance Property "Hostname" HostEntryProperty where
+  type PropertyType "Hostname" HostEntryProperty = Value Prelude.Text
+  set newValue HostEntryProperty {..}
+    = HostEntryProperty {hostname = Prelude.pure newValue, ..}
+instance Property "IpAddress" HostEntryProperty where
+  type PropertyType "IpAddress" HostEntryProperty = Value Prelude.Text
+  set newValue HostEntryProperty {..}
+    = HostEntryProperty {ipAddress = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/HostEntryProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/HostEntryProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/HostEntryProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.HostEntryProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HostEntryProperty :: Prelude.Type
+instance ToResourceProperties HostEntryProperty
+instance Prelude.Eq HostEntryProperty
+instance Prelude.Show HostEntryProperty
+instance JSON.ToJSON HostEntryProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/HostVolumePropertiesProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/HostVolumePropertiesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/HostVolumePropertiesProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.ECS.TaskDefinition.HostVolumePropertiesProperty (
+        HostVolumePropertiesProperty(..), mkHostVolumePropertiesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data HostVolumePropertiesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-hostvolumeproperties.html>
+    HostVolumePropertiesProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-hostvolumeproperties.html#cfn-ecs-taskdefinition-hostvolumeproperties-sourcepath>
+                                  sourcePath :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHostVolumePropertiesProperty :: HostVolumePropertiesProperty
+mkHostVolumePropertiesProperty
+  = HostVolumePropertiesProperty
+      {haddock_workaround_ = (), sourcePath = Prelude.Nothing}
+instance ToResourceProperties HostVolumePropertiesProperty where
+  toResourceProperties HostVolumePropertiesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.HostVolumeProperties",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "SourcePath" Prelude.<$> sourcePath])}
+instance JSON.ToJSON HostVolumePropertiesProperty where
+  toJSON HostVolumePropertiesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "SourcePath" Prelude.<$> sourcePath]))
+instance Property "SourcePath" HostVolumePropertiesProperty where
+  type PropertyType "SourcePath" HostVolumePropertiesProperty = Value Prelude.Text
+  set newValue HostVolumePropertiesProperty {..}
+    = HostVolumePropertiesProperty
+        {sourcePath = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/HostVolumePropertiesProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/HostVolumePropertiesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/HostVolumePropertiesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.HostVolumePropertiesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HostVolumePropertiesProperty :: Prelude.Type
+instance ToResourceProperties HostVolumePropertiesProperty
+instance Prelude.Eq HostVolumePropertiesProperty
+instance Prelude.Show HostVolumePropertiesProperty
+instance JSON.ToJSON HostVolumePropertiesProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/KernelCapabilitiesProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/KernelCapabilitiesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/KernelCapabilitiesProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ECS.TaskDefinition.KernelCapabilitiesProperty (
+        KernelCapabilitiesProperty(..), mkKernelCapabilitiesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KernelCapabilitiesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-kernelcapabilities.html>
+    KernelCapabilitiesProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-kernelcapabilities.html#cfn-ecs-taskdefinition-kernelcapabilities-add>
+                                add :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-kernelcapabilities.html#cfn-ecs-taskdefinition-kernelcapabilities-drop>
+                                drop :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKernelCapabilitiesProperty :: KernelCapabilitiesProperty
+mkKernelCapabilitiesProperty
+  = KernelCapabilitiesProperty
+      {haddock_workaround_ = (), add = Prelude.Nothing,
+       drop = Prelude.Nothing}
+instance ToResourceProperties KernelCapabilitiesProperty where
+  toResourceProperties KernelCapabilitiesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.KernelCapabilities",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Add" Prelude.<$> add,
+                            (JSON..=) "Drop" Prelude.<$> drop])}
+instance JSON.ToJSON KernelCapabilitiesProperty where
+  toJSON KernelCapabilitiesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Add" Prelude.<$> add,
+               (JSON..=) "Drop" Prelude.<$> drop]))
+instance Property "Add" KernelCapabilitiesProperty where
+  type PropertyType "Add" KernelCapabilitiesProperty = ValueList Prelude.Text
+  set newValue KernelCapabilitiesProperty {..}
+    = KernelCapabilitiesProperty {add = Prelude.pure newValue, ..}
+instance Property "Drop" KernelCapabilitiesProperty where
+  type PropertyType "Drop" KernelCapabilitiesProperty = ValueList Prelude.Text
+  set newValue KernelCapabilitiesProperty {..}
+    = KernelCapabilitiesProperty {drop = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/KernelCapabilitiesProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/KernelCapabilitiesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/KernelCapabilitiesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.KernelCapabilitiesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data KernelCapabilitiesProperty :: Prelude.Type
+instance ToResourceProperties KernelCapabilitiesProperty
+instance Prelude.Eq KernelCapabilitiesProperty
+instance Prelude.Show KernelCapabilitiesProperty
+instance JSON.ToJSON KernelCapabilitiesProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/KeyValuePairProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/KeyValuePairProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/KeyValuePairProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ECS.TaskDefinition.KeyValuePairProperty (
+        KeyValuePairProperty(..), mkKeyValuePairProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KeyValuePairProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-keyvaluepair.html>
+    KeyValuePairProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-keyvaluepair.html#cfn-ecs-taskdefinition-keyvaluepair-name>
+                          name :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-keyvaluepair.html#cfn-ecs-taskdefinition-keyvaluepair-value>
+                          value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKeyValuePairProperty :: KeyValuePairProperty
+mkKeyValuePairProperty
+  = KeyValuePairProperty
+      {haddock_workaround_ = (), name = Prelude.Nothing,
+       value = Prelude.Nothing}
+instance ToResourceProperties KeyValuePairProperty where
+  toResourceProperties KeyValuePairProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.KeyValuePair",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON KeyValuePairProperty where
+  toJSON KeyValuePairProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "Value" Prelude.<$> value]))
+instance Property "Name" KeyValuePairProperty where
+  type PropertyType "Name" KeyValuePairProperty = Value Prelude.Text
+  set newValue KeyValuePairProperty {..}
+    = KeyValuePairProperty {name = Prelude.pure newValue, ..}
+instance Property "Value" KeyValuePairProperty where
+  type PropertyType "Value" KeyValuePairProperty = Value Prelude.Text
+  set newValue KeyValuePairProperty {..}
+    = KeyValuePairProperty {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/KeyValuePairProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/KeyValuePairProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/KeyValuePairProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.KeyValuePairProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data KeyValuePairProperty :: Prelude.Type
+instance ToResourceProperties KeyValuePairProperty
+instance Prelude.Eq KeyValuePairProperty
+instance Prelude.Show KeyValuePairProperty
+instance JSON.ToJSON KeyValuePairProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/LinuxParametersProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/LinuxParametersProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/LinuxParametersProperty.hs
@@ -0,0 +1,94 @@
+module Stratosphere.ECS.TaskDefinition.LinuxParametersProperty (
+        module Exports, LinuxParametersProperty(..),
+        mkLinuxParametersProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.DeviceProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.KernelCapabilitiesProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.TmpfsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LinuxParametersProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-linuxparameters.html>
+    LinuxParametersProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-linuxparameters.html#cfn-ecs-taskdefinition-linuxparameters-capabilities>
+                             capabilities :: (Prelude.Maybe KernelCapabilitiesProperty),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-linuxparameters.html#cfn-ecs-taskdefinition-linuxparameters-devices>
+                             devices :: (Prelude.Maybe [DeviceProperty]),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-linuxparameters.html#cfn-ecs-taskdefinition-linuxparameters-initprocessenabled>
+                             initProcessEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-linuxparameters.html#cfn-ecs-taskdefinition-linuxparameters-maxswap>
+                             maxSwap :: (Prelude.Maybe (Value Prelude.Integer)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-linuxparameters.html#cfn-ecs-taskdefinition-linuxparameters-sharedmemorysize>
+                             sharedMemorySize :: (Prelude.Maybe (Value Prelude.Integer)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-linuxparameters.html#cfn-ecs-taskdefinition-linuxparameters-swappiness>
+                             swappiness :: (Prelude.Maybe (Value Prelude.Integer)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-linuxparameters.html#cfn-ecs-taskdefinition-linuxparameters-tmpfs>
+                             tmpfs :: (Prelude.Maybe [TmpfsProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLinuxParametersProperty :: LinuxParametersProperty
+mkLinuxParametersProperty
+  = LinuxParametersProperty
+      {haddock_workaround_ = (), capabilities = Prelude.Nothing,
+       devices = Prelude.Nothing, initProcessEnabled = Prelude.Nothing,
+       maxSwap = Prelude.Nothing, sharedMemorySize = Prelude.Nothing,
+       swappiness = Prelude.Nothing, tmpfs = Prelude.Nothing}
+instance ToResourceProperties LinuxParametersProperty where
+  toResourceProperties LinuxParametersProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.LinuxParameters",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Capabilities" Prelude.<$> capabilities,
+                            (JSON..=) "Devices" Prelude.<$> devices,
+                            (JSON..=) "InitProcessEnabled" Prelude.<$> initProcessEnabled,
+                            (JSON..=) "MaxSwap" Prelude.<$> maxSwap,
+                            (JSON..=) "SharedMemorySize" Prelude.<$> sharedMemorySize,
+                            (JSON..=) "Swappiness" Prelude.<$> swappiness,
+                            (JSON..=) "Tmpfs" Prelude.<$> tmpfs])}
+instance JSON.ToJSON LinuxParametersProperty where
+  toJSON LinuxParametersProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Capabilities" Prelude.<$> capabilities,
+               (JSON..=) "Devices" Prelude.<$> devices,
+               (JSON..=) "InitProcessEnabled" Prelude.<$> initProcessEnabled,
+               (JSON..=) "MaxSwap" Prelude.<$> maxSwap,
+               (JSON..=) "SharedMemorySize" Prelude.<$> sharedMemorySize,
+               (JSON..=) "Swappiness" Prelude.<$> swappiness,
+               (JSON..=) "Tmpfs" Prelude.<$> tmpfs]))
+instance Property "Capabilities" LinuxParametersProperty where
+  type PropertyType "Capabilities" LinuxParametersProperty = KernelCapabilitiesProperty
+  set newValue LinuxParametersProperty {..}
+    = LinuxParametersProperty
+        {capabilities = Prelude.pure newValue, ..}
+instance Property "Devices" LinuxParametersProperty where
+  type PropertyType "Devices" LinuxParametersProperty = [DeviceProperty]
+  set newValue LinuxParametersProperty {..}
+    = LinuxParametersProperty {devices = Prelude.pure newValue, ..}
+instance Property "InitProcessEnabled" LinuxParametersProperty where
+  type PropertyType "InitProcessEnabled" LinuxParametersProperty = Value Prelude.Bool
+  set newValue LinuxParametersProperty {..}
+    = LinuxParametersProperty
+        {initProcessEnabled = Prelude.pure newValue, ..}
+instance Property "MaxSwap" LinuxParametersProperty where
+  type PropertyType "MaxSwap" LinuxParametersProperty = Value Prelude.Integer
+  set newValue LinuxParametersProperty {..}
+    = LinuxParametersProperty {maxSwap = Prelude.pure newValue, ..}
+instance Property "SharedMemorySize" LinuxParametersProperty where
+  type PropertyType "SharedMemorySize" LinuxParametersProperty = Value Prelude.Integer
+  set newValue LinuxParametersProperty {..}
+    = LinuxParametersProperty
+        {sharedMemorySize = Prelude.pure newValue, ..}
+instance Property "Swappiness" LinuxParametersProperty where
+  type PropertyType "Swappiness" LinuxParametersProperty = Value Prelude.Integer
+  set newValue LinuxParametersProperty {..}
+    = LinuxParametersProperty {swappiness = Prelude.pure newValue, ..}
+instance Property "Tmpfs" LinuxParametersProperty where
+  type PropertyType "Tmpfs" LinuxParametersProperty = [TmpfsProperty]
+  set newValue LinuxParametersProperty {..}
+    = LinuxParametersProperty {tmpfs = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/LinuxParametersProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/LinuxParametersProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/LinuxParametersProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.LinuxParametersProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LinuxParametersProperty :: Prelude.Type
+instance ToResourceProperties LinuxParametersProperty
+instance Prelude.Eq LinuxParametersProperty
+instance Prelude.Show LinuxParametersProperty
+instance JSON.ToJSON LinuxParametersProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/LogConfigurationProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/LogConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/LogConfigurationProperty.hs
@@ -0,0 +1,59 @@
+module Stratosphere.ECS.TaskDefinition.LogConfigurationProperty (
+        module Exports, LogConfigurationProperty(..),
+        mkLogConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.SecretProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LogConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-logconfiguration.html>
+    LogConfigurationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-logconfiguration.html#cfn-ecs-taskdefinition-logconfiguration-logdriver>
+                              logDriver :: (Value Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-logconfiguration.html#cfn-ecs-taskdefinition-logconfiguration-options>
+                              options :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-logconfiguration.html#cfn-ecs-taskdefinition-logconfiguration-secretoptions>
+                              secretOptions :: (Prelude.Maybe [SecretProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLogConfigurationProperty ::
+  Value Prelude.Text -> LogConfigurationProperty
+mkLogConfigurationProperty logDriver
+  = LogConfigurationProperty
+      {haddock_workaround_ = (), logDriver = logDriver,
+       options = Prelude.Nothing, secretOptions = Prelude.Nothing}
+instance ToResourceProperties LogConfigurationProperty where
+  toResourceProperties LogConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.LogConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["LogDriver" JSON..= logDriver]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Options" Prelude.<$> options,
+                               (JSON..=) "SecretOptions" Prelude.<$> secretOptions]))}
+instance JSON.ToJSON LogConfigurationProperty where
+  toJSON LogConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["LogDriver" JSON..= logDriver]
+              (Prelude.catMaybes
+                 [(JSON..=) "Options" Prelude.<$> options,
+                  (JSON..=) "SecretOptions" Prelude.<$> secretOptions])))
+instance Property "LogDriver" LogConfigurationProperty where
+  type PropertyType "LogDriver" LogConfigurationProperty = Value Prelude.Text
+  set newValue LogConfigurationProperty {..}
+    = LogConfigurationProperty {logDriver = newValue, ..}
+instance Property "Options" LogConfigurationProperty where
+  type PropertyType "Options" LogConfigurationProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue LogConfigurationProperty {..}
+    = LogConfigurationProperty {options = Prelude.pure newValue, ..}
+instance Property "SecretOptions" LogConfigurationProperty where
+  type PropertyType "SecretOptions" LogConfigurationProperty = [SecretProperty]
+  set newValue LogConfigurationProperty {..}
+    = LogConfigurationProperty
+        {secretOptions = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/LogConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/LogConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/LogConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.LogConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LogConfigurationProperty :: Prelude.Type
+instance ToResourceProperties LogConfigurationProperty
+instance Prelude.Eq LogConfigurationProperty
+instance Prelude.Show LogConfigurationProperty
+instance JSON.ToJSON LogConfigurationProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/MountPointProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/MountPointProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/MountPointProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.ECS.TaskDefinition.MountPointProperty (
+        MountPointProperty(..), mkMountPointProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MountPointProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-mountpoint.html>
+    MountPointProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-mountpoint.html#cfn-ecs-taskdefinition-mountpoint-containerpath>
+                        containerPath :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-mountpoint.html#cfn-ecs-taskdefinition-mountpoint-readonly>
+                        readOnly :: (Prelude.Maybe (Value Prelude.Bool)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-mountpoint.html#cfn-ecs-taskdefinition-mountpoint-sourcevolume>
+                        sourceVolume :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMountPointProperty :: MountPointProperty
+mkMountPointProperty
+  = MountPointProperty
+      {haddock_workaround_ = (), containerPath = Prelude.Nothing,
+       readOnly = Prelude.Nothing, sourceVolume = Prelude.Nothing}
+instance ToResourceProperties MountPointProperty where
+  toResourceProperties MountPointProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.MountPoint",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ContainerPath" Prelude.<$> containerPath,
+                            (JSON..=) "ReadOnly" Prelude.<$> readOnly,
+                            (JSON..=) "SourceVolume" Prelude.<$> sourceVolume])}
+instance JSON.ToJSON MountPointProperty where
+  toJSON MountPointProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ContainerPath" Prelude.<$> containerPath,
+               (JSON..=) "ReadOnly" Prelude.<$> readOnly,
+               (JSON..=) "SourceVolume" Prelude.<$> sourceVolume]))
+instance Property "ContainerPath" MountPointProperty where
+  type PropertyType "ContainerPath" MountPointProperty = Value Prelude.Text
+  set newValue MountPointProperty {..}
+    = MountPointProperty {containerPath = Prelude.pure newValue, ..}
+instance Property "ReadOnly" MountPointProperty where
+  type PropertyType "ReadOnly" MountPointProperty = Value Prelude.Bool
+  set newValue MountPointProperty {..}
+    = MountPointProperty {readOnly = Prelude.pure newValue, ..}
+instance Property "SourceVolume" MountPointProperty where
+  type PropertyType "SourceVolume" MountPointProperty = Value Prelude.Text
+  set newValue MountPointProperty {..}
+    = MountPointProperty {sourceVolume = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/MountPointProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/MountPointProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/MountPointProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.MountPointProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MountPointProperty :: Prelude.Type
+instance ToResourceProperties MountPointProperty
+instance Prelude.Eq MountPointProperty
+instance Prelude.Show MountPointProperty
+instance JSON.ToJSON MountPointProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/PortMappingProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/PortMappingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/PortMappingProperty.hs
@@ -0,0 +1,80 @@
+module Stratosphere.ECS.TaskDefinition.PortMappingProperty (
+        PortMappingProperty(..), mkPortMappingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PortMappingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html>
+    PortMappingProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-appprotocol>
+                         appProtocol :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-containerport>
+                         containerPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-containerportrange>
+                         containerPortRange :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-hostport>
+                         hostPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-name>
+                         name :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-protocol>
+                         protocol :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPortMappingProperty :: PortMappingProperty
+mkPortMappingProperty
+  = PortMappingProperty
+      {haddock_workaround_ = (), appProtocol = Prelude.Nothing,
+       containerPort = Prelude.Nothing,
+       containerPortRange = Prelude.Nothing, hostPort = Prelude.Nothing,
+       name = Prelude.Nothing, protocol = Prelude.Nothing}
+instance ToResourceProperties PortMappingProperty where
+  toResourceProperties PortMappingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.PortMapping",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AppProtocol" Prelude.<$> appProtocol,
+                            (JSON..=) "ContainerPort" Prelude.<$> containerPort,
+                            (JSON..=) "ContainerPortRange" Prelude.<$> containerPortRange,
+                            (JSON..=) "HostPort" Prelude.<$> hostPort,
+                            (JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "Protocol" Prelude.<$> protocol])}
+instance JSON.ToJSON PortMappingProperty where
+  toJSON PortMappingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AppProtocol" Prelude.<$> appProtocol,
+               (JSON..=) "ContainerPort" Prelude.<$> containerPort,
+               (JSON..=) "ContainerPortRange" Prelude.<$> containerPortRange,
+               (JSON..=) "HostPort" Prelude.<$> hostPort,
+               (JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "Protocol" Prelude.<$> protocol]))
+instance Property "AppProtocol" PortMappingProperty where
+  type PropertyType "AppProtocol" PortMappingProperty = Value Prelude.Text
+  set newValue PortMappingProperty {..}
+    = PortMappingProperty {appProtocol = Prelude.pure newValue, ..}
+instance Property "ContainerPort" PortMappingProperty where
+  type PropertyType "ContainerPort" PortMappingProperty = Value Prelude.Integer
+  set newValue PortMappingProperty {..}
+    = PortMappingProperty {containerPort = Prelude.pure newValue, ..}
+instance Property "ContainerPortRange" PortMappingProperty where
+  type PropertyType "ContainerPortRange" PortMappingProperty = Value Prelude.Text
+  set newValue PortMappingProperty {..}
+    = PortMappingProperty
+        {containerPortRange = Prelude.pure newValue, ..}
+instance Property "HostPort" PortMappingProperty where
+  type PropertyType "HostPort" PortMappingProperty = Value Prelude.Integer
+  set newValue PortMappingProperty {..}
+    = PortMappingProperty {hostPort = Prelude.pure newValue, ..}
+instance Property "Name" PortMappingProperty where
+  type PropertyType "Name" PortMappingProperty = Value Prelude.Text
+  set newValue PortMappingProperty {..}
+    = PortMappingProperty {name = Prelude.pure newValue, ..}
+instance Property "Protocol" PortMappingProperty where
+  type PropertyType "Protocol" PortMappingProperty = Value Prelude.Text
+  set newValue PortMappingProperty {..}
+    = PortMappingProperty {protocol = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/PortMappingProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/PortMappingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/PortMappingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.PortMappingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PortMappingProperty :: Prelude.Type
+instance ToResourceProperties PortMappingProperty
+instance Prelude.Eq PortMappingProperty
+instance Prelude.Show PortMappingProperty
+instance JSON.ToJSON PortMappingProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/ProxyConfigurationProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/ProxyConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/ProxyConfigurationProperty.hs
@@ -0,0 +1,62 @@
+module Stratosphere.ECS.TaskDefinition.ProxyConfigurationProperty (
+        module Exports, ProxyConfigurationProperty(..),
+        mkProxyConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.KeyValuePairProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ProxyConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-proxyconfiguration.html>
+    ProxyConfigurationProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-proxyconfiguration.html#cfn-ecs-taskdefinition-proxyconfiguration-containername>
+                                containerName :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-proxyconfiguration.html#cfn-ecs-taskdefinition-proxyconfiguration-proxyconfigurationproperties>
+                                proxyConfigurationProperties :: (Prelude.Maybe [KeyValuePairProperty]),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-proxyconfiguration.html#cfn-ecs-taskdefinition-proxyconfiguration-type>
+                                type' :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkProxyConfigurationProperty ::
+  Value Prelude.Text -> ProxyConfigurationProperty
+mkProxyConfigurationProperty containerName
+  = ProxyConfigurationProperty
+      {haddock_workaround_ = (), containerName = containerName,
+       proxyConfigurationProperties = Prelude.Nothing,
+       type' = Prelude.Nothing}
+instance ToResourceProperties ProxyConfigurationProperty where
+  toResourceProperties ProxyConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.ProxyConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ContainerName" JSON..= containerName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ProxyConfigurationProperties"
+                                 Prelude.<$> proxyConfigurationProperties,
+                               (JSON..=) "Type" Prelude.<$> type']))}
+instance JSON.ToJSON ProxyConfigurationProperty where
+  toJSON ProxyConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ContainerName" JSON..= containerName]
+              (Prelude.catMaybes
+                 [(JSON..=) "ProxyConfigurationProperties"
+                    Prelude.<$> proxyConfigurationProperties,
+                  (JSON..=) "Type" Prelude.<$> type'])))
+instance Property "ContainerName" ProxyConfigurationProperty where
+  type PropertyType "ContainerName" ProxyConfigurationProperty = Value Prelude.Text
+  set newValue ProxyConfigurationProperty {..}
+    = ProxyConfigurationProperty {containerName = newValue, ..}
+instance Property "ProxyConfigurationProperties" ProxyConfigurationProperty where
+  type PropertyType "ProxyConfigurationProperties" ProxyConfigurationProperty = [KeyValuePairProperty]
+  set newValue ProxyConfigurationProperty {..}
+    = ProxyConfigurationProperty
+        {proxyConfigurationProperties = Prelude.pure newValue, ..}
+instance Property "Type" ProxyConfigurationProperty where
+  type PropertyType "Type" ProxyConfigurationProperty = Value Prelude.Text
+  set newValue ProxyConfigurationProperty {..}
+    = ProxyConfigurationProperty {type' = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/ProxyConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/ProxyConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/ProxyConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.ProxyConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ProxyConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ProxyConfigurationProperty
+instance Prelude.Eq ProxyConfigurationProperty
+instance Prelude.Show ProxyConfigurationProperty
+instance JSON.ToJSON ProxyConfigurationProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/RepositoryCredentialsProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/RepositoryCredentialsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/RepositoryCredentialsProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.ECS.TaskDefinition.RepositoryCredentialsProperty (
+        RepositoryCredentialsProperty(..), mkRepositoryCredentialsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RepositoryCredentialsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-repositorycredentials.html>
+    RepositoryCredentialsProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-repositorycredentials.html#cfn-ecs-taskdefinition-repositorycredentials-credentialsparameter>
+                                   credentialsParameter :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRepositoryCredentialsProperty :: RepositoryCredentialsProperty
+mkRepositoryCredentialsProperty
+  = RepositoryCredentialsProperty
+      {haddock_workaround_ = (), credentialsParameter = Prelude.Nothing}
+instance ToResourceProperties RepositoryCredentialsProperty where
+  toResourceProperties RepositoryCredentialsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.RepositoryCredentials",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CredentialsParameter"
+                              Prelude.<$> credentialsParameter])}
+instance JSON.ToJSON RepositoryCredentialsProperty where
+  toJSON RepositoryCredentialsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CredentialsParameter"
+                 Prelude.<$> credentialsParameter]))
+instance Property "CredentialsParameter" RepositoryCredentialsProperty where
+  type PropertyType "CredentialsParameter" RepositoryCredentialsProperty = Value Prelude.Text
+  set newValue RepositoryCredentialsProperty {..}
+    = RepositoryCredentialsProperty
+        {credentialsParameter = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/RepositoryCredentialsProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/RepositoryCredentialsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/RepositoryCredentialsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.RepositoryCredentialsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RepositoryCredentialsProperty :: Prelude.Type
+instance ToResourceProperties RepositoryCredentialsProperty
+instance Prelude.Eq RepositoryCredentialsProperty
+instance Prelude.Show RepositoryCredentialsProperty
+instance JSON.ToJSON RepositoryCredentialsProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/ResourceRequirementProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/ResourceRequirementProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/ResourceRequirementProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.ECS.TaskDefinition.ResourceRequirementProperty (
+        ResourceRequirementProperty(..), mkResourceRequirementProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ResourceRequirementProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-resourcerequirement.html>
+    ResourceRequirementProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-resourcerequirement.html#cfn-ecs-taskdefinition-resourcerequirement-type>
+                                 type' :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-resourcerequirement.html#cfn-ecs-taskdefinition-resourcerequirement-value>
+                                 value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResourceRequirementProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> ResourceRequirementProperty
+mkResourceRequirementProperty type' value
+  = ResourceRequirementProperty
+      {haddock_workaround_ = (), type' = type', value = value}
+instance ToResourceProperties ResourceRequirementProperty where
+  toResourceProperties ResourceRequirementProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.ResourceRequirement",
+         supportsTags = Prelude.False,
+         properties = ["Type" JSON..= type', "Value" JSON..= value]}
+instance JSON.ToJSON ResourceRequirementProperty where
+  toJSON ResourceRequirementProperty {..}
+    = JSON.object ["Type" JSON..= type', "Value" JSON..= value]
+instance Property "Type" ResourceRequirementProperty where
+  type PropertyType "Type" ResourceRequirementProperty = Value Prelude.Text
+  set newValue ResourceRequirementProperty {..}
+    = ResourceRequirementProperty {type' = newValue, ..}
+instance Property "Value" ResourceRequirementProperty where
+  type PropertyType "Value" ResourceRequirementProperty = Value Prelude.Text
+  set newValue ResourceRequirementProperty {..}
+    = ResourceRequirementProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/ResourceRequirementProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/ResourceRequirementProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/ResourceRequirementProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.ResourceRequirementProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ResourceRequirementProperty :: Prelude.Type
+instance ToResourceProperties ResourceRequirementProperty
+instance Prelude.Eq ResourceRequirementProperty
+instance Prelude.Show ResourceRequirementProperty
+instance JSON.ToJSON ResourceRequirementProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/RestartPolicyProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/RestartPolicyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/RestartPolicyProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.ECS.TaskDefinition.RestartPolicyProperty (
+        RestartPolicyProperty(..), mkRestartPolicyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RestartPolicyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-restartpolicy.html>
+    RestartPolicyProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-restartpolicy.html#cfn-ecs-taskdefinition-restartpolicy-enabled>
+                           enabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-restartpolicy.html#cfn-ecs-taskdefinition-restartpolicy-ignoredexitcodes>
+                           ignoredExitCodes :: (Prelude.Maybe (ValueList Prelude.Integer)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-restartpolicy.html#cfn-ecs-taskdefinition-restartpolicy-restartattemptperiod>
+                           restartAttemptPeriod :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRestartPolicyProperty :: RestartPolicyProperty
+mkRestartPolicyProperty
+  = RestartPolicyProperty
+      {haddock_workaround_ = (), enabled = Prelude.Nothing,
+       ignoredExitCodes = Prelude.Nothing,
+       restartAttemptPeriod = Prelude.Nothing}
+instance ToResourceProperties RestartPolicyProperty where
+  toResourceProperties RestartPolicyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.RestartPolicy",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Enabled" Prelude.<$> enabled,
+                            (JSON..=) "IgnoredExitCodes" Prelude.<$> ignoredExitCodes,
+                            (JSON..=) "RestartAttemptPeriod"
+                              Prelude.<$> restartAttemptPeriod])}
+instance JSON.ToJSON RestartPolicyProperty where
+  toJSON RestartPolicyProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Enabled" Prelude.<$> enabled,
+               (JSON..=) "IgnoredExitCodes" Prelude.<$> ignoredExitCodes,
+               (JSON..=) "RestartAttemptPeriod"
+                 Prelude.<$> restartAttemptPeriod]))
+instance Property "Enabled" RestartPolicyProperty where
+  type PropertyType "Enabled" RestartPolicyProperty = Value Prelude.Bool
+  set newValue RestartPolicyProperty {..}
+    = RestartPolicyProperty {enabled = Prelude.pure newValue, ..}
+instance Property "IgnoredExitCodes" RestartPolicyProperty where
+  type PropertyType "IgnoredExitCodes" RestartPolicyProperty = ValueList Prelude.Integer
+  set newValue RestartPolicyProperty {..}
+    = RestartPolicyProperty
+        {ignoredExitCodes = Prelude.pure newValue, ..}
+instance Property "RestartAttemptPeriod" RestartPolicyProperty where
+  type PropertyType "RestartAttemptPeriod" RestartPolicyProperty = Value Prelude.Integer
+  set newValue RestartPolicyProperty {..}
+    = RestartPolicyProperty
+        {restartAttemptPeriod = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/RestartPolicyProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/RestartPolicyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/RestartPolicyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.RestartPolicyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RestartPolicyProperty :: Prelude.Type
+instance ToResourceProperties RestartPolicyProperty
+instance Prelude.Eq RestartPolicyProperty
+instance Prelude.Show RestartPolicyProperty
+instance JSON.ToJSON RestartPolicyProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/RuntimePlatformProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/RuntimePlatformProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/RuntimePlatformProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ECS.TaskDefinition.RuntimePlatformProperty (
+        RuntimePlatformProperty(..), mkRuntimePlatformProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RuntimePlatformProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-runtimeplatform.html>
+    RuntimePlatformProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-runtimeplatform.html#cfn-ecs-taskdefinition-runtimeplatform-cpuarchitecture>
+                             cpuArchitecture :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-runtimeplatform.html#cfn-ecs-taskdefinition-runtimeplatform-operatingsystemfamily>
+                             operatingSystemFamily :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRuntimePlatformProperty :: RuntimePlatformProperty
+mkRuntimePlatformProperty
+  = RuntimePlatformProperty
+      {haddock_workaround_ = (), cpuArchitecture = Prelude.Nothing,
+       operatingSystemFamily = Prelude.Nothing}
+instance ToResourceProperties RuntimePlatformProperty where
+  toResourceProperties RuntimePlatformProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.RuntimePlatform",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CpuArchitecture" Prelude.<$> cpuArchitecture,
+                            (JSON..=) "OperatingSystemFamily"
+                              Prelude.<$> operatingSystemFamily])}
+instance JSON.ToJSON RuntimePlatformProperty where
+  toJSON RuntimePlatformProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CpuArchitecture" Prelude.<$> cpuArchitecture,
+               (JSON..=) "OperatingSystemFamily"
+                 Prelude.<$> operatingSystemFamily]))
+instance Property "CpuArchitecture" RuntimePlatformProperty where
+  type PropertyType "CpuArchitecture" RuntimePlatformProperty = Value Prelude.Text
+  set newValue RuntimePlatformProperty {..}
+    = RuntimePlatformProperty
+        {cpuArchitecture = Prelude.pure newValue, ..}
+instance Property "OperatingSystemFamily" RuntimePlatformProperty where
+  type PropertyType "OperatingSystemFamily" RuntimePlatformProperty = Value Prelude.Text
+  set newValue RuntimePlatformProperty {..}
+    = RuntimePlatformProperty
+        {operatingSystemFamily = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/RuntimePlatformProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/RuntimePlatformProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/RuntimePlatformProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.RuntimePlatformProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RuntimePlatformProperty :: Prelude.Type
+instance ToResourceProperties RuntimePlatformProperty
+instance Prelude.Eq RuntimePlatformProperty
+instance Prelude.Show RuntimePlatformProperty
+instance JSON.ToJSON RuntimePlatformProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/SecretProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/SecretProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/SecretProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.ECS.TaskDefinition.SecretProperty (
+        SecretProperty(..), mkSecretProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SecretProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-secret.html>
+    SecretProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-secret.html#cfn-ecs-taskdefinition-secret-name>
+                    name :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-secret.html#cfn-ecs-taskdefinition-secret-valuefrom>
+                    valueFrom :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSecretProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> SecretProperty
+mkSecretProperty name valueFrom
+  = SecretProperty
+      {haddock_workaround_ = (), name = name, valueFrom = valueFrom}
+instance ToResourceProperties SecretProperty where
+  toResourceProperties SecretProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.Secret",
+         supportsTags = Prelude.False,
+         properties = ["Name" JSON..= name, "ValueFrom" JSON..= valueFrom]}
+instance JSON.ToJSON SecretProperty where
+  toJSON SecretProperty {..}
+    = JSON.object ["Name" JSON..= name, "ValueFrom" JSON..= valueFrom]
+instance Property "Name" SecretProperty where
+  type PropertyType "Name" SecretProperty = Value Prelude.Text
+  set newValue SecretProperty {..}
+    = SecretProperty {name = newValue, ..}
+instance Property "ValueFrom" SecretProperty where
+  type PropertyType "ValueFrom" SecretProperty = Value Prelude.Text
+  set newValue SecretProperty {..}
+    = SecretProperty {valueFrom = newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/SecretProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/SecretProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/SecretProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.SecretProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SecretProperty :: Prelude.Type
+instance ToResourceProperties SecretProperty
+instance Prelude.Eq SecretProperty
+instance Prelude.Show SecretProperty
+instance JSON.ToJSON SecretProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/SystemControlProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/SystemControlProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/SystemControlProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ECS.TaskDefinition.SystemControlProperty (
+        SystemControlProperty(..), mkSystemControlProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SystemControlProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-systemcontrol.html>
+    SystemControlProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-systemcontrol.html#cfn-ecs-taskdefinition-systemcontrol-namespace>
+                           namespace :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-systemcontrol.html#cfn-ecs-taskdefinition-systemcontrol-value>
+                           value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSystemControlProperty :: SystemControlProperty
+mkSystemControlProperty
+  = SystemControlProperty
+      {haddock_workaround_ = (), namespace = Prelude.Nothing,
+       value = Prelude.Nothing}
+instance ToResourceProperties SystemControlProperty where
+  toResourceProperties SystemControlProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.SystemControl",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Namespace" Prelude.<$> namespace,
+                            (JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON SystemControlProperty where
+  toJSON SystemControlProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Namespace" Prelude.<$> namespace,
+               (JSON..=) "Value" Prelude.<$> value]))
+instance Property "Namespace" SystemControlProperty where
+  type PropertyType "Namespace" SystemControlProperty = Value Prelude.Text
+  set newValue SystemControlProperty {..}
+    = SystemControlProperty {namespace = Prelude.pure newValue, ..}
+instance Property "Value" SystemControlProperty where
+  type PropertyType "Value" SystemControlProperty = Value Prelude.Text
+  set newValue SystemControlProperty {..}
+    = SystemControlProperty {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/SystemControlProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/SystemControlProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/SystemControlProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.SystemControlProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SystemControlProperty :: Prelude.Type
+instance ToResourceProperties SystemControlProperty
+instance Prelude.Eq SystemControlProperty
+instance Prelude.Show SystemControlProperty
+instance JSON.ToJSON SystemControlProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/TaskDefinitionPlacementConstraintProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/TaskDefinitionPlacementConstraintProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/TaskDefinitionPlacementConstraintProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.ECS.TaskDefinition.TaskDefinitionPlacementConstraintProperty (
+        TaskDefinitionPlacementConstraintProperty(..),
+        mkTaskDefinitionPlacementConstraintProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TaskDefinitionPlacementConstraintProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-taskdefinitionplacementconstraint.html>
+    TaskDefinitionPlacementConstraintProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-taskdefinitionplacementconstraint.html#cfn-ecs-taskdefinition-taskdefinitionplacementconstraint-expression>
+                                               expression :: (Prelude.Maybe (Value Prelude.Text)),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-taskdefinitionplacementconstraint.html#cfn-ecs-taskdefinition-taskdefinitionplacementconstraint-type>
+                                               type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTaskDefinitionPlacementConstraintProperty ::
+  Value Prelude.Text -> TaskDefinitionPlacementConstraintProperty
+mkTaskDefinitionPlacementConstraintProperty type'
+  = TaskDefinitionPlacementConstraintProperty
+      {haddock_workaround_ = (), type' = type',
+       expression = Prelude.Nothing}
+instance ToResourceProperties TaskDefinitionPlacementConstraintProperty where
+  toResourceProperties TaskDefinitionPlacementConstraintProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.TaskDefinitionPlacementConstraint",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "Expression" Prelude.<$> expression]))}
+instance JSON.ToJSON TaskDefinitionPlacementConstraintProperty where
+  toJSON TaskDefinitionPlacementConstraintProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "Expression" Prelude.<$> expression])))
+instance Property "Expression" TaskDefinitionPlacementConstraintProperty where
+  type PropertyType "Expression" TaskDefinitionPlacementConstraintProperty = Value Prelude.Text
+  set newValue TaskDefinitionPlacementConstraintProperty {..}
+    = TaskDefinitionPlacementConstraintProperty
+        {expression = Prelude.pure newValue, ..}
+instance Property "Type" TaskDefinitionPlacementConstraintProperty where
+  type PropertyType "Type" TaskDefinitionPlacementConstraintProperty = Value Prelude.Text
+  set newValue TaskDefinitionPlacementConstraintProperty {..}
+    = TaskDefinitionPlacementConstraintProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/TaskDefinitionPlacementConstraintProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/TaskDefinitionPlacementConstraintProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/TaskDefinitionPlacementConstraintProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.TaskDefinitionPlacementConstraintProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TaskDefinitionPlacementConstraintProperty :: Prelude.Type
+instance ToResourceProperties TaskDefinitionPlacementConstraintProperty
+instance Prelude.Eq TaskDefinitionPlacementConstraintProperty
+instance Prelude.Show TaskDefinitionPlacementConstraintProperty
+instance JSON.ToJSON TaskDefinitionPlacementConstraintProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/TmpfsProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/TmpfsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/TmpfsProperty.hs
@@ -0,0 +1,55 @@
+module Stratosphere.ECS.TaskDefinition.TmpfsProperty (
+        TmpfsProperty(..), mkTmpfsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TmpfsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-tmpfs.html>
+    TmpfsProperty {haddock_workaround_ :: (),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-tmpfs.html#cfn-ecs-taskdefinition-tmpfs-containerpath>
+                   containerPath :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-tmpfs.html#cfn-ecs-taskdefinition-tmpfs-mountoptions>
+                   mountOptions :: (Prelude.Maybe (ValueList Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-tmpfs.html#cfn-ecs-taskdefinition-tmpfs-size>
+                   size :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTmpfsProperty :: Value Prelude.Integer -> TmpfsProperty
+mkTmpfsProperty size
+  = TmpfsProperty
+      {haddock_workaround_ = (), size = size,
+       containerPath = Prelude.Nothing, mountOptions = Prelude.Nothing}
+instance ToResourceProperties TmpfsProperty where
+  toResourceProperties TmpfsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.Tmpfs",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Size" JSON..= size]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ContainerPath" Prelude.<$> containerPath,
+                               (JSON..=) "MountOptions" Prelude.<$> mountOptions]))}
+instance JSON.ToJSON TmpfsProperty where
+  toJSON TmpfsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Size" JSON..= size]
+              (Prelude.catMaybes
+                 [(JSON..=) "ContainerPath" Prelude.<$> containerPath,
+                  (JSON..=) "MountOptions" Prelude.<$> mountOptions])))
+instance Property "ContainerPath" TmpfsProperty where
+  type PropertyType "ContainerPath" TmpfsProperty = Value Prelude.Text
+  set newValue TmpfsProperty {..}
+    = TmpfsProperty {containerPath = Prelude.pure newValue, ..}
+instance Property "MountOptions" TmpfsProperty where
+  type PropertyType "MountOptions" TmpfsProperty = ValueList Prelude.Text
+  set newValue TmpfsProperty {..}
+    = TmpfsProperty {mountOptions = Prelude.pure newValue, ..}
+instance Property "Size" TmpfsProperty where
+  type PropertyType "Size" TmpfsProperty = Value Prelude.Integer
+  set newValue TmpfsProperty {..}
+    = TmpfsProperty {size = newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/TmpfsProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/TmpfsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/TmpfsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.TmpfsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TmpfsProperty :: Prelude.Type
+instance ToResourceProperties TmpfsProperty
+instance Prelude.Eq TmpfsProperty
+instance Prelude.Show TmpfsProperty
+instance JSON.ToJSON TmpfsProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/UlimitProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/UlimitProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/UlimitProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ECS.TaskDefinition.UlimitProperty (
+        UlimitProperty(..), mkUlimitProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data UlimitProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-ulimit.html>
+    UlimitProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-ulimit.html#cfn-ecs-taskdefinition-ulimit-hardlimit>
+                    hardLimit :: (Value Prelude.Integer),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-ulimit.html#cfn-ecs-taskdefinition-ulimit-name>
+                    name :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-ulimit.html#cfn-ecs-taskdefinition-ulimit-softlimit>
+                    softLimit :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUlimitProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Text -> Value Prelude.Integer -> UlimitProperty
+mkUlimitProperty hardLimit name softLimit
+  = UlimitProperty
+      {haddock_workaround_ = (), hardLimit = hardLimit, name = name,
+       softLimit = softLimit}
+instance ToResourceProperties UlimitProperty where
+  toResourceProperties UlimitProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.Ulimit",
+         supportsTags = Prelude.False,
+         properties = ["HardLimit" JSON..= hardLimit, "Name" JSON..= name,
+                       "SoftLimit" JSON..= softLimit]}
+instance JSON.ToJSON UlimitProperty where
+  toJSON UlimitProperty {..}
+    = JSON.object
+        ["HardLimit" JSON..= hardLimit, "Name" JSON..= name,
+         "SoftLimit" JSON..= softLimit]
+instance Property "HardLimit" UlimitProperty where
+  type PropertyType "HardLimit" UlimitProperty = Value Prelude.Integer
+  set newValue UlimitProperty {..}
+    = UlimitProperty {hardLimit = newValue, ..}
+instance Property "Name" UlimitProperty where
+  type PropertyType "Name" UlimitProperty = Value Prelude.Text
+  set newValue UlimitProperty {..}
+    = UlimitProperty {name = newValue, ..}
+instance Property "SoftLimit" UlimitProperty where
+  type PropertyType "SoftLimit" UlimitProperty = Value Prelude.Integer
+  set newValue UlimitProperty {..}
+    = UlimitProperty {softLimit = newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/UlimitProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/UlimitProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/UlimitProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.UlimitProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data UlimitProperty :: Prelude.Type
+instance ToResourceProperties UlimitProperty
+instance Prelude.Eq UlimitProperty
+instance Prelude.Show UlimitProperty
+instance JSON.ToJSON UlimitProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/VolumeFromProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/VolumeFromProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/VolumeFromProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ECS.TaskDefinition.VolumeFromProperty (
+        VolumeFromProperty(..), mkVolumeFromProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VolumeFromProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumefrom.html>
+    VolumeFromProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumefrom.html#cfn-ecs-taskdefinition-volumefrom-readonly>
+                        readOnly :: (Prelude.Maybe (Value Prelude.Bool)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumefrom.html#cfn-ecs-taskdefinition-volumefrom-sourcecontainer>
+                        sourceContainer :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVolumeFromProperty :: VolumeFromProperty
+mkVolumeFromProperty
+  = VolumeFromProperty
+      {haddock_workaround_ = (), readOnly = Prelude.Nothing,
+       sourceContainer = Prelude.Nothing}
+instance ToResourceProperties VolumeFromProperty where
+  toResourceProperties VolumeFromProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.VolumeFrom",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ReadOnly" Prelude.<$> readOnly,
+                            (JSON..=) "SourceContainer" Prelude.<$> sourceContainer])}
+instance JSON.ToJSON VolumeFromProperty where
+  toJSON VolumeFromProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ReadOnly" Prelude.<$> readOnly,
+               (JSON..=) "SourceContainer" Prelude.<$> sourceContainer]))
+instance Property "ReadOnly" VolumeFromProperty where
+  type PropertyType "ReadOnly" VolumeFromProperty = Value Prelude.Bool
+  set newValue VolumeFromProperty {..}
+    = VolumeFromProperty {readOnly = Prelude.pure newValue, ..}
+instance Property "SourceContainer" VolumeFromProperty where
+  type PropertyType "SourceContainer" VolumeFromProperty = Value Prelude.Text
+  set newValue VolumeFromProperty {..}
+    = VolumeFromProperty {sourceContainer = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/VolumeFromProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/VolumeFromProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/VolumeFromProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.VolumeFromProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VolumeFromProperty :: Prelude.Type
+instance ToResourceProperties VolumeFromProperty
+instance Prelude.Eq VolumeFromProperty
+instance Prelude.Show VolumeFromProperty
+instance JSON.ToJSON VolumeFromProperty
diff --git a/gen/Stratosphere/ECS/TaskDefinition/VolumeProperty.hs b/gen/Stratosphere/ECS/TaskDefinition/VolumeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/VolumeProperty.hs
@@ -0,0 +1,94 @@
+module Stratosphere.ECS.TaskDefinition.VolumeProperty (
+        module Exports, VolumeProperty(..), mkVolumeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.DockerVolumeConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.EFSVolumeConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.FSxWindowsFileServerVolumeConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskDefinition.HostVolumePropertiesProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VolumeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volume.html>
+    VolumeProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volume.html#cfn-ecs-taskdefinition-volume-configuredatlaunch>
+                    configuredAtLaunch :: (Prelude.Maybe (Value Prelude.Bool)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volume.html#cfn-ecs-taskdefinition-volume-dockervolumeconfiguration>
+                    dockerVolumeConfiguration :: (Prelude.Maybe DockerVolumeConfigurationProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volume.html#cfn-ecs-taskdefinition-volume-efsvolumeconfiguration>
+                    eFSVolumeConfiguration :: (Prelude.Maybe EFSVolumeConfigurationProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volume.html#cfn-ecs-taskdefinition-volume-fsxwindowsfileservervolumeconfiguration>
+                    fSxWindowsFileServerVolumeConfiguration :: (Prelude.Maybe FSxWindowsFileServerVolumeConfigurationProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volume.html#cfn-ecs-taskdefinition-volume-host>
+                    host :: (Prelude.Maybe HostVolumePropertiesProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volume.html#cfn-ecs-taskdefinition-volume-name>
+                    name :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVolumeProperty :: VolumeProperty
+mkVolumeProperty
+  = VolumeProperty
+      {haddock_workaround_ = (), configuredAtLaunch = Prelude.Nothing,
+       dockerVolumeConfiguration = Prelude.Nothing,
+       eFSVolumeConfiguration = Prelude.Nothing,
+       fSxWindowsFileServerVolumeConfiguration = Prelude.Nothing,
+       host = Prelude.Nothing, name = Prelude.Nothing}
+instance ToResourceProperties VolumeProperty where
+  toResourceProperties VolumeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskDefinition.Volume",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ConfiguredAtLaunch" Prelude.<$> configuredAtLaunch,
+                            (JSON..=) "DockerVolumeConfiguration"
+                              Prelude.<$> dockerVolumeConfiguration,
+                            (JSON..=) "EFSVolumeConfiguration"
+                              Prelude.<$> eFSVolumeConfiguration,
+                            (JSON..=) "FSxWindowsFileServerVolumeConfiguration"
+                              Prelude.<$> fSxWindowsFileServerVolumeConfiguration,
+                            (JSON..=) "Host" Prelude.<$> host,
+                            (JSON..=) "Name" Prelude.<$> name])}
+instance JSON.ToJSON VolumeProperty where
+  toJSON VolumeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ConfiguredAtLaunch" Prelude.<$> configuredAtLaunch,
+               (JSON..=) "DockerVolumeConfiguration"
+                 Prelude.<$> dockerVolumeConfiguration,
+               (JSON..=) "EFSVolumeConfiguration"
+                 Prelude.<$> eFSVolumeConfiguration,
+               (JSON..=) "FSxWindowsFileServerVolumeConfiguration"
+                 Prelude.<$> fSxWindowsFileServerVolumeConfiguration,
+               (JSON..=) "Host" Prelude.<$> host,
+               (JSON..=) "Name" Prelude.<$> name]))
+instance Property "ConfiguredAtLaunch" VolumeProperty where
+  type PropertyType "ConfiguredAtLaunch" VolumeProperty = Value Prelude.Bool
+  set newValue VolumeProperty {..}
+    = VolumeProperty {configuredAtLaunch = Prelude.pure newValue, ..}
+instance Property "DockerVolumeConfiguration" VolumeProperty where
+  type PropertyType "DockerVolumeConfiguration" VolumeProperty = DockerVolumeConfigurationProperty
+  set newValue VolumeProperty {..}
+    = VolumeProperty
+        {dockerVolumeConfiguration = Prelude.pure newValue, ..}
+instance Property "EFSVolumeConfiguration" VolumeProperty where
+  type PropertyType "EFSVolumeConfiguration" VolumeProperty = EFSVolumeConfigurationProperty
+  set newValue VolumeProperty {..}
+    = VolumeProperty
+        {eFSVolumeConfiguration = Prelude.pure newValue, ..}
+instance Property "FSxWindowsFileServerVolumeConfiguration" VolumeProperty where
+  type PropertyType "FSxWindowsFileServerVolumeConfiguration" VolumeProperty = FSxWindowsFileServerVolumeConfigurationProperty
+  set newValue VolumeProperty {..}
+    = VolumeProperty
+        {fSxWindowsFileServerVolumeConfiguration = Prelude.pure newValue,
+         ..}
+instance Property "Host" VolumeProperty where
+  type PropertyType "Host" VolumeProperty = HostVolumePropertiesProperty
+  set newValue VolumeProperty {..}
+    = VolumeProperty {host = Prelude.pure newValue, ..}
+instance Property "Name" VolumeProperty where
+  type PropertyType "Name" VolumeProperty = Value Prelude.Text
+  set newValue VolumeProperty {..}
+    = VolumeProperty {name = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskDefinition/VolumeProperty.hs-boot b/gen/Stratosphere/ECS/TaskDefinition/VolumeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskDefinition/VolumeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskDefinition.VolumeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VolumeProperty :: Prelude.Type
+instance ToResourceProperties VolumeProperty
+instance Prelude.Eq VolumeProperty
+instance Prelude.Show VolumeProperty
+instance JSON.ToJSON VolumeProperty
diff --git a/gen/Stratosphere/ECS/TaskSet.hs b/gen/Stratosphere/ECS/TaskSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskSet.hs
@@ -0,0 +1,137 @@
+module Stratosphere.ECS.TaskSet (
+        module Exports, TaskSet(..), mkTaskSet
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.TaskSet.CapacityProviderStrategyItemProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskSet.LoadBalancerProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskSet.NetworkConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskSet.ScaleProperty as Exports
+import {-# SOURCE #-} Stratosphere.ECS.TaskSet.ServiceRegistryProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TaskSet
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskset.html>
+    TaskSet {haddock_workaround_ :: (),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskset.html#cfn-ecs-taskset-capacityproviderstrategy>
+             capacityProviderStrategy :: (Prelude.Maybe [CapacityProviderStrategyItemProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskset.html#cfn-ecs-taskset-cluster>
+             cluster :: (Value Prelude.Text),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskset.html#cfn-ecs-taskset-externalid>
+             externalId :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskset.html#cfn-ecs-taskset-launchtype>
+             launchType :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskset.html#cfn-ecs-taskset-loadbalancers>
+             loadBalancers :: (Prelude.Maybe [LoadBalancerProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskset.html#cfn-ecs-taskset-networkconfiguration>
+             networkConfiguration :: (Prelude.Maybe NetworkConfigurationProperty),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskset.html#cfn-ecs-taskset-platformversion>
+             platformVersion :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskset.html#cfn-ecs-taskset-scale>
+             scale :: (Prelude.Maybe ScaleProperty),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskset.html#cfn-ecs-taskset-service>
+             service :: (Value Prelude.Text),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskset.html#cfn-ecs-taskset-serviceregistries>
+             serviceRegistries :: (Prelude.Maybe [ServiceRegistryProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskset.html#cfn-ecs-taskset-tags>
+             tags :: (Prelude.Maybe [Tag]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskset.html#cfn-ecs-taskset-taskdefinition>
+             taskDefinition :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTaskSet ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> Value Prelude.Text -> TaskSet
+mkTaskSet cluster service taskDefinition
+  = TaskSet
+      {haddock_workaround_ = (), cluster = cluster, service = service,
+       taskDefinition = taskDefinition,
+       capacityProviderStrategy = Prelude.Nothing,
+       externalId = Prelude.Nothing, launchType = Prelude.Nothing,
+       loadBalancers = Prelude.Nothing,
+       networkConfiguration = Prelude.Nothing,
+       platformVersion = Prelude.Nothing, scale = Prelude.Nothing,
+       serviceRegistries = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties TaskSet where
+  toResourceProperties TaskSet {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskSet", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Cluster" JSON..= cluster, "Service" JSON..= service,
+                            "TaskDefinition" JSON..= taskDefinition]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CapacityProviderStrategy"
+                                 Prelude.<$> capacityProviderStrategy,
+                               (JSON..=) "ExternalId" Prelude.<$> externalId,
+                               (JSON..=) "LaunchType" Prelude.<$> launchType,
+                               (JSON..=) "LoadBalancers" Prelude.<$> loadBalancers,
+                               (JSON..=) "NetworkConfiguration" Prelude.<$> networkConfiguration,
+                               (JSON..=) "PlatformVersion" Prelude.<$> platformVersion,
+                               (JSON..=) "Scale" Prelude.<$> scale,
+                               (JSON..=) "ServiceRegistries" Prelude.<$> serviceRegistries,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON TaskSet where
+  toJSON TaskSet {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Cluster" JSON..= cluster, "Service" JSON..= service,
+               "TaskDefinition" JSON..= taskDefinition]
+              (Prelude.catMaybes
+                 [(JSON..=) "CapacityProviderStrategy"
+                    Prelude.<$> capacityProviderStrategy,
+                  (JSON..=) "ExternalId" Prelude.<$> externalId,
+                  (JSON..=) "LaunchType" Prelude.<$> launchType,
+                  (JSON..=) "LoadBalancers" Prelude.<$> loadBalancers,
+                  (JSON..=) "NetworkConfiguration" Prelude.<$> networkConfiguration,
+                  (JSON..=) "PlatformVersion" Prelude.<$> platformVersion,
+                  (JSON..=) "Scale" Prelude.<$> scale,
+                  (JSON..=) "ServiceRegistries" Prelude.<$> serviceRegistries,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "CapacityProviderStrategy" TaskSet where
+  type PropertyType "CapacityProviderStrategy" TaskSet = [CapacityProviderStrategyItemProperty]
+  set newValue TaskSet {..}
+    = TaskSet {capacityProviderStrategy = Prelude.pure newValue, ..}
+instance Property "Cluster" TaskSet where
+  type PropertyType "Cluster" TaskSet = Value Prelude.Text
+  set newValue TaskSet {..} = TaskSet {cluster = newValue, ..}
+instance Property "ExternalId" TaskSet where
+  type PropertyType "ExternalId" TaskSet = Value Prelude.Text
+  set newValue TaskSet {..}
+    = TaskSet {externalId = Prelude.pure newValue, ..}
+instance Property "LaunchType" TaskSet where
+  type PropertyType "LaunchType" TaskSet = Value Prelude.Text
+  set newValue TaskSet {..}
+    = TaskSet {launchType = Prelude.pure newValue, ..}
+instance Property "LoadBalancers" TaskSet where
+  type PropertyType "LoadBalancers" TaskSet = [LoadBalancerProperty]
+  set newValue TaskSet {..}
+    = TaskSet {loadBalancers = Prelude.pure newValue, ..}
+instance Property "NetworkConfiguration" TaskSet where
+  type PropertyType "NetworkConfiguration" TaskSet = NetworkConfigurationProperty
+  set newValue TaskSet {..}
+    = TaskSet {networkConfiguration = Prelude.pure newValue, ..}
+instance Property "PlatformVersion" TaskSet where
+  type PropertyType "PlatformVersion" TaskSet = Value Prelude.Text
+  set newValue TaskSet {..}
+    = TaskSet {platformVersion = Prelude.pure newValue, ..}
+instance Property "Scale" TaskSet where
+  type PropertyType "Scale" TaskSet = ScaleProperty
+  set newValue TaskSet {..}
+    = TaskSet {scale = Prelude.pure newValue, ..}
+instance Property "Service" TaskSet where
+  type PropertyType "Service" TaskSet = Value Prelude.Text
+  set newValue TaskSet {..} = TaskSet {service = newValue, ..}
+instance Property "ServiceRegistries" TaskSet where
+  type PropertyType "ServiceRegistries" TaskSet = [ServiceRegistryProperty]
+  set newValue TaskSet {..}
+    = TaskSet {serviceRegistries = Prelude.pure newValue, ..}
+instance Property "Tags" TaskSet where
+  type PropertyType "Tags" TaskSet = [Tag]
+  set newValue TaskSet {..}
+    = TaskSet {tags = Prelude.pure newValue, ..}
+instance Property "TaskDefinition" TaskSet where
+  type PropertyType "TaskDefinition" TaskSet = Value Prelude.Text
+  set newValue TaskSet {..} = TaskSet {taskDefinition = newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskSet/AwsVpcConfigurationProperty.hs b/gen/Stratosphere/ECS/TaskSet/AwsVpcConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskSet/AwsVpcConfigurationProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.ECS.TaskSet.AwsVpcConfigurationProperty (
+        AwsVpcConfigurationProperty(..), mkAwsVpcConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AwsVpcConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-awsvpcconfiguration.html>
+    AwsVpcConfigurationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-awsvpcconfiguration.html#cfn-ecs-taskset-awsvpcconfiguration-assignpublicip>
+                                 assignPublicIp :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-awsvpcconfiguration.html#cfn-ecs-taskset-awsvpcconfiguration-securitygroups>
+                                 securityGroups :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-awsvpcconfiguration.html#cfn-ecs-taskset-awsvpcconfiguration-subnets>
+                                 subnets :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAwsVpcConfigurationProperty ::
+  ValueList Prelude.Text -> AwsVpcConfigurationProperty
+mkAwsVpcConfigurationProperty subnets
+  = AwsVpcConfigurationProperty
+      {haddock_workaround_ = (), subnets = subnets,
+       assignPublicIp = Prelude.Nothing, securityGroups = Prelude.Nothing}
+instance ToResourceProperties AwsVpcConfigurationProperty where
+  toResourceProperties AwsVpcConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskSet.AwsVpcConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Subnets" JSON..= subnets]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AssignPublicIp" Prelude.<$> assignPublicIp,
+                               (JSON..=) "SecurityGroups" Prelude.<$> securityGroups]))}
+instance JSON.ToJSON AwsVpcConfigurationProperty where
+  toJSON AwsVpcConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Subnets" JSON..= subnets]
+              (Prelude.catMaybes
+                 [(JSON..=) "AssignPublicIp" Prelude.<$> assignPublicIp,
+                  (JSON..=) "SecurityGroups" Prelude.<$> securityGroups])))
+instance Property "AssignPublicIp" AwsVpcConfigurationProperty where
+  type PropertyType "AssignPublicIp" AwsVpcConfigurationProperty = Value Prelude.Text
+  set newValue AwsVpcConfigurationProperty {..}
+    = AwsVpcConfigurationProperty
+        {assignPublicIp = Prelude.pure newValue, ..}
+instance Property "SecurityGroups" AwsVpcConfigurationProperty where
+  type PropertyType "SecurityGroups" AwsVpcConfigurationProperty = ValueList Prelude.Text
+  set newValue AwsVpcConfigurationProperty {..}
+    = AwsVpcConfigurationProperty
+        {securityGroups = Prelude.pure newValue, ..}
+instance Property "Subnets" AwsVpcConfigurationProperty where
+  type PropertyType "Subnets" AwsVpcConfigurationProperty = ValueList Prelude.Text
+  set newValue AwsVpcConfigurationProperty {..}
+    = AwsVpcConfigurationProperty {subnets = newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskSet/AwsVpcConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/TaskSet/AwsVpcConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskSet/AwsVpcConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskSet.AwsVpcConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AwsVpcConfigurationProperty :: Prelude.Type
+instance ToResourceProperties AwsVpcConfigurationProperty
+instance Prelude.Eq AwsVpcConfigurationProperty
+instance Prelude.Show AwsVpcConfigurationProperty
+instance JSON.ToJSON AwsVpcConfigurationProperty
diff --git a/gen/Stratosphere/ECS/TaskSet/CapacityProviderStrategyItemProperty.hs b/gen/Stratosphere/ECS/TaskSet/CapacityProviderStrategyItemProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskSet/CapacityProviderStrategyItemProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.ECS.TaskSet.CapacityProviderStrategyItemProperty (
+        CapacityProviderStrategyItemProperty(..),
+        mkCapacityProviderStrategyItemProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CapacityProviderStrategyItemProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-capacityproviderstrategyitem.html>
+    CapacityProviderStrategyItemProperty {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-capacityproviderstrategyitem.html#cfn-ecs-taskset-capacityproviderstrategyitem-base>
+                                          base :: (Prelude.Maybe (Value Prelude.Integer)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-capacityproviderstrategyitem.html#cfn-ecs-taskset-capacityproviderstrategyitem-capacityprovider>
+                                          capacityProvider :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-capacityproviderstrategyitem.html#cfn-ecs-taskset-capacityproviderstrategyitem-weight>
+                                          weight :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityProviderStrategyItemProperty ::
+  CapacityProviderStrategyItemProperty
+mkCapacityProviderStrategyItemProperty
+  = CapacityProviderStrategyItemProperty
+      {haddock_workaround_ = (), base = Prelude.Nothing,
+       capacityProvider = Prelude.Nothing, weight = Prelude.Nothing}
+instance ToResourceProperties CapacityProviderStrategyItemProperty where
+  toResourceProperties CapacityProviderStrategyItemProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskSet.CapacityProviderStrategyItem",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Base" Prelude.<$> base,
+                            (JSON..=) "CapacityProvider" Prelude.<$> capacityProvider,
+                            (JSON..=) "Weight" Prelude.<$> weight])}
+instance JSON.ToJSON CapacityProviderStrategyItemProperty where
+  toJSON CapacityProviderStrategyItemProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Base" Prelude.<$> base,
+               (JSON..=) "CapacityProvider" Prelude.<$> capacityProvider,
+               (JSON..=) "Weight" Prelude.<$> weight]))
+instance Property "Base" CapacityProviderStrategyItemProperty where
+  type PropertyType "Base" CapacityProviderStrategyItemProperty = Value Prelude.Integer
+  set newValue CapacityProviderStrategyItemProperty {..}
+    = CapacityProviderStrategyItemProperty
+        {base = Prelude.pure newValue, ..}
+instance Property "CapacityProvider" CapacityProviderStrategyItemProperty where
+  type PropertyType "CapacityProvider" CapacityProviderStrategyItemProperty = Value Prelude.Text
+  set newValue CapacityProviderStrategyItemProperty {..}
+    = CapacityProviderStrategyItemProperty
+        {capacityProvider = Prelude.pure newValue, ..}
+instance Property "Weight" CapacityProviderStrategyItemProperty where
+  type PropertyType "Weight" CapacityProviderStrategyItemProperty = Value Prelude.Integer
+  set newValue CapacityProviderStrategyItemProperty {..}
+    = CapacityProviderStrategyItemProperty
+        {weight = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskSet/CapacityProviderStrategyItemProperty.hs-boot b/gen/Stratosphere/ECS/TaskSet/CapacityProviderStrategyItemProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskSet/CapacityProviderStrategyItemProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskSet.CapacityProviderStrategyItemProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CapacityProviderStrategyItemProperty :: Prelude.Type
+instance ToResourceProperties CapacityProviderStrategyItemProperty
+instance Prelude.Eq CapacityProviderStrategyItemProperty
+instance Prelude.Show CapacityProviderStrategyItemProperty
+instance JSON.ToJSON CapacityProviderStrategyItemProperty
diff --git a/gen/Stratosphere/ECS/TaskSet/LoadBalancerProperty.hs b/gen/Stratosphere/ECS/TaskSet/LoadBalancerProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskSet/LoadBalancerProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.ECS.TaskSet.LoadBalancerProperty (
+        LoadBalancerProperty(..), mkLoadBalancerProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LoadBalancerProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-loadbalancer.html>
+    LoadBalancerProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-loadbalancer.html#cfn-ecs-taskset-loadbalancer-containername>
+                          containerName :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-loadbalancer.html#cfn-ecs-taskset-loadbalancer-containerport>
+                          containerPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-loadbalancer.html#cfn-ecs-taskset-loadbalancer-targetgrouparn>
+                          targetGroupArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLoadBalancerProperty :: LoadBalancerProperty
+mkLoadBalancerProperty
+  = LoadBalancerProperty
+      {haddock_workaround_ = (), containerName = Prelude.Nothing,
+       containerPort = Prelude.Nothing, targetGroupArn = Prelude.Nothing}
+instance ToResourceProperties LoadBalancerProperty where
+  toResourceProperties LoadBalancerProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskSet.LoadBalancer",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ContainerName" Prelude.<$> containerName,
+                            (JSON..=) "ContainerPort" Prelude.<$> containerPort,
+                            (JSON..=) "TargetGroupArn" Prelude.<$> targetGroupArn])}
+instance JSON.ToJSON LoadBalancerProperty where
+  toJSON LoadBalancerProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ContainerName" Prelude.<$> containerName,
+               (JSON..=) "ContainerPort" Prelude.<$> containerPort,
+               (JSON..=) "TargetGroupArn" Prelude.<$> targetGroupArn]))
+instance Property "ContainerName" LoadBalancerProperty where
+  type PropertyType "ContainerName" LoadBalancerProperty = Value Prelude.Text
+  set newValue LoadBalancerProperty {..}
+    = LoadBalancerProperty {containerName = Prelude.pure newValue, ..}
+instance Property "ContainerPort" LoadBalancerProperty where
+  type PropertyType "ContainerPort" LoadBalancerProperty = Value Prelude.Integer
+  set newValue LoadBalancerProperty {..}
+    = LoadBalancerProperty {containerPort = Prelude.pure newValue, ..}
+instance Property "TargetGroupArn" LoadBalancerProperty where
+  type PropertyType "TargetGroupArn" LoadBalancerProperty = Value Prelude.Text
+  set newValue LoadBalancerProperty {..}
+    = LoadBalancerProperty {targetGroupArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskSet/LoadBalancerProperty.hs-boot b/gen/Stratosphere/ECS/TaskSet/LoadBalancerProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskSet/LoadBalancerProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskSet.LoadBalancerProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LoadBalancerProperty :: Prelude.Type
+instance ToResourceProperties LoadBalancerProperty
+instance Prelude.Eq LoadBalancerProperty
+instance Prelude.Show LoadBalancerProperty
+instance JSON.ToJSON LoadBalancerProperty
diff --git a/gen/Stratosphere/ECS/TaskSet/NetworkConfigurationProperty.hs b/gen/Stratosphere/ECS/TaskSet/NetworkConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskSet/NetworkConfigurationProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.ECS.TaskSet.NetworkConfigurationProperty (
+        module Exports, NetworkConfigurationProperty(..),
+        mkNetworkConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ECS.TaskSet.AwsVpcConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+data NetworkConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-networkconfiguration.html>
+    NetworkConfigurationProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-networkconfiguration.html#cfn-ecs-taskset-networkconfiguration-awsvpcconfiguration>
+                                  awsVpcConfiguration :: (Prelude.Maybe AwsVpcConfigurationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkConfigurationProperty :: NetworkConfigurationProperty
+mkNetworkConfigurationProperty
+  = NetworkConfigurationProperty
+      {haddock_workaround_ = (), awsVpcConfiguration = Prelude.Nothing}
+instance ToResourceProperties NetworkConfigurationProperty where
+  toResourceProperties NetworkConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskSet.NetworkConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AwsVpcConfiguration" Prelude.<$> awsVpcConfiguration])}
+instance JSON.ToJSON NetworkConfigurationProperty where
+  toJSON NetworkConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AwsVpcConfiguration" Prelude.<$> awsVpcConfiguration]))
+instance Property "AwsVpcConfiguration" NetworkConfigurationProperty where
+  type PropertyType "AwsVpcConfiguration" NetworkConfigurationProperty = AwsVpcConfigurationProperty
+  set newValue NetworkConfigurationProperty {..}
+    = NetworkConfigurationProperty
+        {awsVpcConfiguration = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskSet/NetworkConfigurationProperty.hs-boot b/gen/Stratosphere/ECS/TaskSet/NetworkConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskSet/NetworkConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskSet.NetworkConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NetworkConfigurationProperty :: Prelude.Type
+instance ToResourceProperties NetworkConfigurationProperty
+instance Prelude.Eq NetworkConfigurationProperty
+instance Prelude.Show NetworkConfigurationProperty
+instance JSON.ToJSON NetworkConfigurationProperty
diff --git a/gen/Stratosphere/ECS/TaskSet/ScaleProperty.hs b/gen/Stratosphere/ECS/TaskSet/ScaleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskSet/ScaleProperty.hs
@@ -0,0 +1,44 @@
+module Stratosphere.ECS.TaskSet.ScaleProperty (
+        ScaleProperty(..), mkScaleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ScaleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-scale.html>
+    ScaleProperty {haddock_workaround_ :: (),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-scale.html#cfn-ecs-taskset-scale-unit>
+                   unit :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-scale.html#cfn-ecs-taskset-scale-value>
+                   value :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScaleProperty :: ScaleProperty
+mkScaleProperty
+  = ScaleProperty
+      {haddock_workaround_ = (), unit = Prelude.Nothing,
+       value = Prelude.Nothing}
+instance ToResourceProperties ScaleProperty where
+  toResourceProperties ScaleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskSet.Scale", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Unit" Prelude.<$> unit,
+                            (JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON ScaleProperty where
+  toJSON ScaleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Unit" Prelude.<$> unit,
+               (JSON..=) "Value" Prelude.<$> value]))
+instance Property "Unit" ScaleProperty where
+  type PropertyType "Unit" ScaleProperty = Value Prelude.Text
+  set newValue ScaleProperty {..}
+    = ScaleProperty {unit = Prelude.pure newValue, ..}
+instance Property "Value" ScaleProperty where
+  type PropertyType "Value" ScaleProperty = Value Prelude.Double
+  set newValue ScaleProperty {..}
+    = ScaleProperty {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskSet/ScaleProperty.hs-boot b/gen/Stratosphere/ECS/TaskSet/ScaleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskSet/ScaleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskSet.ScaleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScaleProperty :: Prelude.Type
+instance ToResourceProperties ScaleProperty
+instance Prelude.Eq ScaleProperty
+instance Prelude.Show ScaleProperty
+instance JSON.ToJSON ScaleProperty
diff --git a/gen/Stratosphere/ECS/TaskSet/ServiceRegistryProperty.hs b/gen/Stratosphere/ECS/TaskSet/ServiceRegistryProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskSet/ServiceRegistryProperty.hs
@@ -0,0 +1,64 @@
+module Stratosphere.ECS.TaskSet.ServiceRegistryProperty (
+        ServiceRegistryProperty(..), mkServiceRegistryProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ServiceRegistryProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-serviceregistry.html>
+    ServiceRegistryProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-serviceregistry.html#cfn-ecs-taskset-serviceregistry-containername>
+                             containerName :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-serviceregistry.html#cfn-ecs-taskset-serviceregistry-containerport>
+                             containerPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-serviceregistry.html#cfn-ecs-taskset-serviceregistry-port>
+                             port :: (Prelude.Maybe (Value Prelude.Integer)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-serviceregistry.html#cfn-ecs-taskset-serviceregistry-registryarn>
+                             registryArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkServiceRegistryProperty :: ServiceRegistryProperty
+mkServiceRegistryProperty
+  = ServiceRegistryProperty
+      {haddock_workaround_ = (), containerName = Prelude.Nothing,
+       containerPort = Prelude.Nothing, port = Prelude.Nothing,
+       registryArn = Prelude.Nothing}
+instance ToResourceProperties ServiceRegistryProperty where
+  toResourceProperties ServiceRegistryProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ECS::TaskSet.ServiceRegistry",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ContainerName" Prelude.<$> containerName,
+                            (JSON..=) "ContainerPort" Prelude.<$> containerPort,
+                            (JSON..=) "Port" Prelude.<$> port,
+                            (JSON..=) "RegistryArn" Prelude.<$> registryArn])}
+instance JSON.ToJSON ServiceRegistryProperty where
+  toJSON ServiceRegistryProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ContainerName" Prelude.<$> containerName,
+               (JSON..=) "ContainerPort" Prelude.<$> containerPort,
+               (JSON..=) "Port" Prelude.<$> port,
+               (JSON..=) "RegistryArn" Prelude.<$> registryArn]))
+instance Property "ContainerName" ServiceRegistryProperty where
+  type PropertyType "ContainerName" ServiceRegistryProperty = Value Prelude.Text
+  set newValue ServiceRegistryProperty {..}
+    = ServiceRegistryProperty
+        {containerName = Prelude.pure newValue, ..}
+instance Property "ContainerPort" ServiceRegistryProperty where
+  type PropertyType "ContainerPort" ServiceRegistryProperty = Value Prelude.Integer
+  set newValue ServiceRegistryProperty {..}
+    = ServiceRegistryProperty
+        {containerPort = Prelude.pure newValue, ..}
+instance Property "Port" ServiceRegistryProperty where
+  type PropertyType "Port" ServiceRegistryProperty = Value Prelude.Integer
+  set newValue ServiceRegistryProperty {..}
+    = ServiceRegistryProperty {port = Prelude.pure newValue, ..}
+instance Property "RegistryArn" ServiceRegistryProperty where
+  type PropertyType "RegistryArn" ServiceRegistryProperty = Value Prelude.Text
+  set newValue ServiceRegistryProperty {..}
+    = ServiceRegistryProperty {registryArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ECS/TaskSet/ServiceRegistryProperty.hs-boot b/gen/Stratosphere/ECS/TaskSet/ServiceRegistryProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ECS/TaskSet/ServiceRegistryProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ECS.TaskSet.ServiceRegistryProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ServiceRegistryProperty :: Prelude.Type
+instance ToResourceProperties ServiceRegistryProperty
+instance Prelude.Eq ServiceRegistryProperty
+instance Prelude.Show ServiceRegistryProperty
+instance JSON.ToJSON ServiceRegistryProperty
diff --git a/stratosphere-ecs.cabal b/stratosphere-ecs.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-ecs.cabal
@@ -0,0 +1,173 @@
+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-ecs
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS ECS.
+description:    Integration into stratosphere to generate resources and properties for AWS ECS
+category:       AWS, Cloud, ECS
+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.ECS.CapacityProvider
+      Stratosphere.ECS.CapacityProvider.AcceleratorCountRequestProperty
+      Stratosphere.ECS.CapacityProvider.AcceleratorTotalMemoryMiBRequestProperty
+      Stratosphere.ECS.CapacityProvider.AutoScalingGroupProviderProperty
+      Stratosphere.ECS.CapacityProvider.BaselineEbsBandwidthMbpsRequestProperty
+      Stratosphere.ECS.CapacityProvider.InstanceLaunchTemplateProperty
+      Stratosphere.ECS.CapacityProvider.InstanceRequirementsRequestProperty
+      Stratosphere.ECS.CapacityProvider.ManagedInstancesNetworkConfigurationProperty
+      Stratosphere.ECS.CapacityProvider.ManagedInstancesProviderProperty
+      Stratosphere.ECS.CapacityProvider.ManagedInstancesStorageConfigurationProperty
+      Stratosphere.ECS.CapacityProvider.ManagedScalingProperty
+      Stratosphere.ECS.CapacityProvider.MemoryGiBPerVCpuRequestProperty
+      Stratosphere.ECS.CapacityProvider.MemoryMiBRequestProperty
+      Stratosphere.ECS.CapacityProvider.NetworkBandwidthGbpsRequestProperty
+      Stratosphere.ECS.CapacityProvider.NetworkInterfaceCountRequestProperty
+      Stratosphere.ECS.CapacityProvider.TotalLocalStorageGBRequestProperty
+      Stratosphere.ECS.CapacityProvider.VCpuCountRangeRequestProperty
+      Stratosphere.ECS.Cluster
+      Stratosphere.ECS.Cluster.CapacityProviderStrategyItemProperty
+      Stratosphere.ECS.Cluster.ClusterConfigurationProperty
+      Stratosphere.ECS.Cluster.ClusterSettingsProperty
+      Stratosphere.ECS.Cluster.ExecuteCommandConfigurationProperty
+      Stratosphere.ECS.Cluster.ExecuteCommandLogConfigurationProperty
+      Stratosphere.ECS.Cluster.ManagedStorageConfigurationProperty
+      Stratosphere.ECS.Cluster.ServiceConnectDefaultsProperty
+      Stratosphere.ECS.ClusterCapacityProviderAssociations
+      Stratosphere.ECS.ClusterCapacityProviderAssociations.CapacityProviderStrategyProperty
+      Stratosphere.ECS.PrimaryTaskSet
+      Stratosphere.ECS.Service
+      Stratosphere.ECS.Service.AdvancedConfigurationProperty
+      Stratosphere.ECS.Service.AwsVpcConfigurationProperty
+      Stratosphere.ECS.Service.CanaryConfigurationProperty
+      Stratosphere.ECS.Service.CapacityProviderStrategyItemProperty
+      Stratosphere.ECS.Service.DeploymentAlarmsProperty
+      Stratosphere.ECS.Service.DeploymentCircuitBreakerProperty
+      Stratosphere.ECS.Service.DeploymentConfigurationProperty
+      Stratosphere.ECS.Service.DeploymentControllerProperty
+      Stratosphere.ECS.Service.DeploymentLifecycleHookProperty
+      Stratosphere.ECS.Service.EBSTagSpecificationProperty
+      Stratosphere.ECS.Service.ForceNewDeploymentProperty
+      Stratosphere.ECS.Service.LinearConfigurationProperty
+      Stratosphere.ECS.Service.LoadBalancerProperty
+      Stratosphere.ECS.Service.LogConfigurationProperty
+      Stratosphere.ECS.Service.NetworkConfigurationProperty
+      Stratosphere.ECS.Service.PlacementConstraintProperty
+      Stratosphere.ECS.Service.PlacementStrategyProperty
+      Stratosphere.ECS.Service.SecretProperty
+      Stratosphere.ECS.Service.ServiceConnectAccessLogConfigurationProperty
+      Stratosphere.ECS.Service.ServiceConnectClientAliasProperty
+      Stratosphere.ECS.Service.ServiceConnectConfigurationProperty
+      Stratosphere.ECS.Service.ServiceConnectServiceProperty
+      Stratosphere.ECS.Service.ServiceConnectTestTrafficRulesHeaderProperty
+      Stratosphere.ECS.Service.ServiceConnectTestTrafficRulesHeaderValueProperty
+      Stratosphere.ECS.Service.ServiceConnectTestTrafficRulesProperty
+      Stratosphere.ECS.Service.ServiceConnectTlsCertificateAuthorityProperty
+      Stratosphere.ECS.Service.ServiceConnectTlsConfigurationProperty
+      Stratosphere.ECS.Service.ServiceManagedEBSVolumeConfigurationProperty
+      Stratosphere.ECS.Service.ServiceRegistryProperty
+      Stratosphere.ECS.Service.ServiceVolumeConfigurationProperty
+      Stratosphere.ECS.Service.TimeoutConfigurationProperty
+      Stratosphere.ECS.Service.VpcLatticeConfigurationProperty
+      Stratosphere.ECS.TaskDefinition
+      Stratosphere.ECS.TaskDefinition.AuthorizationConfigProperty
+      Stratosphere.ECS.TaskDefinition.ContainerDefinitionProperty
+      Stratosphere.ECS.TaskDefinition.ContainerDependencyProperty
+      Stratosphere.ECS.TaskDefinition.DeviceProperty
+      Stratosphere.ECS.TaskDefinition.DockerVolumeConfigurationProperty
+      Stratosphere.ECS.TaskDefinition.EFSVolumeConfigurationProperty
+      Stratosphere.ECS.TaskDefinition.EnvironmentFileProperty
+      Stratosphere.ECS.TaskDefinition.EphemeralStorageProperty
+      Stratosphere.ECS.TaskDefinition.FirelensConfigurationProperty
+      Stratosphere.ECS.TaskDefinition.FSxAuthorizationConfigProperty
+      Stratosphere.ECS.TaskDefinition.FSxWindowsFileServerVolumeConfigurationProperty
+      Stratosphere.ECS.TaskDefinition.HealthCheckProperty
+      Stratosphere.ECS.TaskDefinition.HostEntryProperty
+      Stratosphere.ECS.TaskDefinition.HostVolumePropertiesProperty
+      Stratosphere.ECS.TaskDefinition.KernelCapabilitiesProperty
+      Stratosphere.ECS.TaskDefinition.KeyValuePairProperty
+      Stratosphere.ECS.TaskDefinition.LinuxParametersProperty
+      Stratosphere.ECS.TaskDefinition.LogConfigurationProperty
+      Stratosphere.ECS.TaskDefinition.MountPointProperty
+      Stratosphere.ECS.TaskDefinition.PortMappingProperty
+      Stratosphere.ECS.TaskDefinition.ProxyConfigurationProperty
+      Stratosphere.ECS.TaskDefinition.RepositoryCredentialsProperty
+      Stratosphere.ECS.TaskDefinition.ResourceRequirementProperty
+      Stratosphere.ECS.TaskDefinition.RestartPolicyProperty
+      Stratosphere.ECS.TaskDefinition.RuntimePlatformProperty
+      Stratosphere.ECS.TaskDefinition.SecretProperty
+      Stratosphere.ECS.TaskDefinition.SystemControlProperty
+      Stratosphere.ECS.TaskDefinition.TaskDefinitionPlacementConstraintProperty
+      Stratosphere.ECS.TaskDefinition.TmpfsProperty
+      Stratosphere.ECS.TaskDefinition.UlimitProperty
+      Stratosphere.ECS.TaskDefinition.VolumeFromProperty
+      Stratosphere.ECS.TaskDefinition.VolumeProperty
+      Stratosphere.ECS.TaskSet
+      Stratosphere.ECS.TaskSet.AwsVpcConfigurationProperty
+      Stratosphere.ECS.TaskSet.CapacityProviderStrategyItemProperty
+      Stratosphere.ECS.TaskSet.LoadBalancerProperty
+      Stratosphere.ECS.TaskSet.NetworkConfigurationProperty
+      Stratosphere.ECS.TaskSet.ScaleProperty
+      Stratosphere.ECS.TaskSet.ServiceRegistryProperty
+  other-modules:
+      Paths_stratosphere_ecs
+  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
