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/DevOpsGuru/LogAnomalyDetectionIntegration.hs b/gen/Stratosphere/DevOpsGuru/LogAnomalyDetectionIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DevOpsGuru/LogAnomalyDetectionIntegration.hs
@@ -0,0 +1,21 @@
+module Stratosphere.DevOpsGuru.LogAnomalyDetectionIntegration (
+        LogAnomalyDetectionIntegration(..),
+        mkLogAnomalyDetectionIntegration
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LogAnomalyDetectionIntegration
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-devopsguru-loganomalydetectionintegration.html>
+    LogAnomalyDetectionIntegration {haddock_workaround_ :: ()}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLogAnomalyDetectionIntegration :: LogAnomalyDetectionIntegration
+mkLogAnomalyDetectionIntegration
+  = LogAnomalyDetectionIntegration {haddock_workaround_ = ()}
+instance ToResourceProperties LogAnomalyDetectionIntegration where
+  toResourceProperties LogAnomalyDetectionIntegration {}
+    = ResourceProperties
+        {awsType = "AWS::DevOpsGuru::LogAnomalyDetectionIntegration",
+         supportsTags = Prelude.False, properties = []}
+instance JSON.ToJSON LogAnomalyDetectionIntegration where
+  toJSON LogAnomalyDetectionIntegration {} = JSON.object []
diff --git a/gen/Stratosphere/DevOpsGuru/NotificationChannel.hs b/gen/Stratosphere/DevOpsGuru/NotificationChannel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DevOpsGuru/NotificationChannel.hs
@@ -0,0 +1,31 @@
+module Stratosphere.DevOpsGuru.NotificationChannel (
+        module Exports, NotificationChannel(..), mkNotificationChannel
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DevOpsGuru.NotificationChannel.NotificationChannelConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data NotificationChannel
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-devopsguru-notificationchannel.html>
+    NotificationChannel {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-devopsguru-notificationchannel.html#cfn-devopsguru-notificationchannel-config>
+                         config :: NotificationChannelConfigProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNotificationChannel ::
+  NotificationChannelConfigProperty -> NotificationChannel
+mkNotificationChannel config
+  = NotificationChannel {haddock_workaround_ = (), config = config}
+instance ToResourceProperties NotificationChannel where
+  toResourceProperties NotificationChannel {..}
+    = ResourceProperties
+        {awsType = "AWS::DevOpsGuru::NotificationChannel",
+         supportsTags = Prelude.False,
+         properties = ["Config" JSON..= config]}
+instance JSON.ToJSON NotificationChannel where
+  toJSON NotificationChannel {..}
+    = JSON.object ["Config" JSON..= config]
+instance Property "Config" NotificationChannel where
+  type PropertyType "Config" NotificationChannel = NotificationChannelConfigProperty
+  set newValue NotificationChannel {..}
+    = NotificationChannel {config = newValue, ..}
diff --git a/gen/Stratosphere/DevOpsGuru/NotificationChannel/NotificationChannelConfigProperty.hs b/gen/Stratosphere/DevOpsGuru/NotificationChannel/NotificationChannelConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DevOpsGuru/NotificationChannel/NotificationChannelConfigProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.DevOpsGuru.NotificationChannel.NotificationChannelConfigProperty (
+        module Exports, NotificationChannelConfigProperty(..),
+        mkNotificationChannelConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DevOpsGuru.NotificationChannel.NotificationFilterConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.DevOpsGuru.NotificationChannel.SnsChannelConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data NotificationChannelConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-notificationchannel-notificationchannelconfig.html>
+    NotificationChannelConfigProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-notificationchannel-notificationchannelconfig.html#cfn-devopsguru-notificationchannel-notificationchannelconfig-filters>
+                                       filters :: (Prelude.Maybe NotificationFilterConfigProperty),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-notificationchannel-notificationchannelconfig.html#cfn-devopsguru-notificationchannel-notificationchannelconfig-sns>
+                                       sns :: (Prelude.Maybe SnsChannelConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNotificationChannelConfigProperty ::
+  NotificationChannelConfigProperty
+mkNotificationChannelConfigProperty
+  = NotificationChannelConfigProperty
+      {haddock_workaround_ = (), filters = Prelude.Nothing,
+       sns = Prelude.Nothing}
+instance ToResourceProperties NotificationChannelConfigProperty where
+  toResourceProperties NotificationChannelConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DevOpsGuru::NotificationChannel.NotificationChannelConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Filters" Prelude.<$> filters,
+                            (JSON..=) "Sns" Prelude.<$> sns])}
+instance JSON.ToJSON NotificationChannelConfigProperty where
+  toJSON NotificationChannelConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Filters" Prelude.<$> filters,
+               (JSON..=) "Sns" Prelude.<$> sns]))
+instance Property "Filters" NotificationChannelConfigProperty where
+  type PropertyType "Filters" NotificationChannelConfigProperty = NotificationFilterConfigProperty
+  set newValue NotificationChannelConfigProperty {..}
+    = NotificationChannelConfigProperty
+        {filters = Prelude.pure newValue, ..}
+instance Property "Sns" NotificationChannelConfigProperty where
+  type PropertyType "Sns" NotificationChannelConfigProperty = SnsChannelConfigProperty
+  set newValue NotificationChannelConfigProperty {..}
+    = NotificationChannelConfigProperty
+        {sns = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DevOpsGuru/NotificationChannel/NotificationChannelConfigProperty.hs-boot b/gen/Stratosphere/DevOpsGuru/NotificationChannel/NotificationChannelConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DevOpsGuru/NotificationChannel/NotificationChannelConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DevOpsGuru.NotificationChannel.NotificationChannelConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NotificationChannelConfigProperty :: Prelude.Type
+instance ToResourceProperties NotificationChannelConfigProperty
+instance Prelude.Eq NotificationChannelConfigProperty
+instance Prelude.Show NotificationChannelConfigProperty
+instance JSON.ToJSON NotificationChannelConfigProperty
diff --git a/gen/Stratosphere/DevOpsGuru/NotificationChannel/NotificationFilterConfigProperty.hs b/gen/Stratosphere/DevOpsGuru/NotificationChannel/NotificationFilterConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DevOpsGuru/NotificationChannel/NotificationFilterConfigProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.DevOpsGuru.NotificationChannel.NotificationFilterConfigProperty (
+        NotificationFilterConfigProperty(..),
+        mkNotificationFilterConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NotificationFilterConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-notificationchannel-notificationfilterconfig.html>
+    NotificationFilterConfigProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-notificationchannel-notificationfilterconfig.html#cfn-devopsguru-notificationchannel-notificationfilterconfig-messagetypes>
+                                      messageTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-notificationchannel-notificationfilterconfig.html#cfn-devopsguru-notificationchannel-notificationfilterconfig-severities>
+                                      severities :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNotificationFilterConfigProperty ::
+  NotificationFilterConfigProperty
+mkNotificationFilterConfigProperty
+  = NotificationFilterConfigProperty
+      {haddock_workaround_ = (), messageTypes = Prelude.Nothing,
+       severities = Prelude.Nothing}
+instance ToResourceProperties NotificationFilterConfigProperty where
+  toResourceProperties NotificationFilterConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DevOpsGuru::NotificationChannel.NotificationFilterConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "MessageTypes" Prelude.<$> messageTypes,
+                            (JSON..=) "Severities" Prelude.<$> severities])}
+instance JSON.ToJSON NotificationFilterConfigProperty where
+  toJSON NotificationFilterConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "MessageTypes" Prelude.<$> messageTypes,
+               (JSON..=) "Severities" Prelude.<$> severities]))
+instance Property "MessageTypes" NotificationFilterConfigProperty where
+  type PropertyType "MessageTypes" NotificationFilterConfigProperty = ValueList Prelude.Text
+  set newValue NotificationFilterConfigProperty {..}
+    = NotificationFilterConfigProperty
+        {messageTypes = Prelude.pure newValue, ..}
+instance Property "Severities" NotificationFilterConfigProperty where
+  type PropertyType "Severities" NotificationFilterConfigProperty = ValueList Prelude.Text
+  set newValue NotificationFilterConfigProperty {..}
+    = NotificationFilterConfigProperty
+        {severities = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DevOpsGuru/NotificationChannel/NotificationFilterConfigProperty.hs-boot b/gen/Stratosphere/DevOpsGuru/NotificationChannel/NotificationFilterConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DevOpsGuru/NotificationChannel/NotificationFilterConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DevOpsGuru.NotificationChannel.NotificationFilterConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NotificationFilterConfigProperty :: Prelude.Type
+instance ToResourceProperties NotificationFilterConfigProperty
+instance Prelude.Eq NotificationFilterConfigProperty
+instance Prelude.Show NotificationFilterConfigProperty
+instance JSON.ToJSON NotificationFilterConfigProperty
diff --git a/gen/Stratosphere/DevOpsGuru/NotificationChannel/SnsChannelConfigProperty.hs b/gen/Stratosphere/DevOpsGuru/NotificationChannel/SnsChannelConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DevOpsGuru/NotificationChannel/SnsChannelConfigProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.DevOpsGuru.NotificationChannel.SnsChannelConfigProperty (
+        SnsChannelConfigProperty(..), mkSnsChannelConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SnsChannelConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-notificationchannel-snschannelconfig.html>
+    SnsChannelConfigProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-notificationchannel-snschannelconfig.html#cfn-devopsguru-notificationchannel-snschannelconfig-topicarn>
+                              topicArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSnsChannelConfigProperty :: SnsChannelConfigProperty
+mkSnsChannelConfigProperty
+  = SnsChannelConfigProperty
+      {haddock_workaround_ = (), topicArn = Prelude.Nothing}
+instance ToResourceProperties SnsChannelConfigProperty where
+  toResourceProperties SnsChannelConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DevOpsGuru::NotificationChannel.SnsChannelConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "TopicArn" Prelude.<$> topicArn])}
+instance JSON.ToJSON SnsChannelConfigProperty where
+  toJSON SnsChannelConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "TopicArn" Prelude.<$> topicArn]))
+instance Property "TopicArn" SnsChannelConfigProperty where
+  type PropertyType "TopicArn" SnsChannelConfigProperty = Value Prelude.Text
+  set newValue SnsChannelConfigProperty {..}
+    = SnsChannelConfigProperty {topicArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DevOpsGuru/NotificationChannel/SnsChannelConfigProperty.hs-boot b/gen/Stratosphere/DevOpsGuru/NotificationChannel/SnsChannelConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DevOpsGuru/NotificationChannel/SnsChannelConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DevOpsGuru.NotificationChannel.SnsChannelConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SnsChannelConfigProperty :: Prelude.Type
+instance ToResourceProperties SnsChannelConfigProperty
+instance Prelude.Eq SnsChannelConfigProperty
+instance Prelude.Show SnsChannelConfigProperty
+instance JSON.ToJSON SnsChannelConfigProperty
diff --git a/gen/Stratosphere/DevOpsGuru/ResourceCollection.hs b/gen/Stratosphere/DevOpsGuru/ResourceCollection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DevOpsGuru/ResourceCollection.hs
@@ -0,0 +1,35 @@
+module Stratosphere.DevOpsGuru.ResourceCollection (
+        module Exports, ResourceCollection(..), mkResourceCollection
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DevOpsGuru.ResourceCollection.ResourceCollectionFilterProperty as Exports
+import Stratosphere.ResourceProperties
+data ResourceCollection
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-devopsguru-resourcecollection.html>
+    ResourceCollection {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-devopsguru-resourcecollection.html#cfn-devopsguru-resourcecollection-resourcecollectionfilter>
+                        resourceCollectionFilter :: ResourceCollectionFilterProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResourceCollection ::
+  ResourceCollectionFilterProperty -> ResourceCollection
+mkResourceCollection resourceCollectionFilter
+  = ResourceCollection
+      {haddock_workaround_ = (),
+       resourceCollectionFilter = resourceCollectionFilter}
+instance ToResourceProperties ResourceCollection where
+  toResourceProperties ResourceCollection {..}
+    = ResourceProperties
+        {awsType = "AWS::DevOpsGuru::ResourceCollection",
+         supportsTags = Prelude.False,
+         properties = ["ResourceCollectionFilter"
+                         JSON..= resourceCollectionFilter]}
+instance JSON.ToJSON ResourceCollection where
+  toJSON ResourceCollection {..}
+    = JSON.object
+        ["ResourceCollectionFilter" JSON..= resourceCollectionFilter]
+instance Property "ResourceCollectionFilter" ResourceCollection where
+  type PropertyType "ResourceCollectionFilter" ResourceCollection = ResourceCollectionFilterProperty
+  set newValue ResourceCollection {..}
+    = ResourceCollection {resourceCollectionFilter = newValue, ..}
diff --git a/gen/Stratosphere/DevOpsGuru/ResourceCollection/CloudFormationCollectionFilterProperty.hs b/gen/Stratosphere/DevOpsGuru/ResourceCollection/CloudFormationCollectionFilterProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DevOpsGuru/ResourceCollection/CloudFormationCollectionFilterProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.DevOpsGuru.ResourceCollection.CloudFormationCollectionFilterProperty (
+        CloudFormationCollectionFilterProperty(..),
+        mkCloudFormationCollectionFilterProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CloudFormationCollectionFilterProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-resourcecollection-cloudformationcollectionfilter.html>
+    CloudFormationCollectionFilterProperty {haddock_workaround_ :: (),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-resourcecollection-cloudformationcollectionfilter.html#cfn-devopsguru-resourcecollection-cloudformationcollectionfilter-stacknames>
+                                            stackNames :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCloudFormationCollectionFilterProperty ::
+  CloudFormationCollectionFilterProperty
+mkCloudFormationCollectionFilterProperty
+  = CloudFormationCollectionFilterProperty
+      {haddock_workaround_ = (), stackNames = Prelude.Nothing}
+instance ToResourceProperties CloudFormationCollectionFilterProperty where
+  toResourceProperties CloudFormationCollectionFilterProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DevOpsGuru::ResourceCollection.CloudFormationCollectionFilter",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "StackNames" Prelude.<$> stackNames])}
+instance JSON.ToJSON CloudFormationCollectionFilterProperty where
+  toJSON CloudFormationCollectionFilterProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "StackNames" Prelude.<$> stackNames]))
+instance Property "StackNames" CloudFormationCollectionFilterProperty where
+  type PropertyType "StackNames" CloudFormationCollectionFilterProperty = ValueList Prelude.Text
+  set newValue CloudFormationCollectionFilterProperty {..}
+    = CloudFormationCollectionFilterProperty
+        {stackNames = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DevOpsGuru/ResourceCollection/CloudFormationCollectionFilterProperty.hs-boot b/gen/Stratosphere/DevOpsGuru/ResourceCollection/CloudFormationCollectionFilterProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DevOpsGuru/ResourceCollection/CloudFormationCollectionFilterProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DevOpsGuru.ResourceCollection.CloudFormationCollectionFilterProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CloudFormationCollectionFilterProperty :: Prelude.Type
+instance ToResourceProperties CloudFormationCollectionFilterProperty
+instance Prelude.Eq CloudFormationCollectionFilterProperty
+instance Prelude.Show CloudFormationCollectionFilterProperty
+instance JSON.ToJSON CloudFormationCollectionFilterProperty
diff --git a/gen/Stratosphere/DevOpsGuru/ResourceCollection/ResourceCollectionFilterProperty.hs b/gen/Stratosphere/DevOpsGuru/ResourceCollection/ResourceCollectionFilterProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DevOpsGuru/ResourceCollection/ResourceCollectionFilterProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.DevOpsGuru.ResourceCollection.ResourceCollectionFilterProperty (
+        module Exports, ResourceCollectionFilterProperty(..),
+        mkResourceCollectionFilterProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DevOpsGuru.ResourceCollection.CloudFormationCollectionFilterProperty as Exports
+import {-# SOURCE #-} Stratosphere.DevOpsGuru.ResourceCollection.TagCollectionProperty as Exports
+import Stratosphere.ResourceProperties
+data ResourceCollectionFilterProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-resourcecollection-resourcecollectionfilter.html>
+    ResourceCollectionFilterProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-resourcecollection-resourcecollectionfilter.html#cfn-devopsguru-resourcecollection-resourcecollectionfilter-cloudformation>
+                                      cloudFormation :: (Prelude.Maybe CloudFormationCollectionFilterProperty),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-resourcecollection-resourcecollectionfilter.html#cfn-devopsguru-resourcecollection-resourcecollectionfilter-tags>
+                                      tags :: (Prelude.Maybe [TagCollectionProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResourceCollectionFilterProperty ::
+  ResourceCollectionFilterProperty
+mkResourceCollectionFilterProperty
+  = ResourceCollectionFilterProperty
+      {haddock_workaround_ = (), cloudFormation = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties ResourceCollectionFilterProperty where
+  toResourceProperties ResourceCollectionFilterProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DevOpsGuru::ResourceCollection.ResourceCollectionFilter",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CloudFormation" Prelude.<$> cloudFormation,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON ResourceCollectionFilterProperty where
+  toJSON ResourceCollectionFilterProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CloudFormation" Prelude.<$> cloudFormation,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "CloudFormation" ResourceCollectionFilterProperty where
+  type PropertyType "CloudFormation" ResourceCollectionFilterProperty = CloudFormationCollectionFilterProperty
+  set newValue ResourceCollectionFilterProperty {..}
+    = ResourceCollectionFilterProperty
+        {cloudFormation = Prelude.pure newValue, ..}
+instance Property "Tags" ResourceCollectionFilterProperty where
+  type PropertyType "Tags" ResourceCollectionFilterProperty = [TagCollectionProperty]
+  set newValue ResourceCollectionFilterProperty {..}
+    = ResourceCollectionFilterProperty
+        {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DevOpsGuru/ResourceCollection/ResourceCollectionFilterProperty.hs-boot b/gen/Stratosphere/DevOpsGuru/ResourceCollection/ResourceCollectionFilterProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DevOpsGuru/ResourceCollection/ResourceCollectionFilterProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DevOpsGuru.ResourceCollection.ResourceCollectionFilterProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ResourceCollectionFilterProperty :: Prelude.Type
+instance ToResourceProperties ResourceCollectionFilterProperty
+instance Prelude.Eq ResourceCollectionFilterProperty
+instance Prelude.Show ResourceCollectionFilterProperty
+instance JSON.ToJSON ResourceCollectionFilterProperty
diff --git a/gen/Stratosphere/DevOpsGuru/ResourceCollection/TagCollectionProperty.hs b/gen/Stratosphere/DevOpsGuru/ResourceCollection/TagCollectionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DevOpsGuru/ResourceCollection/TagCollectionProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.DevOpsGuru.ResourceCollection.TagCollectionProperty (
+        TagCollectionProperty(..), mkTagCollectionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TagCollectionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-resourcecollection-tagcollection.html>
+    TagCollectionProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-resourcecollection-tagcollection.html#cfn-devopsguru-resourcecollection-tagcollection-appboundarykey>
+                           appBoundaryKey :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-resourcecollection-tagcollection.html#cfn-devopsguru-resourcecollection-tagcollection-tagvalues>
+                           tagValues :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTagCollectionProperty :: TagCollectionProperty
+mkTagCollectionProperty
+  = TagCollectionProperty
+      {haddock_workaround_ = (), appBoundaryKey = Prelude.Nothing,
+       tagValues = Prelude.Nothing}
+instance ToResourceProperties TagCollectionProperty where
+  toResourceProperties TagCollectionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DevOpsGuru::ResourceCollection.TagCollection",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AppBoundaryKey" Prelude.<$> appBoundaryKey,
+                            (JSON..=) "TagValues" Prelude.<$> tagValues])}
+instance JSON.ToJSON TagCollectionProperty where
+  toJSON TagCollectionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AppBoundaryKey" Prelude.<$> appBoundaryKey,
+               (JSON..=) "TagValues" Prelude.<$> tagValues]))
+instance Property "AppBoundaryKey" TagCollectionProperty where
+  type PropertyType "AppBoundaryKey" TagCollectionProperty = Value Prelude.Text
+  set newValue TagCollectionProperty {..}
+    = TagCollectionProperty
+        {appBoundaryKey = Prelude.pure newValue, ..}
+instance Property "TagValues" TagCollectionProperty where
+  type PropertyType "TagValues" TagCollectionProperty = ValueList Prelude.Text
+  set newValue TagCollectionProperty {..}
+    = TagCollectionProperty {tagValues = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DevOpsGuru/ResourceCollection/TagCollectionProperty.hs-boot b/gen/Stratosphere/DevOpsGuru/ResourceCollection/TagCollectionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DevOpsGuru/ResourceCollection/TagCollectionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DevOpsGuru.ResourceCollection.TagCollectionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TagCollectionProperty :: Prelude.Type
+instance ToResourceProperties TagCollectionProperty
+instance Prelude.Eq TagCollectionProperty
+instance Prelude.Show TagCollectionProperty
+instance JSON.ToJSON TagCollectionProperty
diff --git a/stratosphere-devopsguru.cabal b/stratosphere-devopsguru.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-devopsguru.cabal
@@ -0,0 +1,81 @@
+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-devopsguru
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS DevOpsGuru.
+description:    Integration into stratosphere to generate resources and properties for AWS DevOpsGuru
+category:       AWS, Cloud, DevOpsGuru
+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.DevOpsGuru.LogAnomalyDetectionIntegration
+      Stratosphere.DevOpsGuru.NotificationChannel
+      Stratosphere.DevOpsGuru.NotificationChannel.NotificationChannelConfigProperty
+      Stratosphere.DevOpsGuru.NotificationChannel.NotificationFilterConfigProperty
+      Stratosphere.DevOpsGuru.NotificationChannel.SnsChannelConfigProperty
+      Stratosphere.DevOpsGuru.ResourceCollection
+      Stratosphere.DevOpsGuru.ResourceCollection.CloudFormationCollectionFilterProperty
+      Stratosphere.DevOpsGuru.ResourceCollection.ResourceCollectionFilterProperty
+      Stratosphere.DevOpsGuru.ResourceCollection.TagCollectionProperty
+  other-modules:
+      Paths_stratosphere_devopsguru
+  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
