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/ApplicationSignals/Discovery.hs b/gen/Stratosphere/ApplicationSignals/Discovery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/Discovery.hs
@@ -0,0 +1,19 @@
+module Stratosphere.ApplicationSignals.Discovery (
+        Discovery(..), mkDiscovery
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data Discovery
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationsignals-discovery.html>
+    Discovery {haddock_workaround_ :: ()}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDiscovery :: Discovery
+mkDiscovery = Discovery {haddock_workaround_ = ()}
+instance ToResourceProperties Discovery where
+  toResourceProperties Discovery {}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::Discovery",
+         supportsTags = Prelude.False, properties = []}
+instance JSON.ToJSON Discovery where
+  toJSON Discovery {} = JSON.object []
diff --git a/gen/Stratosphere/ApplicationSignals/GroupingConfiguration.hs b/gen/Stratosphere/ApplicationSignals/GroupingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/GroupingConfiguration.hs
@@ -0,0 +1,37 @@
+module Stratosphere.ApplicationSignals.GroupingConfiguration (
+        module Exports, GroupingConfiguration(..), mkGroupingConfiguration
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.GroupingConfiguration.GroupingAttributeDefinitionProperty as Exports
+import Stratosphere.ResourceProperties
+data GroupingConfiguration
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationsignals-groupingconfiguration.html>
+    GroupingConfiguration {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationsignals-groupingconfiguration.html#cfn-applicationsignals-groupingconfiguration-groupingattributedefinitions>
+                           groupingAttributeDefinitions :: [GroupingAttributeDefinitionProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGroupingConfiguration ::
+  [GroupingAttributeDefinitionProperty] -> GroupingConfiguration
+mkGroupingConfiguration groupingAttributeDefinitions
+  = GroupingConfiguration
+      {haddock_workaround_ = (),
+       groupingAttributeDefinitions = groupingAttributeDefinitions}
+instance ToResourceProperties GroupingConfiguration where
+  toResourceProperties GroupingConfiguration {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::GroupingConfiguration",
+         supportsTags = Prelude.False,
+         properties = ["GroupingAttributeDefinitions"
+                         JSON..= groupingAttributeDefinitions]}
+instance JSON.ToJSON GroupingConfiguration where
+  toJSON GroupingConfiguration {..}
+    = JSON.object
+        ["GroupingAttributeDefinitions"
+           JSON..= groupingAttributeDefinitions]
+instance Property "GroupingAttributeDefinitions" GroupingConfiguration where
+  type PropertyType "GroupingAttributeDefinitions" GroupingConfiguration = [GroupingAttributeDefinitionProperty]
+  set newValue GroupingConfiguration {..}
+    = GroupingConfiguration
+        {groupingAttributeDefinitions = newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/GroupingConfiguration/GroupingAttributeDefinitionProperty.hs b/gen/Stratosphere/ApplicationSignals/GroupingConfiguration/GroupingAttributeDefinitionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/GroupingConfiguration/GroupingAttributeDefinitionProperty.hs
@@ -0,0 +1,65 @@
+module Stratosphere.ApplicationSignals.GroupingConfiguration.GroupingAttributeDefinitionProperty (
+        GroupingAttributeDefinitionProperty(..),
+        mkGroupingAttributeDefinitionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data GroupingAttributeDefinitionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-groupingconfiguration-groupingattributedefinition.html>
+    GroupingAttributeDefinitionProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-groupingconfiguration-groupingattributedefinition.html#cfn-applicationsignals-groupingconfiguration-groupingattributedefinition-defaultgroupingvalue>
+                                         defaultGroupingValue :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-groupingconfiguration-groupingattributedefinition.html#cfn-applicationsignals-groupingconfiguration-groupingattributedefinition-groupingname>
+                                         groupingName :: (Value Prelude.Text),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-groupingconfiguration-groupingattributedefinition.html#cfn-applicationsignals-groupingconfiguration-groupingattributedefinition-groupingsourcekeys>
+                                         groupingSourceKeys :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGroupingAttributeDefinitionProperty ::
+  Value Prelude.Text
+  -> ValueList Prelude.Text -> GroupingAttributeDefinitionProperty
+mkGroupingAttributeDefinitionProperty
+  groupingName
+  groupingSourceKeys
+  = GroupingAttributeDefinitionProperty
+      {haddock_workaround_ = (), groupingName = groupingName,
+       groupingSourceKeys = groupingSourceKeys,
+       defaultGroupingValue = Prelude.Nothing}
+instance ToResourceProperties GroupingAttributeDefinitionProperty where
+  toResourceProperties GroupingAttributeDefinitionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::GroupingConfiguration.GroupingAttributeDefinition",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["GroupingName" JSON..= groupingName,
+                            "GroupingSourceKeys" JSON..= groupingSourceKeys]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DefaultGroupingValue"
+                                 Prelude.<$> defaultGroupingValue]))}
+instance JSON.ToJSON GroupingAttributeDefinitionProperty where
+  toJSON GroupingAttributeDefinitionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["GroupingName" JSON..= groupingName,
+               "GroupingSourceKeys" JSON..= groupingSourceKeys]
+              (Prelude.catMaybes
+                 [(JSON..=) "DefaultGroupingValue"
+                    Prelude.<$> defaultGroupingValue])))
+instance Property "DefaultGroupingValue" GroupingAttributeDefinitionProperty where
+  type PropertyType "DefaultGroupingValue" GroupingAttributeDefinitionProperty = Value Prelude.Text
+  set newValue GroupingAttributeDefinitionProperty {..}
+    = GroupingAttributeDefinitionProperty
+        {defaultGroupingValue = Prelude.pure newValue, ..}
+instance Property "GroupingName" GroupingAttributeDefinitionProperty where
+  type PropertyType "GroupingName" GroupingAttributeDefinitionProperty = Value Prelude.Text
+  set newValue GroupingAttributeDefinitionProperty {..}
+    = GroupingAttributeDefinitionProperty {groupingName = newValue, ..}
+instance Property "GroupingSourceKeys" GroupingAttributeDefinitionProperty where
+  type PropertyType "GroupingSourceKeys" GroupingAttributeDefinitionProperty = ValueList Prelude.Text
+  set newValue GroupingAttributeDefinitionProperty {..}
+    = GroupingAttributeDefinitionProperty
+        {groupingSourceKeys = newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/GroupingConfiguration/GroupingAttributeDefinitionProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/GroupingConfiguration/GroupingAttributeDefinitionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/GroupingConfiguration/GroupingAttributeDefinitionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.GroupingConfiguration.GroupingAttributeDefinitionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data GroupingAttributeDefinitionProperty :: Prelude.Type
+instance ToResourceProperties GroupingAttributeDefinitionProperty
+instance Prelude.Eq GroupingAttributeDefinitionProperty
+instance Prelude.Show GroupingAttributeDefinitionProperty
+instance JSON.ToJSON GroupingAttributeDefinitionProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective.hs
@@ -0,0 +1,110 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective (
+        module Exports, ServiceLevelObjective(..), mkServiceLevelObjective
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.BurnRateConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.ExclusionWindowProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.GoalProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.RequestBasedSliProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.SliProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data ServiceLevelObjective
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationsignals-servicelevelobjective.html>
+    ServiceLevelObjective {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationsignals-servicelevelobjective.html#cfn-applicationsignals-servicelevelobjective-burnrateconfigurations>
+                           burnRateConfigurations :: (Prelude.Maybe [BurnRateConfigurationProperty]),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationsignals-servicelevelobjective.html#cfn-applicationsignals-servicelevelobjective-description>
+                           description :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationsignals-servicelevelobjective.html#cfn-applicationsignals-servicelevelobjective-exclusionwindows>
+                           exclusionWindows :: (Prelude.Maybe [ExclusionWindowProperty]),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationsignals-servicelevelobjective.html#cfn-applicationsignals-servicelevelobjective-goal>
+                           goal :: (Prelude.Maybe GoalProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationsignals-servicelevelobjective.html#cfn-applicationsignals-servicelevelobjective-name>
+                           name :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationsignals-servicelevelobjective.html#cfn-applicationsignals-servicelevelobjective-requestbasedsli>
+                           requestBasedSli :: (Prelude.Maybe RequestBasedSliProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationsignals-servicelevelobjective.html#cfn-applicationsignals-servicelevelobjective-sli>
+                           sli :: (Prelude.Maybe SliProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationsignals-servicelevelobjective.html#cfn-applicationsignals-servicelevelobjective-tags>
+                           tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkServiceLevelObjective ::
+  Value Prelude.Text -> ServiceLevelObjective
+mkServiceLevelObjective name
+  = ServiceLevelObjective
+      {haddock_workaround_ = (), name = name,
+       burnRateConfigurations = Prelude.Nothing,
+       description = Prelude.Nothing, exclusionWindows = Prelude.Nothing,
+       goal = Prelude.Nothing, requestBasedSli = Prelude.Nothing,
+       sli = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties ServiceLevelObjective where
+  toResourceProperties ServiceLevelObjective {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "BurnRateConfigurations"
+                                 Prelude.<$> burnRateConfigurations,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "ExclusionWindows" Prelude.<$> exclusionWindows,
+                               (JSON..=) "Goal" Prelude.<$> goal,
+                               (JSON..=) "RequestBasedSli" Prelude.<$> requestBasedSli,
+                               (JSON..=) "Sli" Prelude.<$> sli,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON ServiceLevelObjective where
+  toJSON ServiceLevelObjective {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "BurnRateConfigurations"
+                    Prelude.<$> burnRateConfigurations,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "ExclusionWindows" Prelude.<$> exclusionWindows,
+                  (JSON..=) "Goal" Prelude.<$> goal,
+                  (JSON..=) "RequestBasedSli" Prelude.<$> requestBasedSli,
+                  (JSON..=) "Sli" Prelude.<$> sli,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "BurnRateConfigurations" ServiceLevelObjective where
+  type PropertyType "BurnRateConfigurations" ServiceLevelObjective = [BurnRateConfigurationProperty]
+  set newValue ServiceLevelObjective {..}
+    = ServiceLevelObjective
+        {burnRateConfigurations = Prelude.pure newValue, ..}
+instance Property "Description" ServiceLevelObjective where
+  type PropertyType "Description" ServiceLevelObjective = Value Prelude.Text
+  set newValue ServiceLevelObjective {..}
+    = ServiceLevelObjective {description = Prelude.pure newValue, ..}
+instance Property "ExclusionWindows" ServiceLevelObjective where
+  type PropertyType "ExclusionWindows" ServiceLevelObjective = [ExclusionWindowProperty]
+  set newValue ServiceLevelObjective {..}
+    = ServiceLevelObjective
+        {exclusionWindows = Prelude.pure newValue, ..}
+instance Property "Goal" ServiceLevelObjective where
+  type PropertyType "Goal" ServiceLevelObjective = GoalProperty
+  set newValue ServiceLevelObjective {..}
+    = ServiceLevelObjective {goal = Prelude.pure newValue, ..}
+instance Property "Name" ServiceLevelObjective where
+  type PropertyType "Name" ServiceLevelObjective = Value Prelude.Text
+  set newValue ServiceLevelObjective {..}
+    = ServiceLevelObjective {name = newValue, ..}
+instance Property "RequestBasedSli" ServiceLevelObjective where
+  type PropertyType "RequestBasedSli" ServiceLevelObjective = RequestBasedSliProperty
+  set newValue ServiceLevelObjective {..}
+    = ServiceLevelObjective
+        {requestBasedSli = Prelude.pure newValue, ..}
+instance Property "Sli" ServiceLevelObjective where
+  type PropertyType "Sli" ServiceLevelObjective = SliProperty
+  set newValue ServiceLevelObjective {..}
+    = ServiceLevelObjective {sli = Prelude.pure newValue, ..}
+instance Property "Tags" ServiceLevelObjective where
+  type PropertyType "Tags" ServiceLevelObjective = [Tag]
+  set newValue ServiceLevelObjective {..}
+    = ServiceLevelObjective {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/BurnRateConfigurationProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/BurnRateConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/BurnRateConfigurationProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.BurnRateConfigurationProperty (
+        BurnRateConfigurationProperty(..), mkBurnRateConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BurnRateConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-burnrateconfiguration.html>
+    BurnRateConfigurationProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-burnrateconfiguration.html#cfn-applicationsignals-servicelevelobjective-burnrateconfiguration-lookbackwindowminutes>
+                                   lookBackWindowMinutes :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBurnRateConfigurationProperty ::
+  Value Prelude.Integer -> BurnRateConfigurationProperty
+mkBurnRateConfigurationProperty lookBackWindowMinutes
+  = BurnRateConfigurationProperty
+      {haddock_workaround_ = (),
+       lookBackWindowMinutes = lookBackWindowMinutes}
+instance ToResourceProperties BurnRateConfigurationProperty where
+  toResourceProperties BurnRateConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.BurnRateConfiguration",
+         supportsTags = Prelude.False,
+         properties = ["LookBackWindowMinutes"
+                         JSON..= lookBackWindowMinutes]}
+instance JSON.ToJSON BurnRateConfigurationProperty where
+  toJSON BurnRateConfigurationProperty {..}
+    = JSON.object
+        ["LookBackWindowMinutes" JSON..= lookBackWindowMinutes]
+instance Property "LookBackWindowMinutes" BurnRateConfigurationProperty where
+  type PropertyType "LookBackWindowMinutes" BurnRateConfigurationProperty = Value Prelude.Integer
+  set newValue BurnRateConfigurationProperty {..}
+    = BurnRateConfigurationProperty
+        {lookBackWindowMinutes = newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/BurnRateConfigurationProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/BurnRateConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/BurnRateConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.BurnRateConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BurnRateConfigurationProperty :: Prelude.Type
+instance ToResourceProperties BurnRateConfigurationProperty
+instance Prelude.Eq BurnRateConfigurationProperty
+instance Prelude.Show BurnRateConfigurationProperty
+instance JSON.ToJSON BurnRateConfigurationProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/CalendarIntervalProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/CalendarIntervalProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/CalendarIntervalProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.CalendarIntervalProperty (
+        CalendarIntervalProperty(..), mkCalendarIntervalProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CalendarIntervalProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-calendarinterval.html>
+    CalendarIntervalProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-calendarinterval.html#cfn-applicationsignals-servicelevelobjective-calendarinterval-duration>
+                              duration :: (Value Prelude.Integer),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-calendarinterval.html#cfn-applicationsignals-servicelevelobjective-calendarinterval-durationunit>
+                              durationUnit :: (Value Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-calendarinterval.html#cfn-applicationsignals-servicelevelobjective-calendarinterval-starttime>
+                              startTime :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCalendarIntervalProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Text
+     -> Value Prelude.Integer -> CalendarIntervalProperty
+mkCalendarIntervalProperty duration durationUnit startTime
+  = CalendarIntervalProperty
+      {haddock_workaround_ = (), duration = duration,
+       durationUnit = durationUnit, startTime = startTime}
+instance ToResourceProperties CalendarIntervalProperty where
+  toResourceProperties CalendarIntervalProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.CalendarInterval",
+         supportsTags = Prelude.False,
+         properties = ["Duration" JSON..= duration,
+                       "DurationUnit" JSON..= durationUnit,
+                       "StartTime" JSON..= startTime]}
+instance JSON.ToJSON CalendarIntervalProperty where
+  toJSON CalendarIntervalProperty {..}
+    = JSON.object
+        ["Duration" JSON..= duration, "DurationUnit" JSON..= durationUnit,
+         "StartTime" JSON..= startTime]
+instance Property "Duration" CalendarIntervalProperty where
+  type PropertyType "Duration" CalendarIntervalProperty = Value Prelude.Integer
+  set newValue CalendarIntervalProperty {..}
+    = CalendarIntervalProperty {duration = newValue, ..}
+instance Property "DurationUnit" CalendarIntervalProperty where
+  type PropertyType "DurationUnit" CalendarIntervalProperty = Value Prelude.Text
+  set newValue CalendarIntervalProperty {..}
+    = CalendarIntervalProperty {durationUnit = newValue, ..}
+instance Property "StartTime" CalendarIntervalProperty where
+  type PropertyType "StartTime" CalendarIntervalProperty = Value Prelude.Integer
+  set newValue CalendarIntervalProperty {..}
+    = CalendarIntervalProperty {startTime = newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/CalendarIntervalProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/CalendarIntervalProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/CalendarIntervalProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.CalendarIntervalProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CalendarIntervalProperty :: Prelude.Type
+instance ToResourceProperties CalendarIntervalProperty
+instance Prelude.Eq CalendarIntervalProperty
+instance Prelude.Show CalendarIntervalProperty
+instance JSON.ToJSON CalendarIntervalProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/DependencyConfigProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/DependencyConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/DependencyConfigProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.DependencyConfigProperty (
+        DependencyConfigProperty(..), mkDependencyConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DependencyConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-dependencyconfig.html>
+    DependencyConfigProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-dependencyconfig.html#cfn-applicationsignals-servicelevelobjective-dependencyconfig-dependencykeyattributes>
+                              dependencyKeyAttributes :: (Prelude.Map Prelude.Text (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-dependencyconfig.html#cfn-applicationsignals-servicelevelobjective-dependencyconfig-dependencyoperationname>
+                              dependencyOperationName :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDependencyConfigProperty ::
+  Prelude.Map Prelude.Text (Value Prelude.Text)
+  -> Value Prelude.Text -> DependencyConfigProperty
+mkDependencyConfigProperty
+  dependencyKeyAttributes
+  dependencyOperationName
+  = DependencyConfigProperty
+      {haddock_workaround_ = (),
+       dependencyKeyAttributes = dependencyKeyAttributes,
+       dependencyOperationName = dependencyOperationName}
+instance ToResourceProperties DependencyConfigProperty where
+  toResourceProperties DependencyConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.DependencyConfig",
+         supportsTags = Prelude.False,
+         properties = ["DependencyKeyAttributes"
+                         JSON..= dependencyKeyAttributes,
+                       "DependencyOperationName" JSON..= dependencyOperationName]}
+instance JSON.ToJSON DependencyConfigProperty where
+  toJSON DependencyConfigProperty {..}
+    = JSON.object
+        ["DependencyKeyAttributes" JSON..= dependencyKeyAttributes,
+         "DependencyOperationName" JSON..= dependencyOperationName]
+instance Property "DependencyKeyAttributes" DependencyConfigProperty where
+  type PropertyType "DependencyKeyAttributes" DependencyConfigProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue DependencyConfigProperty {..}
+    = DependencyConfigProperty {dependencyKeyAttributes = newValue, ..}
+instance Property "DependencyOperationName" DependencyConfigProperty where
+  type PropertyType "DependencyOperationName" DependencyConfigProperty = Value Prelude.Text
+  set newValue DependencyConfigProperty {..}
+    = DependencyConfigProperty {dependencyOperationName = newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/DependencyConfigProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/DependencyConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/DependencyConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.DependencyConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DependencyConfigProperty :: Prelude.Type
+instance ToResourceProperties DependencyConfigProperty
+instance Prelude.Eq DependencyConfigProperty
+instance Prelude.Show DependencyConfigProperty
+instance JSON.ToJSON DependencyConfigProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/DimensionProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/DimensionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/DimensionProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.DimensionProperty (
+        DimensionProperty(..), mkDimensionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DimensionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-dimension.html>
+    DimensionProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-dimension.html#cfn-applicationsignals-servicelevelobjective-dimension-name>
+                       name :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-dimension.html#cfn-applicationsignals-servicelevelobjective-dimension-value>
+                       value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDimensionProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> DimensionProperty
+mkDimensionProperty name value
+  = DimensionProperty
+      {haddock_workaround_ = (), name = name, value = value}
+instance ToResourceProperties DimensionProperty where
+  toResourceProperties DimensionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.Dimension",
+         supportsTags = Prelude.False,
+         properties = ["Name" JSON..= name, "Value" JSON..= value]}
+instance JSON.ToJSON DimensionProperty where
+  toJSON DimensionProperty {..}
+    = JSON.object ["Name" JSON..= name, "Value" JSON..= value]
+instance Property "Name" DimensionProperty where
+  type PropertyType "Name" DimensionProperty = Value Prelude.Text
+  set newValue DimensionProperty {..}
+    = DimensionProperty {name = newValue, ..}
+instance Property "Value" DimensionProperty where
+  type PropertyType "Value" DimensionProperty = Value Prelude.Text
+  set newValue DimensionProperty {..}
+    = DimensionProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/DimensionProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/DimensionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/DimensionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.DimensionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DimensionProperty :: Prelude.Type
+instance ToResourceProperties DimensionProperty
+instance Prelude.Eq DimensionProperty
+instance Prelude.Show DimensionProperty
+instance JSON.ToJSON DimensionProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/ExclusionWindowProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/ExclusionWindowProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/ExclusionWindowProperty.hs
@@ -0,0 +1,69 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.ExclusionWindowProperty (
+        module Exports, ExclusionWindowProperty(..),
+        mkExclusionWindowProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.RecurrenceRuleProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.WindowProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ExclusionWindowProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-exclusionwindow.html>
+    ExclusionWindowProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-exclusionwindow.html#cfn-applicationsignals-servicelevelobjective-exclusionwindow-reason>
+                             reason :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-exclusionwindow.html#cfn-applicationsignals-servicelevelobjective-exclusionwindow-recurrencerule>
+                             recurrenceRule :: (Prelude.Maybe RecurrenceRuleProperty),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-exclusionwindow.html#cfn-applicationsignals-servicelevelobjective-exclusionwindow-starttime>
+                             startTime :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-exclusionwindow.html#cfn-applicationsignals-servicelevelobjective-exclusionwindow-window>
+                             window :: WindowProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkExclusionWindowProperty ::
+  WindowProperty -> ExclusionWindowProperty
+mkExclusionWindowProperty window
+  = ExclusionWindowProperty
+      {haddock_workaround_ = (), window = window,
+       reason = Prelude.Nothing, recurrenceRule = Prelude.Nothing,
+       startTime = Prelude.Nothing}
+instance ToResourceProperties ExclusionWindowProperty where
+  toResourceProperties ExclusionWindowProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.ExclusionWindow",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Window" JSON..= window]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Reason" Prelude.<$> reason,
+                               (JSON..=) "RecurrenceRule" Prelude.<$> recurrenceRule,
+                               (JSON..=) "StartTime" Prelude.<$> startTime]))}
+instance JSON.ToJSON ExclusionWindowProperty where
+  toJSON ExclusionWindowProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Window" JSON..= window]
+              (Prelude.catMaybes
+                 [(JSON..=) "Reason" Prelude.<$> reason,
+                  (JSON..=) "RecurrenceRule" Prelude.<$> recurrenceRule,
+                  (JSON..=) "StartTime" Prelude.<$> startTime])))
+instance Property "Reason" ExclusionWindowProperty where
+  type PropertyType "Reason" ExclusionWindowProperty = Value Prelude.Text
+  set newValue ExclusionWindowProperty {..}
+    = ExclusionWindowProperty {reason = Prelude.pure newValue, ..}
+instance Property "RecurrenceRule" ExclusionWindowProperty where
+  type PropertyType "RecurrenceRule" ExclusionWindowProperty = RecurrenceRuleProperty
+  set newValue ExclusionWindowProperty {..}
+    = ExclusionWindowProperty
+        {recurrenceRule = Prelude.pure newValue, ..}
+instance Property "StartTime" ExclusionWindowProperty where
+  type PropertyType "StartTime" ExclusionWindowProperty = Value Prelude.Text
+  set newValue ExclusionWindowProperty {..}
+    = ExclusionWindowProperty {startTime = Prelude.pure newValue, ..}
+instance Property "Window" ExclusionWindowProperty where
+  type PropertyType "Window" ExclusionWindowProperty = WindowProperty
+  set newValue ExclusionWindowProperty {..}
+    = ExclusionWindowProperty {window = newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/ExclusionWindowProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/ExclusionWindowProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/ExclusionWindowProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.ExclusionWindowProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ExclusionWindowProperty :: Prelude.Type
+instance ToResourceProperties ExclusionWindowProperty
+instance Prelude.Eq ExclusionWindowProperty
+instance Prelude.Show ExclusionWindowProperty
+instance JSON.ToJSON ExclusionWindowProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/GoalProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/GoalProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/GoalProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.GoalProperty (
+        module Exports, GoalProperty(..), mkGoalProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.IntervalProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data GoalProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-goal.html>
+    GoalProperty {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-goal.html#cfn-applicationsignals-servicelevelobjective-goal-attainmentgoal>
+                  attainmentGoal :: (Prelude.Maybe (Value Prelude.Double)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-goal.html#cfn-applicationsignals-servicelevelobjective-goal-interval>
+                  interval :: (Prelude.Maybe IntervalProperty),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-goal.html#cfn-applicationsignals-servicelevelobjective-goal-warningthreshold>
+                  warningThreshold :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGoalProperty :: GoalProperty
+mkGoalProperty
+  = GoalProperty
+      {haddock_workaround_ = (), attainmentGoal = Prelude.Nothing,
+       interval = Prelude.Nothing, warningThreshold = Prelude.Nothing}
+instance ToResourceProperties GoalProperty where
+  toResourceProperties GoalProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.Goal",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AttainmentGoal" Prelude.<$> attainmentGoal,
+                            (JSON..=) "Interval" Prelude.<$> interval,
+                            (JSON..=) "WarningThreshold" Prelude.<$> warningThreshold])}
+instance JSON.ToJSON GoalProperty where
+  toJSON GoalProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AttainmentGoal" Prelude.<$> attainmentGoal,
+               (JSON..=) "Interval" Prelude.<$> interval,
+               (JSON..=) "WarningThreshold" Prelude.<$> warningThreshold]))
+instance Property "AttainmentGoal" GoalProperty where
+  type PropertyType "AttainmentGoal" GoalProperty = Value Prelude.Double
+  set newValue GoalProperty {..}
+    = GoalProperty {attainmentGoal = Prelude.pure newValue, ..}
+instance Property "Interval" GoalProperty where
+  type PropertyType "Interval" GoalProperty = IntervalProperty
+  set newValue GoalProperty {..}
+    = GoalProperty {interval = Prelude.pure newValue, ..}
+instance Property "WarningThreshold" GoalProperty where
+  type PropertyType "WarningThreshold" GoalProperty = Value Prelude.Double
+  set newValue GoalProperty {..}
+    = GoalProperty {warningThreshold = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/GoalProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/GoalProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/GoalProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.GoalProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data GoalProperty :: Prelude.Type
+instance ToResourceProperties GoalProperty
+instance Prelude.Eq GoalProperty
+instance Prelude.Show GoalProperty
+instance JSON.ToJSON GoalProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/IntervalProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/IntervalProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/IntervalProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.IntervalProperty (
+        module Exports, IntervalProperty(..), mkIntervalProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.CalendarIntervalProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.RollingIntervalProperty as Exports
+import Stratosphere.ResourceProperties
+data IntervalProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-interval.html>
+    IntervalProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-interval.html#cfn-applicationsignals-servicelevelobjective-interval-calendarinterval>
+                      calendarInterval :: (Prelude.Maybe CalendarIntervalProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-interval.html#cfn-applicationsignals-servicelevelobjective-interval-rollinginterval>
+                      rollingInterval :: (Prelude.Maybe RollingIntervalProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIntervalProperty :: IntervalProperty
+mkIntervalProperty
+  = IntervalProperty
+      {haddock_workaround_ = (), calendarInterval = Prelude.Nothing,
+       rollingInterval = Prelude.Nothing}
+instance ToResourceProperties IntervalProperty where
+  toResourceProperties IntervalProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.Interval",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CalendarInterval" Prelude.<$> calendarInterval,
+                            (JSON..=) "RollingInterval" Prelude.<$> rollingInterval])}
+instance JSON.ToJSON IntervalProperty where
+  toJSON IntervalProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CalendarInterval" Prelude.<$> calendarInterval,
+               (JSON..=) "RollingInterval" Prelude.<$> rollingInterval]))
+instance Property "CalendarInterval" IntervalProperty where
+  type PropertyType "CalendarInterval" IntervalProperty = CalendarIntervalProperty
+  set newValue IntervalProperty {..}
+    = IntervalProperty {calendarInterval = Prelude.pure newValue, ..}
+instance Property "RollingInterval" IntervalProperty where
+  type PropertyType "RollingInterval" IntervalProperty = RollingIntervalProperty
+  set newValue IntervalProperty {..}
+    = IntervalProperty {rollingInterval = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/IntervalProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/IntervalProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/IntervalProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.IntervalProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IntervalProperty :: Prelude.Type
+instance ToResourceProperties IntervalProperty
+instance Prelude.Eq IntervalProperty
+instance Prelude.Show IntervalProperty
+instance JSON.ToJSON IntervalProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricDataQueryProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricDataQueryProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricDataQueryProperty.hs
@@ -0,0 +1,75 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.MetricDataQueryProperty (
+        module Exports, MetricDataQueryProperty(..),
+        mkMetricDataQueryProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.MetricStatProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MetricDataQueryProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-metricdataquery.html>
+    MetricDataQueryProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-metricdataquery.html#cfn-applicationsignals-servicelevelobjective-metricdataquery-accountid>
+                             accountId :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-metricdataquery.html#cfn-applicationsignals-servicelevelobjective-metricdataquery-expression>
+                             expression :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-metricdataquery.html#cfn-applicationsignals-servicelevelobjective-metricdataquery-id>
+                             id :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-metricdataquery.html#cfn-applicationsignals-servicelevelobjective-metricdataquery-metricstat>
+                             metricStat :: (Prelude.Maybe MetricStatProperty),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-metricdataquery.html#cfn-applicationsignals-servicelevelobjective-metricdataquery-returndata>
+                             returnData :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMetricDataQueryProperty ::
+  Value Prelude.Text -> MetricDataQueryProperty
+mkMetricDataQueryProperty id
+  = MetricDataQueryProperty
+      {haddock_workaround_ = (), id = id, accountId = Prelude.Nothing,
+       expression = Prelude.Nothing, metricStat = Prelude.Nothing,
+       returnData = Prelude.Nothing}
+instance ToResourceProperties MetricDataQueryProperty where
+  toResourceProperties MetricDataQueryProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.MetricDataQuery",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Id" JSON..= id]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AccountId" Prelude.<$> accountId,
+                               (JSON..=) "Expression" Prelude.<$> expression,
+                               (JSON..=) "MetricStat" Prelude.<$> metricStat,
+                               (JSON..=) "ReturnData" Prelude.<$> returnData]))}
+instance JSON.ToJSON MetricDataQueryProperty where
+  toJSON MetricDataQueryProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Id" JSON..= id]
+              (Prelude.catMaybes
+                 [(JSON..=) "AccountId" Prelude.<$> accountId,
+                  (JSON..=) "Expression" Prelude.<$> expression,
+                  (JSON..=) "MetricStat" Prelude.<$> metricStat,
+                  (JSON..=) "ReturnData" Prelude.<$> returnData])))
+instance Property "AccountId" MetricDataQueryProperty where
+  type PropertyType "AccountId" MetricDataQueryProperty = Value Prelude.Text
+  set newValue MetricDataQueryProperty {..}
+    = MetricDataQueryProperty {accountId = Prelude.pure newValue, ..}
+instance Property "Expression" MetricDataQueryProperty where
+  type PropertyType "Expression" MetricDataQueryProperty = Value Prelude.Text
+  set newValue MetricDataQueryProperty {..}
+    = MetricDataQueryProperty {expression = Prelude.pure newValue, ..}
+instance Property "Id" MetricDataQueryProperty where
+  type PropertyType "Id" MetricDataQueryProperty = Value Prelude.Text
+  set newValue MetricDataQueryProperty {..}
+    = MetricDataQueryProperty {id = newValue, ..}
+instance Property "MetricStat" MetricDataQueryProperty where
+  type PropertyType "MetricStat" MetricDataQueryProperty = MetricStatProperty
+  set newValue MetricDataQueryProperty {..}
+    = MetricDataQueryProperty {metricStat = Prelude.pure newValue, ..}
+instance Property "ReturnData" MetricDataQueryProperty where
+  type PropertyType "ReturnData" MetricDataQueryProperty = Value Prelude.Bool
+  set newValue MetricDataQueryProperty {..}
+    = MetricDataQueryProperty {returnData = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricDataQueryProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricDataQueryProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricDataQueryProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.MetricDataQueryProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MetricDataQueryProperty :: Prelude.Type
+instance ToResourceProperties MetricDataQueryProperty
+instance Prelude.Eq MetricDataQueryProperty
+instance Prelude.Show MetricDataQueryProperty
+instance JSON.ToJSON MetricDataQueryProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.MetricProperty (
+        module Exports, MetricProperty(..), mkMetricProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.DimensionProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MetricProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-metric.html>
+    MetricProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-metric.html#cfn-applicationsignals-servicelevelobjective-metric-dimensions>
+                    dimensions :: (Prelude.Maybe [DimensionProperty]),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-metric.html#cfn-applicationsignals-servicelevelobjective-metric-metricname>
+                    metricName :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-metric.html#cfn-applicationsignals-servicelevelobjective-metric-namespace>
+                    namespace :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMetricProperty :: MetricProperty
+mkMetricProperty
+  = MetricProperty
+      {haddock_workaround_ = (), dimensions = Prelude.Nothing,
+       metricName = Prelude.Nothing, namespace = Prelude.Nothing}
+instance ToResourceProperties MetricProperty where
+  toResourceProperties MetricProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.Metric",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Dimensions" Prelude.<$> dimensions,
+                            (JSON..=) "MetricName" Prelude.<$> metricName,
+                            (JSON..=) "Namespace" Prelude.<$> namespace])}
+instance JSON.ToJSON MetricProperty where
+  toJSON MetricProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Dimensions" Prelude.<$> dimensions,
+               (JSON..=) "MetricName" Prelude.<$> metricName,
+               (JSON..=) "Namespace" Prelude.<$> namespace]))
+instance Property "Dimensions" MetricProperty where
+  type PropertyType "Dimensions" MetricProperty = [DimensionProperty]
+  set newValue MetricProperty {..}
+    = MetricProperty {dimensions = Prelude.pure newValue, ..}
+instance Property "MetricName" MetricProperty where
+  type PropertyType "MetricName" MetricProperty = Value Prelude.Text
+  set newValue MetricProperty {..}
+    = MetricProperty {metricName = Prelude.pure newValue, ..}
+instance Property "Namespace" MetricProperty where
+  type PropertyType "Namespace" MetricProperty = Value Prelude.Text
+  set newValue MetricProperty {..}
+    = MetricProperty {namespace = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.MetricProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MetricProperty :: Prelude.Type
+instance ToResourceProperties MetricProperty
+instance Prelude.Eq MetricProperty
+instance Prelude.Show MetricProperty
+instance JSON.ToJSON MetricProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricStatProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricStatProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricStatProperty.hs
@@ -0,0 +1,63 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.MetricStatProperty (
+        module Exports, MetricStatProperty(..), mkMetricStatProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.MetricProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MetricStatProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-metricstat.html>
+    MetricStatProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-metricstat.html#cfn-applicationsignals-servicelevelobjective-metricstat-metric>
+                        metric :: MetricProperty,
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-metricstat.html#cfn-applicationsignals-servicelevelobjective-metricstat-period>
+                        period :: (Value Prelude.Integer),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-metricstat.html#cfn-applicationsignals-servicelevelobjective-metricstat-stat>
+                        stat :: (Value Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-metricstat.html#cfn-applicationsignals-servicelevelobjective-metricstat-unit>
+                        unit :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMetricStatProperty ::
+  MetricProperty
+  -> Value Prelude.Integer
+     -> Value Prelude.Text -> MetricStatProperty
+mkMetricStatProperty metric period stat
+  = MetricStatProperty
+      {haddock_workaround_ = (), metric = metric, period = period,
+       stat = stat, unit = Prelude.Nothing}
+instance ToResourceProperties MetricStatProperty where
+  toResourceProperties MetricStatProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.MetricStat",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Metric" JSON..= metric, "Period" JSON..= period,
+                            "Stat" JSON..= stat]
+                           (Prelude.catMaybes [(JSON..=) "Unit" Prelude.<$> unit]))}
+instance JSON.ToJSON MetricStatProperty where
+  toJSON MetricStatProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Metric" JSON..= metric, "Period" JSON..= period,
+               "Stat" JSON..= stat]
+              (Prelude.catMaybes [(JSON..=) "Unit" Prelude.<$> unit])))
+instance Property "Metric" MetricStatProperty where
+  type PropertyType "Metric" MetricStatProperty = MetricProperty
+  set newValue MetricStatProperty {..}
+    = MetricStatProperty {metric = newValue, ..}
+instance Property "Period" MetricStatProperty where
+  type PropertyType "Period" MetricStatProperty = Value Prelude.Integer
+  set newValue MetricStatProperty {..}
+    = MetricStatProperty {period = newValue, ..}
+instance Property "Stat" MetricStatProperty where
+  type PropertyType "Stat" MetricStatProperty = Value Prelude.Text
+  set newValue MetricStatProperty {..}
+    = MetricStatProperty {stat = newValue, ..}
+instance Property "Unit" MetricStatProperty where
+  type PropertyType "Unit" MetricStatProperty = Value Prelude.Text
+  set newValue MetricStatProperty {..}
+    = MetricStatProperty {unit = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricStatProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricStatProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MetricStatProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.MetricStatProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MetricStatProperty :: Prelude.Type
+instance ToResourceProperties MetricStatProperty
+instance Prelude.Eq MetricStatProperty
+instance Prelude.Show MetricStatProperty
+instance JSON.ToJSON MetricStatProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MonitoredRequestCountMetricProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MonitoredRequestCountMetricProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MonitoredRequestCountMetricProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.MonitoredRequestCountMetricProperty (
+        module Exports, MonitoredRequestCountMetricProperty(..),
+        mkMonitoredRequestCountMetricProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.MetricDataQueryProperty as Exports
+import Stratosphere.ResourceProperties
+data MonitoredRequestCountMetricProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-monitoredrequestcountmetric.html>
+    MonitoredRequestCountMetricProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-monitoredrequestcountmetric.html#cfn-applicationsignals-servicelevelobjective-monitoredrequestcountmetric-badcountmetric>
+                                         badCountMetric :: (Prelude.Maybe [MetricDataQueryProperty]),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-monitoredrequestcountmetric.html#cfn-applicationsignals-servicelevelobjective-monitoredrequestcountmetric-goodcountmetric>
+                                         goodCountMetric :: (Prelude.Maybe [MetricDataQueryProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMonitoredRequestCountMetricProperty ::
+  MonitoredRequestCountMetricProperty
+mkMonitoredRequestCountMetricProperty
+  = MonitoredRequestCountMetricProperty
+      {haddock_workaround_ = (), badCountMetric = Prelude.Nothing,
+       goodCountMetric = Prelude.Nothing}
+instance ToResourceProperties MonitoredRequestCountMetricProperty where
+  toResourceProperties MonitoredRequestCountMetricProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.MonitoredRequestCountMetric",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "BadCountMetric" Prelude.<$> badCountMetric,
+                            (JSON..=) "GoodCountMetric" Prelude.<$> goodCountMetric])}
+instance JSON.ToJSON MonitoredRequestCountMetricProperty where
+  toJSON MonitoredRequestCountMetricProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "BadCountMetric" Prelude.<$> badCountMetric,
+               (JSON..=) "GoodCountMetric" Prelude.<$> goodCountMetric]))
+instance Property "BadCountMetric" MonitoredRequestCountMetricProperty where
+  type PropertyType "BadCountMetric" MonitoredRequestCountMetricProperty = [MetricDataQueryProperty]
+  set newValue MonitoredRequestCountMetricProperty {..}
+    = MonitoredRequestCountMetricProperty
+        {badCountMetric = Prelude.pure newValue, ..}
+instance Property "GoodCountMetric" MonitoredRequestCountMetricProperty where
+  type PropertyType "GoodCountMetric" MonitoredRequestCountMetricProperty = [MetricDataQueryProperty]
+  set newValue MonitoredRequestCountMetricProperty {..}
+    = MonitoredRequestCountMetricProperty
+        {goodCountMetric = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MonitoredRequestCountMetricProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MonitoredRequestCountMetricProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/MonitoredRequestCountMetricProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.MonitoredRequestCountMetricProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MonitoredRequestCountMetricProperty :: Prelude.Type
+instance ToResourceProperties MonitoredRequestCountMetricProperty
+instance Prelude.Eq MonitoredRequestCountMetricProperty
+instance Prelude.Show MonitoredRequestCountMetricProperty
+instance JSON.ToJSON MonitoredRequestCountMetricProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RecurrenceRuleProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RecurrenceRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RecurrenceRuleProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.RecurrenceRuleProperty (
+        RecurrenceRuleProperty(..), mkRecurrenceRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RecurrenceRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-recurrencerule.html>
+    RecurrenceRuleProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-recurrencerule.html#cfn-applicationsignals-servicelevelobjective-recurrencerule-expression>
+                            expression :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRecurrenceRuleProperty ::
+  Value Prelude.Text -> RecurrenceRuleProperty
+mkRecurrenceRuleProperty expression
+  = RecurrenceRuleProperty
+      {haddock_workaround_ = (), expression = expression}
+instance ToResourceProperties RecurrenceRuleProperty where
+  toResourceProperties RecurrenceRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.RecurrenceRule",
+         supportsTags = Prelude.False,
+         properties = ["Expression" JSON..= expression]}
+instance JSON.ToJSON RecurrenceRuleProperty where
+  toJSON RecurrenceRuleProperty {..}
+    = JSON.object ["Expression" JSON..= expression]
+instance Property "Expression" RecurrenceRuleProperty where
+  type PropertyType "Expression" RecurrenceRuleProperty = Value Prelude.Text
+  set newValue RecurrenceRuleProperty {..}
+    = RecurrenceRuleProperty {expression = newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RecurrenceRuleProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RecurrenceRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RecurrenceRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.RecurrenceRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RecurrenceRuleProperty :: Prelude.Type
+instance ToResourceProperties RecurrenceRuleProperty
+instance Prelude.Eq RecurrenceRuleProperty
+instance Prelude.Show RecurrenceRuleProperty
+instance JSON.ToJSON RecurrenceRuleProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RequestBasedSliMetricProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RequestBasedSliMetricProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RequestBasedSliMetricProperty.hs
@@ -0,0 +1,94 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.RequestBasedSliMetricProperty (
+        module Exports, RequestBasedSliMetricProperty(..),
+        mkRequestBasedSliMetricProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.DependencyConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.MetricDataQueryProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.MonitoredRequestCountMetricProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RequestBasedSliMetricProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-requestbasedslimetric.html>
+    RequestBasedSliMetricProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-requestbasedslimetric.html#cfn-applicationsignals-servicelevelobjective-requestbasedslimetric-dependencyconfig>
+                                   dependencyConfig :: (Prelude.Maybe DependencyConfigProperty),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-requestbasedslimetric.html#cfn-applicationsignals-servicelevelobjective-requestbasedslimetric-keyattributes>
+                                   keyAttributes :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-requestbasedslimetric.html#cfn-applicationsignals-servicelevelobjective-requestbasedslimetric-metrictype>
+                                   metricType :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-requestbasedslimetric.html#cfn-applicationsignals-servicelevelobjective-requestbasedslimetric-monitoredrequestcountmetric>
+                                   monitoredRequestCountMetric :: (Prelude.Maybe MonitoredRequestCountMetricProperty),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-requestbasedslimetric.html#cfn-applicationsignals-servicelevelobjective-requestbasedslimetric-operationname>
+                                   operationName :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-requestbasedslimetric.html#cfn-applicationsignals-servicelevelobjective-requestbasedslimetric-totalrequestcountmetric>
+                                   totalRequestCountMetric :: (Prelude.Maybe [MetricDataQueryProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRequestBasedSliMetricProperty :: RequestBasedSliMetricProperty
+mkRequestBasedSliMetricProperty
+  = RequestBasedSliMetricProperty
+      {haddock_workaround_ = (), dependencyConfig = Prelude.Nothing,
+       keyAttributes = Prelude.Nothing, metricType = Prelude.Nothing,
+       monitoredRequestCountMetric = Prelude.Nothing,
+       operationName = Prelude.Nothing,
+       totalRequestCountMetric = Prelude.Nothing}
+instance ToResourceProperties RequestBasedSliMetricProperty where
+  toResourceProperties RequestBasedSliMetricProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.RequestBasedSliMetric",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DependencyConfig" Prelude.<$> dependencyConfig,
+                            (JSON..=) "KeyAttributes" Prelude.<$> keyAttributes,
+                            (JSON..=) "MetricType" Prelude.<$> metricType,
+                            (JSON..=) "MonitoredRequestCountMetric"
+                              Prelude.<$> monitoredRequestCountMetric,
+                            (JSON..=) "OperationName" Prelude.<$> operationName,
+                            (JSON..=) "TotalRequestCountMetric"
+                              Prelude.<$> totalRequestCountMetric])}
+instance JSON.ToJSON RequestBasedSliMetricProperty where
+  toJSON RequestBasedSliMetricProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DependencyConfig" Prelude.<$> dependencyConfig,
+               (JSON..=) "KeyAttributes" Prelude.<$> keyAttributes,
+               (JSON..=) "MetricType" Prelude.<$> metricType,
+               (JSON..=) "MonitoredRequestCountMetric"
+                 Prelude.<$> monitoredRequestCountMetric,
+               (JSON..=) "OperationName" Prelude.<$> operationName,
+               (JSON..=) "TotalRequestCountMetric"
+                 Prelude.<$> totalRequestCountMetric]))
+instance Property "DependencyConfig" RequestBasedSliMetricProperty where
+  type PropertyType "DependencyConfig" RequestBasedSliMetricProperty = DependencyConfigProperty
+  set newValue RequestBasedSliMetricProperty {..}
+    = RequestBasedSliMetricProperty
+        {dependencyConfig = Prelude.pure newValue, ..}
+instance Property "KeyAttributes" RequestBasedSliMetricProperty where
+  type PropertyType "KeyAttributes" RequestBasedSliMetricProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue RequestBasedSliMetricProperty {..}
+    = RequestBasedSliMetricProperty
+        {keyAttributes = Prelude.pure newValue, ..}
+instance Property "MetricType" RequestBasedSliMetricProperty where
+  type PropertyType "MetricType" RequestBasedSliMetricProperty = Value Prelude.Text
+  set newValue RequestBasedSliMetricProperty {..}
+    = RequestBasedSliMetricProperty
+        {metricType = Prelude.pure newValue, ..}
+instance Property "MonitoredRequestCountMetric" RequestBasedSliMetricProperty where
+  type PropertyType "MonitoredRequestCountMetric" RequestBasedSliMetricProperty = MonitoredRequestCountMetricProperty
+  set newValue RequestBasedSliMetricProperty {..}
+    = RequestBasedSliMetricProperty
+        {monitoredRequestCountMetric = Prelude.pure newValue, ..}
+instance Property "OperationName" RequestBasedSliMetricProperty where
+  type PropertyType "OperationName" RequestBasedSliMetricProperty = Value Prelude.Text
+  set newValue RequestBasedSliMetricProperty {..}
+    = RequestBasedSliMetricProperty
+        {operationName = Prelude.pure newValue, ..}
+instance Property "TotalRequestCountMetric" RequestBasedSliMetricProperty where
+  type PropertyType "TotalRequestCountMetric" RequestBasedSliMetricProperty = [MetricDataQueryProperty]
+  set newValue RequestBasedSliMetricProperty {..}
+    = RequestBasedSliMetricProperty
+        {totalRequestCountMetric = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RequestBasedSliMetricProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RequestBasedSliMetricProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RequestBasedSliMetricProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.RequestBasedSliMetricProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RequestBasedSliMetricProperty :: Prelude.Type
+instance ToResourceProperties RequestBasedSliMetricProperty
+instance Prelude.Eq RequestBasedSliMetricProperty
+instance Prelude.Show RequestBasedSliMetricProperty
+instance JSON.ToJSON RequestBasedSliMetricProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RequestBasedSliProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RequestBasedSliProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RequestBasedSliProperty.hs
@@ -0,0 +1,62 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.RequestBasedSliProperty (
+        module Exports, RequestBasedSliProperty(..),
+        mkRequestBasedSliProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.RequestBasedSliMetricProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RequestBasedSliProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-requestbasedsli.html>
+    RequestBasedSliProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-requestbasedsli.html#cfn-applicationsignals-servicelevelobjective-requestbasedsli-comparisonoperator>
+                             comparisonOperator :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-requestbasedsli.html#cfn-applicationsignals-servicelevelobjective-requestbasedsli-metricthreshold>
+                             metricThreshold :: (Prelude.Maybe (Value Prelude.Double)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-requestbasedsli.html#cfn-applicationsignals-servicelevelobjective-requestbasedsli-requestbasedslimetric>
+                             requestBasedSliMetric :: RequestBasedSliMetricProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRequestBasedSliProperty ::
+  RequestBasedSliMetricProperty -> RequestBasedSliProperty
+mkRequestBasedSliProperty requestBasedSliMetric
+  = RequestBasedSliProperty
+      {haddock_workaround_ = (),
+       requestBasedSliMetric = requestBasedSliMetric,
+       comparisonOperator = Prelude.Nothing,
+       metricThreshold = Prelude.Nothing}
+instance ToResourceProperties RequestBasedSliProperty where
+  toResourceProperties RequestBasedSliProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.RequestBasedSli",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["RequestBasedSliMetric" JSON..= requestBasedSliMetric]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ComparisonOperator" Prelude.<$> comparisonOperator,
+                               (JSON..=) "MetricThreshold" Prelude.<$> metricThreshold]))}
+instance JSON.ToJSON RequestBasedSliProperty where
+  toJSON RequestBasedSliProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["RequestBasedSliMetric" JSON..= requestBasedSliMetric]
+              (Prelude.catMaybes
+                 [(JSON..=) "ComparisonOperator" Prelude.<$> comparisonOperator,
+                  (JSON..=) "MetricThreshold" Prelude.<$> metricThreshold])))
+instance Property "ComparisonOperator" RequestBasedSliProperty where
+  type PropertyType "ComparisonOperator" RequestBasedSliProperty = Value Prelude.Text
+  set newValue RequestBasedSliProperty {..}
+    = RequestBasedSliProperty
+        {comparisonOperator = Prelude.pure newValue, ..}
+instance Property "MetricThreshold" RequestBasedSliProperty where
+  type PropertyType "MetricThreshold" RequestBasedSliProperty = Value Prelude.Double
+  set newValue RequestBasedSliProperty {..}
+    = RequestBasedSliProperty
+        {metricThreshold = Prelude.pure newValue, ..}
+instance Property "RequestBasedSliMetric" RequestBasedSliProperty where
+  type PropertyType "RequestBasedSliMetric" RequestBasedSliProperty = RequestBasedSliMetricProperty
+  set newValue RequestBasedSliProperty {..}
+    = RequestBasedSliProperty {requestBasedSliMetric = newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RequestBasedSliProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RequestBasedSliProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RequestBasedSliProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.RequestBasedSliProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RequestBasedSliProperty :: Prelude.Type
+instance ToResourceProperties RequestBasedSliProperty
+instance Prelude.Eq RequestBasedSliProperty
+instance Prelude.Show RequestBasedSliProperty
+instance JSON.ToJSON RequestBasedSliProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RollingIntervalProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RollingIntervalProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RollingIntervalProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.RollingIntervalProperty (
+        RollingIntervalProperty(..), mkRollingIntervalProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RollingIntervalProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-rollinginterval.html>
+    RollingIntervalProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-rollinginterval.html#cfn-applicationsignals-servicelevelobjective-rollinginterval-duration>
+                             duration :: (Value Prelude.Integer),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-rollinginterval.html#cfn-applicationsignals-servicelevelobjective-rollinginterval-durationunit>
+                             durationUnit :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRollingIntervalProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Text -> RollingIntervalProperty
+mkRollingIntervalProperty duration durationUnit
+  = RollingIntervalProperty
+      {haddock_workaround_ = (), duration = duration,
+       durationUnit = durationUnit}
+instance ToResourceProperties RollingIntervalProperty where
+  toResourceProperties RollingIntervalProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.RollingInterval",
+         supportsTags = Prelude.False,
+         properties = ["Duration" JSON..= duration,
+                       "DurationUnit" JSON..= durationUnit]}
+instance JSON.ToJSON RollingIntervalProperty where
+  toJSON RollingIntervalProperty {..}
+    = JSON.object
+        ["Duration" JSON..= duration, "DurationUnit" JSON..= durationUnit]
+instance Property "Duration" RollingIntervalProperty where
+  type PropertyType "Duration" RollingIntervalProperty = Value Prelude.Integer
+  set newValue RollingIntervalProperty {..}
+    = RollingIntervalProperty {duration = newValue, ..}
+instance Property "DurationUnit" RollingIntervalProperty where
+  type PropertyType "DurationUnit" RollingIntervalProperty = Value Prelude.Text
+  set newValue RollingIntervalProperty {..}
+    = RollingIntervalProperty {durationUnit = newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RollingIntervalProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RollingIntervalProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/RollingIntervalProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.RollingIntervalProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RollingIntervalProperty :: Prelude.Type
+instance ToResourceProperties RollingIntervalProperty
+instance Prelude.Eq RollingIntervalProperty
+instance Prelude.Show RollingIntervalProperty
+instance JSON.ToJSON RollingIntervalProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/SliMetricProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/SliMetricProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/SliMetricProperty.hs
@@ -0,0 +1,90 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.SliMetricProperty (
+        module Exports, SliMetricProperty(..), mkSliMetricProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.DependencyConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.MetricDataQueryProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SliMetricProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-slimetric.html>
+    SliMetricProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-slimetric.html#cfn-applicationsignals-servicelevelobjective-slimetric-dependencyconfig>
+                       dependencyConfig :: (Prelude.Maybe DependencyConfigProperty),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-slimetric.html#cfn-applicationsignals-servicelevelobjective-slimetric-keyattributes>
+                       keyAttributes :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-slimetric.html#cfn-applicationsignals-servicelevelobjective-slimetric-metricdataqueries>
+                       metricDataQueries :: (Prelude.Maybe [MetricDataQueryProperty]),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-slimetric.html#cfn-applicationsignals-servicelevelobjective-slimetric-metrictype>
+                       metricType :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-slimetric.html#cfn-applicationsignals-servicelevelobjective-slimetric-operationname>
+                       operationName :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-slimetric.html#cfn-applicationsignals-servicelevelobjective-slimetric-periodseconds>
+                       periodSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-slimetric.html#cfn-applicationsignals-servicelevelobjective-slimetric-statistic>
+                       statistic :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSliMetricProperty :: SliMetricProperty
+mkSliMetricProperty
+  = SliMetricProperty
+      {haddock_workaround_ = (), dependencyConfig = Prelude.Nothing,
+       keyAttributes = Prelude.Nothing,
+       metricDataQueries = Prelude.Nothing, metricType = Prelude.Nothing,
+       operationName = Prelude.Nothing, periodSeconds = Prelude.Nothing,
+       statistic = Prelude.Nothing}
+instance ToResourceProperties SliMetricProperty where
+  toResourceProperties SliMetricProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.SliMetric",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DependencyConfig" Prelude.<$> dependencyConfig,
+                            (JSON..=) "KeyAttributes" Prelude.<$> keyAttributes,
+                            (JSON..=) "MetricDataQueries" Prelude.<$> metricDataQueries,
+                            (JSON..=) "MetricType" Prelude.<$> metricType,
+                            (JSON..=) "OperationName" Prelude.<$> operationName,
+                            (JSON..=) "PeriodSeconds" Prelude.<$> periodSeconds,
+                            (JSON..=) "Statistic" Prelude.<$> statistic])}
+instance JSON.ToJSON SliMetricProperty where
+  toJSON SliMetricProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DependencyConfig" Prelude.<$> dependencyConfig,
+               (JSON..=) "KeyAttributes" Prelude.<$> keyAttributes,
+               (JSON..=) "MetricDataQueries" Prelude.<$> metricDataQueries,
+               (JSON..=) "MetricType" Prelude.<$> metricType,
+               (JSON..=) "OperationName" Prelude.<$> operationName,
+               (JSON..=) "PeriodSeconds" Prelude.<$> periodSeconds,
+               (JSON..=) "Statistic" Prelude.<$> statistic]))
+instance Property "DependencyConfig" SliMetricProperty where
+  type PropertyType "DependencyConfig" SliMetricProperty = DependencyConfigProperty
+  set newValue SliMetricProperty {..}
+    = SliMetricProperty {dependencyConfig = Prelude.pure newValue, ..}
+instance Property "KeyAttributes" SliMetricProperty where
+  type PropertyType "KeyAttributes" SliMetricProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue SliMetricProperty {..}
+    = SliMetricProperty {keyAttributes = Prelude.pure newValue, ..}
+instance Property "MetricDataQueries" SliMetricProperty where
+  type PropertyType "MetricDataQueries" SliMetricProperty = [MetricDataQueryProperty]
+  set newValue SliMetricProperty {..}
+    = SliMetricProperty {metricDataQueries = Prelude.pure newValue, ..}
+instance Property "MetricType" SliMetricProperty where
+  type PropertyType "MetricType" SliMetricProperty = Value Prelude.Text
+  set newValue SliMetricProperty {..}
+    = SliMetricProperty {metricType = Prelude.pure newValue, ..}
+instance Property "OperationName" SliMetricProperty where
+  type PropertyType "OperationName" SliMetricProperty = Value Prelude.Text
+  set newValue SliMetricProperty {..}
+    = SliMetricProperty {operationName = Prelude.pure newValue, ..}
+instance Property "PeriodSeconds" SliMetricProperty where
+  type PropertyType "PeriodSeconds" SliMetricProperty = Value Prelude.Integer
+  set newValue SliMetricProperty {..}
+    = SliMetricProperty {periodSeconds = Prelude.pure newValue, ..}
+instance Property "Statistic" SliMetricProperty where
+  type PropertyType "Statistic" SliMetricProperty = Value Prelude.Text
+  set newValue SliMetricProperty {..}
+    = SliMetricProperty {statistic = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/SliMetricProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/SliMetricProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/SliMetricProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.SliMetricProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SliMetricProperty :: Prelude.Type
+instance ToResourceProperties SliMetricProperty
+instance Prelude.Eq SliMetricProperty
+instance Prelude.Show SliMetricProperty
+instance JSON.ToJSON SliMetricProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/SliProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/SliProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/SliProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.SliProperty (
+        module Exports, SliProperty(..), mkSliProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApplicationSignals.ServiceLevelObjective.SliMetricProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SliProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-sli.html>
+    SliProperty {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-sli.html#cfn-applicationsignals-servicelevelobjective-sli-comparisonoperator>
+                 comparisonOperator :: (Value Prelude.Text),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-sli.html#cfn-applicationsignals-servicelevelobjective-sli-metricthreshold>
+                 metricThreshold :: (Value Prelude.Double),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-sli.html#cfn-applicationsignals-servicelevelobjective-sli-slimetric>
+                 sliMetric :: SliMetricProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSliProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Double -> SliMetricProperty -> SliProperty
+mkSliProperty comparisonOperator metricThreshold sliMetric
+  = SliProperty
+      {haddock_workaround_ = (), comparisonOperator = comparisonOperator,
+       metricThreshold = metricThreshold, sliMetric = sliMetric}
+instance ToResourceProperties SliProperty where
+  toResourceProperties SliProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.Sli",
+         supportsTags = Prelude.False,
+         properties = ["ComparisonOperator" JSON..= comparisonOperator,
+                       "MetricThreshold" JSON..= metricThreshold,
+                       "SliMetric" JSON..= sliMetric]}
+instance JSON.ToJSON SliProperty where
+  toJSON SliProperty {..}
+    = JSON.object
+        ["ComparisonOperator" JSON..= comparisonOperator,
+         "MetricThreshold" JSON..= metricThreshold,
+         "SliMetric" JSON..= sliMetric]
+instance Property "ComparisonOperator" SliProperty where
+  type PropertyType "ComparisonOperator" SliProperty = Value Prelude.Text
+  set newValue SliProperty {..}
+    = SliProperty {comparisonOperator = newValue, ..}
+instance Property "MetricThreshold" SliProperty where
+  type PropertyType "MetricThreshold" SliProperty = Value Prelude.Double
+  set newValue SliProperty {..}
+    = SliProperty {metricThreshold = newValue, ..}
+instance Property "SliMetric" SliProperty where
+  type PropertyType "SliMetric" SliProperty = SliMetricProperty
+  set newValue SliProperty {..}
+    = SliProperty {sliMetric = newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/SliProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/SliProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/SliProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.SliProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SliProperty :: Prelude.Type
+instance ToResourceProperties SliProperty
+instance Prelude.Eq SliProperty
+instance Prelude.Show SliProperty
+instance JSON.ToJSON SliProperty
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/WindowProperty.hs b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/WindowProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/WindowProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.WindowProperty (
+        WindowProperty(..), mkWindowProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data WindowProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-window.html>
+    WindowProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-window.html#cfn-applicationsignals-servicelevelobjective-window-duration>
+                    duration :: (Value Prelude.Integer),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationsignals-servicelevelobjective-window.html#cfn-applicationsignals-servicelevelobjective-window-durationunit>
+                    durationUnit :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkWindowProperty ::
+  Value Prelude.Integer -> Value Prelude.Text -> WindowProperty
+mkWindowProperty duration durationUnit
+  = WindowProperty
+      {haddock_workaround_ = (), duration = duration,
+       durationUnit = durationUnit}
+instance ToResourceProperties WindowProperty where
+  toResourceProperties WindowProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApplicationSignals::ServiceLevelObjective.Window",
+         supportsTags = Prelude.False,
+         properties = ["Duration" JSON..= duration,
+                       "DurationUnit" JSON..= durationUnit]}
+instance JSON.ToJSON WindowProperty where
+  toJSON WindowProperty {..}
+    = JSON.object
+        ["Duration" JSON..= duration, "DurationUnit" JSON..= durationUnit]
+instance Property "Duration" WindowProperty where
+  type PropertyType "Duration" WindowProperty = Value Prelude.Integer
+  set newValue WindowProperty {..}
+    = WindowProperty {duration = newValue, ..}
+instance Property "DurationUnit" WindowProperty where
+  type PropertyType "DurationUnit" WindowProperty = Value Prelude.Text
+  set newValue WindowProperty {..}
+    = WindowProperty {durationUnit = newValue, ..}
diff --git a/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/WindowProperty.hs-boot b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/WindowProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApplicationSignals/ServiceLevelObjective/WindowProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApplicationSignals.ServiceLevelObjective.WindowProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data WindowProperty :: Prelude.Type
+instance ToResourceProperties WindowProperty
+instance Prelude.Eq WindowProperty
+instance Prelude.Show WindowProperty
+instance JSON.ToJSON WindowProperty
diff --git a/stratosphere-applicationsignals.cabal b/stratosphere-applicationsignals.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-applicationsignals.cabal
@@ -0,0 +1,94 @@
+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-applicationsignals
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS ApplicationSignals.
+description:    Integration into stratosphere to generate resources and properties for AWS ApplicationSignals
+category:       AWS, Cloud, ApplicationSignals
+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.ApplicationSignals.Discovery
+      Stratosphere.ApplicationSignals.GroupingConfiguration
+      Stratosphere.ApplicationSignals.GroupingConfiguration.GroupingAttributeDefinitionProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.BurnRateConfigurationProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.CalendarIntervalProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.DependencyConfigProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.DimensionProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.ExclusionWindowProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.GoalProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.IntervalProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.MetricDataQueryProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.MetricProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.MetricStatProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.MonitoredRequestCountMetricProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.RecurrenceRuleProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.RequestBasedSliMetricProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.RequestBasedSliProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.RollingIntervalProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.SliMetricProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.SliProperty
+      Stratosphere.ApplicationSignals.ServiceLevelObjective.WindowProperty
+  other-modules:
+      Paths_stratosphere_applicationsignals
+  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
