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/CloudFront/AnycastIpList.hs b/gen/Stratosphere/CloudFront/AnycastIpList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/AnycastIpList.hs
@@ -0,0 +1,63 @@
+module Stratosphere.CloudFront.AnycastIpList (
+        module Exports, AnycastIpList(..), mkAnycastIpList
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.AnycastIpList.TagsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnycastIpList
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-anycastiplist.html>
+    AnycastIpList {haddock_workaround_ :: (),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-anycastiplist.html#cfn-cloudfront-anycastiplist-ipaddresstype>
+                   ipAddressType :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-anycastiplist.html#cfn-cloudfront-anycastiplist-ipcount>
+                   ipCount :: (Value Prelude.Integer),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-anycastiplist.html#cfn-cloudfront-anycastiplist-name>
+                   name :: (Value Prelude.Text),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-anycastiplist.html#cfn-cloudfront-anycastiplist-tags>
+                   tags :: (Prelude.Maybe TagsProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnycastIpList ::
+  Value Prelude.Integer -> Value Prelude.Text -> AnycastIpList
+mkAnycastIpList ipCount name
+  = AnycastIpList
+      {haddock_workaround_ = (), ipCount = ipCount, name = name,
+       ipAddressType = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties AnycastIpList where
+  toResourceProperties AnycastIpList {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::AnycastIpList",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IpCount" JSON..= ipCount, "Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "IpAddressType" Prelude.<$> ipAddressType,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON AnycastIpList where
+  toJSON AnycastIpList {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IpCount" JSON..= ipCount, "Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "IpAddressType" Prelude.<$> ipAddressType,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "IpAddressType" AnycastIpList where
+  type PropertyType "IpAddressType" AnycastIpList = Value Prelude.Text
+  set newValue AnycastIpList {..}
+    = AnycastIpList {ipAddressType = Prelude.pure newValue, ..}
+instance Property "IpCount" AnycastIpList where
+  type PropertyType "IpCount" AnycastIpList = Value Prelude.Integer
+  set newValue AnycastIpList {..}
+    = AnycastIpList {ipCount = newValue, ..}
+instance Property "Name" AnycastIpList where
+  type PropertyType "Name" AnycastIpList = Value Prelude.Text
+  set newValue AnycastIpList {..}
+    = AnycastIpList {name = newValue, ..}
+instance Property "Tags" AnycastIpList where
+  type PropertyType "Tags" AnycastIpList = TagsProperty
+  set newValue AnycastIpList {..}
+    = AnycastIpList {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/AnycastIpList/AnycastIpListProperty.hs b/gen/Stratosphere/CloudFront/AnycastIpList/AnycastIpListProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/AnycastIpList/AnycastIpListProperty.hs
@@ -0,0 +1,104 @@
+module Stratosphere.CloudFront.AnycastIpList.AnycastIpListProperty (
+        AnycastIpListProperty(..), mkAnycastIpListProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnycastIpListProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-anycastiplist-anycastiplist.html>
+    AnycastIpListProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-anycastiplist-anycastiplist.html#cfn-cloudfront-anycastiplist-anycastiplist-anycastips>
+                           anycastIps :: (ValueList Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-anycastiplist-anycastiplist.html#cfn-cloudfront-anycastiplist-anycastiplist-arn>
+                           arn :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-anycastiplist-anycastiplist.html#cfn-cloudfront-anycastiplist-anycastiplist-id>
+                           id :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-anycastiplist-anycastiplist.html#cfn-cloudfront-anycastiplist-anycastiplist-ipaddresstype>
+                           ipAddressType :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-anycastiplist-anycastiplist.html#cfn-cloudfront-anycastiplist-anycastiplist-ipcount>
+                           ipCount :: (Value Prelude.Integer),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-anycastiplist-anycastiplist.html#cfn-cloudfront-anycastiplist-anycastiplist-lastmodifiedtime>
+                           lastModifiedTime :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-anycastiplist-anycastiplist.html#cfn-cloudfront-anycastiplist-anycastiplist-name>
+                           name :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-anycastiplist-anycastiplist.html#cfn-cloudfront-anycastiplist-anycastiplist-status>
+                           status :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnycastIpListProperty ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text
+        -> Value Prelude.Integer
+           -> Value Prelude.Text
+              -> Value Prelude.Text
+                 -> Value Prelude.Text -> AnycastIpListProperty
+mkAnycastIpListProperty
+  anycastIps
+  arn
+  id
+  ipCount
+  lastModifiedTime
+  name
+  status
+  = AnycastIpListProperty
+      {haddock_workaround_ = (), anycastIps = anycastIps, arn = arn,
+       id = id, ipCount = ipCount, lastModifiedTime = lastModifiedTime,
+       name = name, status = status, ipAddressType = Prelude.Nothing}
+instance ToResourceProperties AnycastIpListProperty where
+  toResourceProperties AnycastIpListProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::AnycastIpList.AnycastIpList",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AnycastIps" JSON..= anycastIps, "Arn" JSON..= arn,
+                            "Id" JSON..= id, "IpCount" JSON..= ipCount,
+                            "LastModifiedTime" JSON..= lastModifiedTime, "Name" JSON..= name,
+                            "Status" JSON..= status]
+                           (Prelude.catMaybes
+                              [(JSON..=) "IpAddressType" Prelude.<$> ipAddressType]))}
+instance JSON.ToJSON AnycastIpListProperty where
+  toJSON AnycastIpListProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AnycastIps" JSON..= anycastIps, "Arn" JSON..= arn,
+               "Id" JSON..= id, "IpCount" JSON..= ipCount,
+               "LastModifiedTime" JSON..= lastModifiedTime, "Name" JSON..= name,
+               "Status" JSON..= status]
+              (Prelude.catMaybes
+                 [(JSON..=) "IpAddressType" Prelude.<$> ipAddressType])))
+instance Property "AnycastIps" AnycastIpListProperty where
+  type PropertyType "AnycastIps" AnycastIpListProperty = ValueList Prelude.Text
+  set newValue AnycastIpListProperty {..}
+    = AnycastIpListProperty {anycastIps = newValue, ..}
+instance Property "Arn" AnycastIpListProperty where
+  type PropertyType "Arn" AnycastIpListProperty = Value Prelude.Text
+  set newValue AnycastIpListProperty {..}
+    = AnycastIpListProperty {arn = newValue, ..}
+instance Property "Id" AnycastIpListProperty where
+  type PropertyType "Id" AnycastIpListProperty = Value Prelude.Text
+  set newValue AnycastIpListProperty {..}
+    = AnycastIpListProperty {id = newValue, ..}
+instance Property "IpAddressType" AnycastIpListProperty where
+  type PropertyType "IpAddressType" AnycastIpListProperty = Value Prelude.Text
+  set newValue AnycastIpListProperty {..}
+    = AnycastIpListProperty {ipAddressType = Prelude.pure newValue, ..}
+instance Property "IpCount" AnycastIpListProperty where
+  type PropertyType "IpCount" AnycastIpListProperty = Value Prelude.Integer
+  set newValue AnycastIpListProperty {..}
+    = AnycastIpListProperty {ipCount = newValue, ..}
+instance Property "LastModifiedTime" AnycastIpListProperty where
+  type PropertyType "LastModifiedTime" AnycastIpListProperty = Value Prelude.Text
+  set newValue AnycastIpListProperty {..}
+    = AnycastIpListProperty {lastModifiedTime = newValue, ..}
+instance Property "Name" AnycastIpListProperty where
+  type PropertyType "Name" AnycastIpListProperty = Value Prelude.Text
+  set newValue AnycastIpListProperty {..}
+    = AnycastIpListProperty {name = newValue, ..}
+instance Property "Status" AnycastIpListProperty where
+  type PropertyType "Status" AnycastIpListProperty = Value Prelude.Text
+  set newValue AnycastIpListProperty {..}
+    = AnycastIpListProperty {status = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/AnycastIpList/AnycastIpListProperty.hs-boot b/gen/Stratosphere/CloudFront/AnycastIpList/AnycastIpListProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/AnycastIpList/AnycastIpListProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.AnycastIpList.AnycastIpListProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnycastIpListProperty :: Prelude.Type
+instance ToResourceProperties AnycastIpListProperty
+instance Prelude.Eq AnycastIpListProperty
+instance Prelude.Show AnycastIpListProperty
+instance JSON.ToJSON AnycastIpListProperty
diff --git a/gen/Stratosphere/CloudFront/AnycastIpList/TagsProperty.hs b/gen/Stratosphere/CloudFront/AnycastIpList/TagsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/AnycastIpList/TagsProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.CloudFront.AnycastIpList.TagsProperty (
+        TagsProperty(..), mkTagsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+data TagsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-anycastiplist-tags.html>
+    TagsProperty {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-anycastiplist-tags.html#cfn-cloudfront-anycastiplist-tags-items>
+                  items :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTagsProperty :: TagsProperty
+mkTagsProperty
+  = TagsProperty {haddock_workaround_ = (), items = Prelude.Nothing}
+instance ToResourceProperties TagsProperty where
+  toResourceProperties TagsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::AnycastIpList.Tags",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Items" Prelude.<$> items])}
+instance JSON.ToJSON TagsProperty where
+  toJSON TagsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Items" Prelude.<$> items]))
+instance Property "Items" TagsProperty where
+  type PropertyType "Items" TagsProperty = [Tag]
+  set newValue TagsProperty {..}
+    = TagsProperty {items = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/AnycastIpList/TagsProperty.hs-boot b/gen/Stratosphere/CloudFront/AnycastIpList/TagsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/AnycastIpList/TagsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.AnycastIpList.TagsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TagsProperty :: Prelude.Type
+instance ToResourceProperties TagsProperty
+instance Prelude.Eq TagsProperty
+instance Prelude.Show TagsProperty
+instance JSON.ToJSON TagsProperty
diff --git a/gen/Stratosphere/CloudFront/CachePolicy.hs b/gen/Stratosphere/CloudFront/CachePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/CachePolicy.hs
@@ -0,0 +1,31 @@
+module Stratosphere.CloudFront.CachePolicy (
+        module Exports, CachePolicy(..), mkCachePolicy
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.CachePolicy.CachePolicyConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data CachePolicy
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-cachepolicy.html>
+    CachePolicy {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-cachepolicy.html#cfn-cloudfront-cachepolicy-cachepolicyconfig>
+                 cachePolicyConfig :: CachePolicyConfigProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCachePolicy :: CachePolicyConfigProperty -> CachePolicy
+mkCachePolicy cachePolicyConfig
+  = CachePolicy
+      {haddock_workaround_ = (), cachePolicyConfig = cachePolicyConfig}
+instance ToResourceProperties CachePolicy where
+  toResourceProperties CachePolicy {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::CachePolicy",
+         supportsTags = Prelude.False,
+         properties = ["CachePolicyConfig" JSON..= cachePolicyConfig]}
+instance JSON.ToJSON CachePolicy where
+  toJSON CachePolicy {..}
+    = JSON.object ["CachePolicyConfig" JSON..= cachePolicyConfig]
+instance Property "CachePolicyConfig" CachePolicy where
+  type PropertyType "CachePolicyConfig" CachePolicy = CachePolicyConfigProperty
+  set newValue CachePolicy {..}
+    = CachePolicy {cachePolicyConfig = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/CachePolicy/CachePolicyConfigProperty.hs b/gen/Stratosphere/CloudFront/CachePolicy/CachePolicyConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/CachePolicy/CachePolicyConfigProperty.hs
@@ -0,0 +1,91 @@
+module Stratosphere.CloudFront.CachePolicy.CachePolicyConfigProperty (
+        module Exports, CachePolicyConfigProperty(..),
+        mkCachePolicyConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.CachePolicy.ParametersInCacheKeyAndForwardedToOriginProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CachePolicyConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-cachepolicyconfig.html>
+    CachePolicyConfigProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-cachepolicyconfig.html#cfn-cloudfront-cachepolicy-cachepolicyconfig-comment>
+                               comment :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-cachepolicyconfig.html#cfn-cloudfront-cachepolicy-cachepolicyconfig-defaultttl>
+                               defaultTTL :: (Value Prelude.Double),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-cachepolicyconfig.html#cfn-cloudfront-cachepolicy-cachepolicyconfig-maxttl>
+                               maxTTL :: (Value Prelude.Double),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-cachepolicyconfig.html#cfn-cloudfront-cachepolicy-cachepolicyconfig-minttl>
+                               minTTL :: (Value Prelude.Double),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-cachepolicyconfig.html#cfn-cloudfront-cachepolicy-cachepolicyconfig-name>
+                               name :: (Value Prelude.Text),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-cachepolicyconfig.html#cfn-cloudfront-cachepolicy-cachepolicyconfig-parametersincachekeyandforwardedtoorigin>
+                               parametersInCacheKeyAndForwardedToOrigin :: ParametersInCacheKeyAndForwardedToOriginProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCachePolicyConfigProperty ::
+  Value Prelude.Double
+  -> Value Prelude.Double
+     -> Value Prelude.Double
+        -> Value Prelude.Text
+           -> ParametersInCacheKeyAndForwardedToOriginProperty
+              -> CachePolicyConfigProperty
+mkCachePolicyConfigProperty
+  defaultTTL
+  maxTTL
+  minTTL
+  name
+  parametersInCacheKeyAndForwardedToOrigin
+  = CachePolicyConfigProperty
+      {haddock_workaround_ = (), defaultTTL = defaultTTL,
+       maxTTL = maxTTL, minTTL = minTTL, name = name,
+       parametersInCacheKeyAndForwardedToOrigin = parametersInCacheKeyAndForwardedToOrigin,
+       comment = Prelude.Nothing}
+instance ToResourceProperties CachePolicyConfigProperty where
+  toResourceProperties CachePolicyConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::CachePolicy.CachePolicyConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DefaultTTL" JSON..= defaultTTL, "MaxTTL" JSON..= maxTTL,
+                            "MinTTL" JSON..= minTTL, "Name" JSON..= name,
+                            "ParametersInCacheKeyAndForwardedToOrigin"
+                              JSON..= parametersInCacheKeyAndForwardedToOrigin]
+                           (Prelude.catMaybes [(JSON..=) "Comment" Prelude.<$> comment]))}
+instance JSON.ToJSON CachePolicyConfigProperty where
+  toJSON CachePolicyConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DefaultTTL" JSON..= defaultTTL, "MaxTTL" JSON..= maxTTL,
+               "MinTTL" JSON..= minTTL, "Name" JSON..= name,
+               "ParametersInCacheKeyAndForwardedToOrigin"
+                 JSON..= parametersInCacheKeyAndForwardedToOrigin]
+              (Prelude.catMaybes [(JSON..=) "Comment" Prelude.<$> comment])))
+instance Property "Comment" CachePolicyConfigProperty where
+  type PropertyType "Comment" CachePolicyConfigProperty = Value Prelude.Text
+  set newValue CachePolicyConfigProperty {..}
+    = CachePolicyConfigProperty {comment = Prelude.pure newValue, ..}
+instance Property "DefaultTTL" CachePolicyConfigProperty where
+  type PropertyType "DefaultTTL" CachePolicyConfigProperty = Value Prelude.Double
+  set newValue CachePolicyConfigProperty {..}
+    = CachePolicyConfigProperty {defaultTTL = newValue, ..}
+instance Property "MaxTTL" CachePolicyConfigProperty where
+  type PropertyType "MaxTTL" CachePolicyConfigProperty = Value Prelude.Double
+  set newValue CachePolicyConfigProperty {..}
+    = CachePolicyConfigProperty {maxTTL = newValue, ..}
+instance Property "MinTTL" CachePolicyConfigProperty where
+  type PropertyType "MinTTL" CachePolicyConfigProperty = Value Prelude.Double
+  set newValue CachePolicyConfigProperty {..}
+    = CachePolicyConfigProperty {minTTL = newValue, ..}
+instance Property "Name" CachePolicyConfigProperty where
+  type PropertyType "Name" CachePolicyConfigProperty = Value Prelude.Text
+  set newValue CachePolicyConfigProperty {..}
+    = CachePolicyConfigProperty {name = newValue, ..}
+instance Property "ParametersInCacheKeyAndForwardedToOrigin" CachePolicyConfigProperty where
+  type PropertyType "ParametersInCacheKeyAndForwardedToOrigin" CachePolicyConfigProperty = ParametersInCacheKeyAndForwardedToOriginProperty
+  set newValue CachePolicyConfigProperty {..}
+    = CachePolicyConfigProperty
+        {parametersInCacheKeyAndForwardedToOrigin = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/CachePolicy/CachePolicyConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/CachePolicy/CachePolicyConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/CachePolicy/CachePolicyConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.CachePolicy.CachePolicyConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CachePolicyConfigProperty :: Prelude.Type
+instance ToResourceProperties CachePolicyConfigProperty
+instance Prelude.Eq CachePolicyConfigProperty
+instance Prelude.Show CachePolicyConfigProperty
+instance JSON.ToJSON CachePolicyConfigProperty
diff --git a/gen/Stratosphere/CloudFront/CachePolicy/CookiesConfigProperty.hs b/gen/Stratosphere/CloudFront/CachePolicy/CookiesConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/CachePolicy/CookiesConfigProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.CloudFront.CachePolicy.CookiesConfigProperty (
+        CookiesConfigProperty(..), mkCookiesConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CookiesConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-cookiesconfig.html>
+    CookiesConfigProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-cookiesconfig.html#cfn-cloudfront-cachepolicy-cookiesconfig-cookiebehavior>
+                           cookieBehavior :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-cookiesconfig.html#cfn-cloudfront-cachepolicy-cookiesconfig-cookies>
+                           cookies :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCookiesConfigProperty ::
+  Value Prelude.Text -> CookiesConfigProperty
+mkCookiesConfigProperty cookieBehavior
+  = CookiesConfigProperty
+      {haddock_workaround_ = (), cookieBehavior = cookieBehavior,
+       cookies = Prelude.Nothing}
+instance ToResourceProperties CookiesConfigProperty where
+  toResourceProperties CookiesConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::CachePolicy.CookiesConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["CookieBehavior" JSON..= cookieBehavior]
+                           (Prelude.catMaybes [(JSON..=) "Cookies" Prelude.<$> cookies]))}
+instance JSON.ToJSON CookiesConfigProperty where
+  toJSON CookiesConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["CookieBehavior" JSON..= cookieBehavior]
+              (Prelude.catMaybes [(JSON..=) "Cookies" Prelude.<$> cookies])))
+instance Property "CookieBehavior" CookiesConfigProperty where
+  type PropertyType "CookieBehavior" CookiesConfigProperty = Value Prelude.Text
+  set newValue CookiesConfigProperty {..}
+    = CookiesConfigProperty {cookieBehavior = newValue, ..}
+instance Property "Cookies" CookiesConfigProperty where
+  type PropertyType "Cookies" CookiesConfigProperty = ValueList Prelude.Text
+  set newValue CookiesConfigProperty {..}
+    = CookiesConfigProperty {cookies = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/CachePolicy/CookiesConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/CachePolicy/CookiesConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/CachePolicy/CookiesConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.CachePolicy.CookiesConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CookiesConfigProperty :: Prelude.Type
+instance ToResourceProperties CookiesConfigProperty
+instance Prelude.Eq CookiesConfigProperty
+instance Prelude.Show CookiesConfigProperty
+instance JSON.ToJSON CookiesConfigProperty
diff --git a/gen/Stratosphere/CloudFront/CachePolicy/HeadersConfigProperty.hs b/gen/Stratosphere/CloudFront/CachePolicy/HeadersConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/CachePolicy/HeadersConfigProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.CloudFront.CachePolicy.HeadersConfigProperty (
+        HeadersConfigProperty(..), mkHeadersConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data HeadersConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-headersconfig.html>
+    HeadersConfigProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-headersconfig.html#cfn-cloudfront-cachepolicy-headersconfig-headerbehavior>
+                           headerBehavior :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-headersconfig.html#cfn-cloudfront-cachepolicy-headersconfig-headers>
+                           headers :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHeadersConfigProperty ::
+  Value Prelude.Text -> HeadersConfigProperty
+mkHeadersConfigProperty headerBehavior
+  = HeadersConfigProperty
+      {haddock_workaround_ = (), headerBehavior = headerBehavior,
+       headers = Prelude.Nothing}
+instance ToResourceProperties HeadersConfigProperty where
+  toResourceProperties HeadersConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::CachePolicy.HeadersConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["HeaderBehavior" JSON..= headerBehavior]
+                           (Prelude.catMaybes [(JSON..=) "Headers" Prelude.<$> headers]))}
+instance JSON.ToJSON HeadersConfigProperty where
+  toJSON HeadersConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["HeaderBehavior" JSON..= headerBehavior]
+              (Prelude.catMaybes [(JSON..=) "Headers" Prelude.<$> headers])))
+instance Property "HeaderBehavior" HeadersConfigProperty where
+  type PropertyType "HeaderBehavior" HeadersConfigProperty = Value Prelude.Text
+  set newValue HeadersConfigProperty {..}
+    = HeadersConfigProperty {headerBehavior = newValue, ..}
+instance Property "Headers" HeadersConfigProperty where
+  type PropertyType "Headers" HeadersConfigProperty = ValueList Prelude.Text
+  set newValue HeadersConfigProperty {..}
+    = HeadersConfigProperty {headers = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/CachePolicy/HeadersConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/CachePolicy/HeadersConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/CachePolicy/HeadersConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.CachePolicy.HeadersConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HeadersConfigProperty :: Prelude.Type
+instance ToResourceProperties HeadersConfigProperty
+instance Prelude.Eq HeadersConfigProperty
+instance Prelude.Show HeadersConfigProperty
+instance JSON.ToJSON HeadersConfigProperty
diff --git a/gen/Stratosphere/CloudFront/CachePolicy/ParametersInCacheKeyAndForwardedToOriginProperty.hs b/gen/Stratosphere/CloudFront/CachePolicy/ParametersInCacheKeyAndForwardedToOriginProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/CachePolicy/ParametersInCacheKeyAndForwardedToOriginProperty.hs
@@ -0,0 +1,96 @@
+module Stratosphere.CloudFront.CachePolicy.ParametersInCacheKeyAndForwardedToOriginProperty (
+        module Exports,
+        ParametersInCacheKeyAndForwardedToOriginProperty(..),
+        mkParametersInCacheKeyAndForwardedToOriginProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.CachePolicy.CookiesConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.CachePolicy.HeadersConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.CachePolicy.QueryStringsConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ParametersInCacheKeyAndForwardedToOriginProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-parametersincachekeyandforwardedtoorigin.html>
+    ParametersInCacheKeyAndForwardedToOriginProperty {haddock_workaround_ :: (),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-parametersincachekeyandforwardedtoorigin.html#cfn-cloudfront-cachepolicy-parametersincachekeyandforwardedtoorigin-cookiesconfig>
+                                                      cookiesConfig :: CookiesConfigProperty,
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-parametersincachekeyandforwardedtoorigin.html#cfn-cloudfront-cachepolicy-parametersincachekeyandforwardedtoorigin-enableacceptencodingbrotli>
+                                                      enableAcceptEncodingBrotli :: (Prelude.Maybe (Value Prelude.Bool)),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-parametersincachekeyandforwardedtoorigin.html#cfn-cloudfront-cachepolicy-parametersincachekeyandforwardedtoorigin-enableacceptencodinggzip>
+                                                      enableAcceptEncodingGzip :: (Value Prelude.Bool),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-parametersincachekeyandforwardedtoorigin.html#cfn-cloudfront-cachepolicy-parametersincachekeyandforwardedtoorigin-headersconfig>
+                                                      headersConfig :: HeadersConfigProperty,
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-parametersincachekeyandforwardedtoorigin.html#cfn-cloudfront-cachepolicy-parametersincachekeyandforwardedtoorigin-querystringsconfig>
+                                                      queryStringsConfig :: QueryStringsConfigProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkParametersInCacheKeyAndForwardedToOriginProperty ::
+  CookiesConfigProperty
+  -> Value Prelude.Bool
+     -> HeadersConfigProperty
+        -> QueryStringsConfigProperty
+           -> ParametersInCacheKeyAndForwardedToOriginProperty
+mkParametersInCacheKeyAndForwardedToOriginProperty
+  cookiesConfig
+  enableAcceptEncodingGzip
+  headersConfig
+  queryStringsConfig
+  = ParametersInCacheKeyAndForwardedToOriginProperty
+      {haddock_workaround_ = (), cookiesConfig = cookiesConfig,
+       enableAcceptEncodingGzip = enableAcceptEncodingGzip,
+       headersConfig = headersConfig,
+       queryStringsConfig = queryStringsConfig,
+       enableAcceptEncodingBrotli = Prelude.Nothing}
+instance ToResourceProperties ParametersInCacheKeyAndForwardedToOriginProperty where
+  toResourceProperties
+    ParametersInCacheKeyAndForwardedToOriginProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::CachePolicy.ParametersInCacheKeyAndForwardedToOrigin",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["CookiesConfig" JSON..= cookiesConfig,
+                            "EnableAcceptEncodingGzip" JSON..= enableAcceptEncodingGzip,
+                            "HeadersConfig" JSON..= headersConfig,
+                            "QueryStringsConfig" JSON..= queryStringsConfig]
+                           (Prelude.catMaybes
+                              [(JSON..=) "EnableAcceptEncodingBrotli"
+                                 Prelude.<$> enableAcceptEncodingBrotli]))}
+instance JSON.ToJSON ParametersInCacheKeyAndForwardedToOriginProperty where
+  toJSON ParametersInCacheKeyAndForwardedToOriginProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["CookiesConfig" JSON..= cookiesConfig,
+               "EnableAcceptEncodingGzip" JSON..= enableAcceptEncodingGzip,
+               "HeadersConfig" JSON..= headersConfig,
+               "QueryStringsConfig" JSON..= queryStringsConfig]
+              (Prelude.catMaybes
+                 [(JSON..=) "EnableAcceptEncodingBrotli"
+                    Prelude.<$> enableAcceptEncodingBrotli])))
+instance Property "CookiesConfig" ParametersInCacheKeyAndForwardedToOriginProperty where
+  type PropertyType "CookiesConfig" ParametersInCacheKeyAndForwardedToOriginProperty = CookiesConfigProperty
+  set newValue ParametersInCacheKeyAndForwardedToOriginProperty {..}
+    = ParametersInCacheKeyAndForwardedToOriginProperty
+        {cookiesConfig = newValue, ..}
+instance Property "EnableAcceptEncodingBrotli" ParametersInCacheKeyAndForwardedToOriginProperty where
+  type PropertyType "EnableAcceptEncodingBrotli" ParametersInCacheKeyAndForwardedToOriginProperty = Value Prelude.Bool
+  set newValue ParametersInCacheKeyAndForwardedToOriginProperty {..}
+    = ParametersInCacheKeyAndForwardedToOriginProperty
+        {enableAcceptEncodingBrotli = Prelude.pure newValue, ..}
+instance Property "EnableAcceptEncodingGzip" ParametersInCacheKeyAndForwardedToOriginProperty where
+  type PropertyType "EnableAcceptEncodingGzip" ParametersInCacheKeyAndForwardedToOriginProperty = Value Prelude.Bool
+  set newValue ParametersInCacheKeyAndForwardedToOriginProperty {..}
+    = ParametersInCacheKeyAndForwardedToOriginProperty
+        {enableAcceptEncodingGzip = newValue, ..}
+instance Property "HeadersConfig" ParametersInCacheKeyAndForwardedToOriginProperty where
+  type PropertyType "HeadersConfig" ParametersInCacheKeyAndForwardedToOriginProperty = HeadersConfigProperty
+  set newValue ParametersInCacheKeyAndForwardedToOriginProperty {..}
+    = ParametersInCacheKeyAndForwardedToOriginProperty
+        {headersConfig = newValue, ..}
+instance Property "QueryStringsConfig" ParametersInCacheKeyAndForwardedToOriginProperty where
+  type PropertyType "QueryStringsConfig" ParametersInCacheKeyAndForwardedToOriginProperty = QueryStringsConfigProperty
+  set newValue ParametersInCacheKeyAndForwardedToOriginProperty {..}
+    = ParametersInCacheKeyAndForwardedToOriginProperty
+        {queryStringsConfig = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/CachePolicy/ParametersInCacheKeyAndForwardedToOriginProperty.hs-boot b/gen/Stratosphere/CloudFront/CachePolicy/ParametersInCacheKeyAndForwardedToOriginProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/CachePolicy/ParametersInCacheKeyAndForwardedToOriginProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.CachePolicy.ParametersInCacheKeyAndForwardedToOriginProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ParametersInCacheKeyAndForwardedToOriginProperty :: Prelude.Type
+instance ToResourceProperties ParametersInCacheKeyAndForwardedToOriginProperty
+instance Prelude.Eq ParametersInCacheKeyAndForwardedToOriginProperty
+instance Prelude.Show ParametersInCacheKeyAndForwardedToOriginProperty
+instance JSON.ToJSON ParametersInCacheKeyAndForwardedToOriginProperty
diff --git a/gen/Stratosphere/CloudFront/CachePolicy/QueryStringsConfigProperty.hs b/gen/Stratosphere/CloudFront/CachePolicy/QueryStringsConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/CachePolicy/QueryStringsConfigProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.CloudFront.CachePolicy.QueryStringsConfigProperty (
+        QueryStringsConfigProperty(..), mkQueryStringsConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data QueryStringsConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-querystringsconfig.html>
+    QueryStringsConfigProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-querystringsconfig.html#cfn-cloudfront-cachepolicy-querystringsconfig-querystringbehavior>
+                                queryStringBehavior :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-querystringsconfig.html#cfn-cloudfront-cachepolicy-querystringsconfig-querystrings>
+                                queryStrings :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkQueryStringsConfigProperty ::
+  Value Prelude.Text -> QueryStringsConfigProperty
+mkQueryStringsConfigProperty queryStringBehavior
+  = QueryStringsConfigProperty
+      {haddock_workaround_ = (),
+       queryStringBehavior = queryStringBehavior,
+       queryStrings = Prelude.Nothing}
+instance ToResourceProperties QueryStringsConfigProperty where
+  toResourceProperties QueryStringsConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::CachePolicy.QueryStringsConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["QueryStringBehavior" JSON..= queryStringBehavior]
+                           (Prelude.catMaybes
+                              [(JSON..=) "QueryStrings" Prelude.<$> queryStrings]))}
+instance JSON.ToJSON QueryStringsConfigProperty where
+  toJSON QueryStringsConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["QueryStringBehavior" JSON..= queryStringBehavior]
+              (Prelude.catMaybes
+                 [(JSON..=) "QueryStrings" Prelude.<$> queryStrings])))
+instance Property "QueryStringBehavior" QueryStringsConfigProperty where
+  type PropertyType "QueryStringBehavior" QueryStringsConfigProperty = Value Prelude.Text
+  set newValue QueryStringsConfigProperty {..}
+    = QueryStringsConfigProperty {queryStringBehavior = newValue, ..}
+instance Property "QueryStrings" QueryStringsConfigProperty where
+  type PropertyType "QueryStrings" QueryStringsConfigProperty = ValueList Prelude.Text
+  set newValue QueryStringsConfigProperty {..}
+    = QueryStringsConfigProperty
+        {queryStrings = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/CachePolicy/QueryStringsConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/CachePolicy/QueryStringsConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/CachePolicy/QueryStringsConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.CachePolicy.QueryStringsConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data QueryStringsConfigProperty :: Prelude.Type
+instance ToResourceProperties QueryStringsConfigProperty
+instance Prelude.Eq QueryStringsConfigProperty
+instance Prelude.Show QueryStringsConfigProperty
+instance JSON.ToJSON QueryStringsConfigProperty
diff --git a/gen/Stratosphere/CloudFront/CloudFrontOriginAccessIdentity.hs b/gen/Stratosphere/CloudFront/CloudFrontOriginAccessIdentity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/CloudFrontOriginAccessIdentity.hs
@@ -0,0 +1,40 @@
+module Stratosphere.CloudFront.CloudFrontOriginAccessIdentity (
+        module Exports, CloudFrontOriginAccessIdentity(..),
+        mkCloudFrontOriginAccessIdentity
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.CloudFrontOriginAccessIdentity.CloudFrontOriginAccessIdentityConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data CloudFrontOriginAccessIdentity
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-cloudfrontoriginaccessidentity.html>
+    CloudFrontOriginAccessIdentity {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-cloudfrontoriginaccessidentity.html#cfn-cloudfront-cloudfrontoriginaccessidentity-cloudfrontoriginaccessidentityconfig>
+                                    cloudFrontOriginAccessIdentityConfig :: CloudFrontOriginAccessIdentityConfigProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCloudFrontOriginAccessIdentity ::
+  CloudFrontOriginAccessIdentityConfigProperty
+  -> CloudFrontOriginAccessIdentity
+mkCloudFrontOriginAccessIdentity
+  cloudFrontOriginAccessIdentityConfig
+  = CloudFrontOriginAccessIdentity
+      {haddock_workaround_ = (),
+       cloudFrontOriginAccessIdentityConfig = cloudFrontOriginAccessIdentityConfig}
+instance ToResourceProperties CloudFrontOriginAccessIdentity where
+  toResourceProperties CloudFrontOriginAccessIdentity {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::CloudFrontOriginAccessIdentity",
+         supportsTags = Prelude.False,
+         properties = ["CloudFrontOriginAccessIdentityConfig"
+                         JSON..= cloudFrontOriginAccessIdentityConfig]}
+instance JSON.ToJSON CloudFrontOriginAccessIdentity where
+  toJSON CloudFrontOriginAccessIdentity {..}
+    = JSON.object
+        ["CloudFrontOriginAccessIdentityConfig"
+           JSON..= cloudFrontOriginAccessIdentityConfig]
+instance Property "CloudFrontOriginAccessIdentityConfig" CloudFrontOriginAccessIdentity where
+  type PropertyType "CloudFrontOriginAccessIdentityConfig" CloudFrontOriginAccessIdentity = CloudFrontOriginAccessIdentityConfigProperty
+  set newValue CloudFrontOriginAccessIdentity {..}
+    = CloudFrontOriginAccessIdentity
+        {cloudFrontOriginAccessIdentityConfig = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/CloudFrontOriginAccessIdentity/CloudFrontOriginAccessIdentityConfigProperty.hs b/gen/Stratosphere/CloudFront/CloudFrontOriginAccessIdentity/CloudFrontOriginAccessIdentityConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/CloudFrontOriginAccessIdentity/CloudFrontOriginAccessIdentityConfigProperty.hs
@@ -0,0 +1,35 @@
+module Stratosphere.CloudFront.CloudFrontOriginAccessIdentity.CloudFrontOriginAccessIdentityConfigProperty (
+        CloudFrontOriginAccessIdentityConfigProperty(..),
+        mkCloudFrontOriginAccessIdentityConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CloudFrontOriginAccessIdentityConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cloudfrontoriginaccessidentity-cloudfrontoriginaccessidentityconfig.html>
+    CloudFrontOriginAccessIdentityConfigProperty {haddock_workaround_ :: (),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cloudfrontoriginaccessidentity-cloudfrontoriginaccessidentityconfig.html#cfn-cloudfront-cloudfrontoriginaccessidentity-cloudfrontoriginaccessidentityconfig-comment>
+                                                  comment :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCloudFrontOriginAccessIdentityConfigProperty ::
+  Value Prelude.Text -> CloudFrontOriginAccessIdentityConfigProperty
+mkCloudFrontOriginAccessIdentityConfigProperty comment
+  = CloudFrontOriginAccessIdentityConfigProperty
+      {haddock_workaround_ = (), comment = comment}
+instance ToResourceProperties CloudFrontOriginAccessIdentityConfigProperty where
+  toResourceProperties
+    CloudFrontOriginAccessIdentityConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::CloudFrontOriginAccessIdentity.CloudFrontOriginAccessIdentityConfig",
+         supportsTags = Prelude.False,
+         properties = ["Comment" JSON..= comment]}
+instance JSON.ToJSON CloudFrontOriginAccessIdentityConfigProperty where
+  toJSON CloudFrontOriginAccessIdentityConfigProperty {..}
+    = JSON.object ["Comment" JSON..= comment]
+instance Property "Comment" CloudFrontOriginAccessIdentityConfigProperty where
+  type PropertyType "Comment" CloudFrontOriginAccessIdentityConfigProperty = Value Prelude.Text
+  set newValue CloudFrontOriginAccessIdentityConfigProperty {..}
+    = CloudFrontOriginAccessIdentityConfigProperty
+        {comment = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/CloudFrontOriginAccessIdentity/CloudFrontOriginAccessIdentityConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/CloudFrontOriginAccessIdentity/CloudFrontOriginAccessIdentityConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/CloudFrontOriginAccessIdentity/CloudFrontOriginAccessIdentityConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.CloudFrontOriginAccessIdentity.CloudFrontOriginAccessIdentityConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CloudFrontOriginAccessIdentityConfigProperty :: Prelude.Type
+instance ToResourceProperties CloudFrontOriginAccessIdentityConfigProperty
+instance Prelude.Eq CloudFrontOriginAccessIdentityConfigProperty
+instance Prelude.Show CloudFrontOriginAccessIdentityConfigProperty
+instance JSON.ToJSON CloudFrontOriginAccessIdentityConfigProperty
diff --git a/gen/Stratosphere/CloudFront/ConnectionGroup.hs b/gen/Stratosphere/CloudFront/ConnectionGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ConnectionGroup.hs
@@ -0,0 +1,73 @@
+module Stratosphere.CloudFront.ConnectionGroup (
+        ConnectionGroup(..), mkConnectionGroup
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data ConnectionGroup
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-connectiongroup.html>
+    ConnectionGroup {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-connectiongroup.html#cfn-cloudfront-connectiongroup-anycastiplistid>
+                     anycastIpListId :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-connectiongroup.html#cfn-cloudfront-connectiongroup-enabled>
+                     enabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-connectiongroup.html#cfn-cloudfront-connectiongroup-ipv6enabled>
+                     ipv6Enabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-connectiongroup.html#cfn-cloudfront-connectiongroup-name>
+                     name :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-connectiongroup.html#cfn-cloudfront-connectiongroup-tags>
+                     tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConnectionGroup :: Value Prelude.Text -> ConnectionGroup
+mkConnectionGroup name
+  = ConnectionGroup
+      {haddock_workaround_ = (), name = name,
+       anycastIpListId = Prelude.Nothing, enabled = Prelude.Nothing,
+       ipv6Enabled = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties ConnectionGroup where
+  toResourceProperties ConnectionGroup {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ConnectionGroup",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AnycastIpListId" Prelude.<$> anycastIpListId,
+                               (JSON..=) "Enabled" Prelude.<$> enabled,
+                               (JSON..=) "Ipv6Enabled" Prelude.<$> ipv6Enabled,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON ConnectionGroup where
+  toJSON ConnectionGroup {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "AnycastIpListId" Prelude.<$> anycastIpListId,
+                  (JSON..=) "Enabled" Prelude.<$> enabled,
+                  (JSON..=) "Ipv6Enabled" Prelude.<$> ipv6Enabled,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AnycastIpListId" ConnectionGroup where
+  type PropertyType "AnycastIpListId" ConnectionGroup = Value Prelude.Text
+  set newValue ConnectionGroup {..}
+    = ConnectionGroup {anycastIpListId = Prelude.pure newValue, ..}
+instance Property "Enabled" ConnectionGroup where
+  type PropertyType "Enabled" ConnectionGroup = Value Prelude.Bool
+  set newValue ConnectionGroup {..}
+    = ConnectionGroup {enabled = Prelude.pure newValue, ..}
+instance Property "Ipv6Enabled" ConnectionGroup where
+  type PropertyType "Ipv6Enabled" ConnectionGroup = Value Prelude.Bool
+  set newValue ConnectionGroup {..}
+    = ConnectionGroup {ipv6Enabled = Prelude.pure newValue, ..}
+instance Property "Name" ConnectionGroup where
+  type PropertyType "Name" ConnectionGroup = Value Prelude.Text
+  set newValue ConnectionGroup {..}
+    = ConnectionGroup {name = newValue, ..}
+instance Property "Tags" ConnectionGroup where
+  type PropertyType "Tags" ConnectionGroup = [Tag]
+  set newValue ConnectionGroup {..}
+    = ConnectionGroup {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy.hs b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy.hs
@@ -0,0 +1,39 @@
+module Stratosphere.CloudFront.ContinuousDeploymentPolicy (
+        module Exports, ContinuousDeploymentPolicy(..),
+        mkContinuousDeploymentPolicy
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.ContinuousDeploymentPolicy.ContinuousDeploymentPolicyConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data ContinuousDeploymentPolicy
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-continuousdeploymentpolicy.html>
+    ContinuousDeploymentPolicy {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-continuousdeploymentpolicy.html#cfn-cloudfront-continuousdeploymentpolicy-continuousdeploymentpolicyconfig>
+                                continuousDeploymentPolicyConfig :: ContinuousDeploymentPolicyConfigProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkContinuousDeploymentPolicy ::
+  ContinuousDeploymentPolicyConfigProperty
+  -> ContinuousDeploymentPolicy
+mkContinuousDeploymentPolicy continuousDeploymentPolicyConfig
+  = ContinuousDeploymentPolicy
+      {haddock_workaround_ = (),
+       continuousDeploymentPolicyConfig = continuousDeploymentPolicyConfig}
+instance ToResourceProperties ContinuousDeploymentPolicy where
+  toResourceProperties ContinuousDeploymentPolicy {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ContinuousDeploymentPolicy",
+         supportsTags = Prelude.False,
+         properties = ["ContinuousDeploymentPolicyConfig"
+                         JSON..= continuousDeploymentPolicyConfig]}
+instance JSON.ToJSON ContinuousDeploymentPolicy where
+  toJSON ContinuousDeploymentPolicy {..}
+    = JSON.object
+        ["ContinuousDeploymentPolicyConfig"
+           JSON..= continuousDeploymentPolicyConfig]
+instance Property "ContinuousDeploymentPolicyConfig" ContinuousDeploymentPolicy where
+  type PropertyType "ContinuousDeploymentPolicyConfig" ContinuousDeploymentPolicy = ContinuousDeploymentPolicyConfigProperty
+  set newValue ContinuousDeploymentPolicy {..}
+    = ContinuousDeploymentPolicy
+        {continuousDeploymentPolicyConfig = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/ContinuousDeploymentPolicyConfigProperty.hs b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/ContinuousDeploymentPolicyConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/ContinuousDeploymentPolicyConfigProperty.hs
@@ -0,0 +1,100 @@
+module Stratosphere.CloudFront.ContinuousDeploymentPolicy.ContinuousDeploymentPolicyConfigProperty (
+        module Exports, ContinuousDeploymentPolicyConfigProperty(..),
+        mkContinuousDeploymentPolicyConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.ContinuousDeploymentPolicy.SingleHeaderPolicyConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.ContinuousDeploymentPolicy.SingleWeightPolicyConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.ContinuousDeploymentPolicy.TrafficConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ContinuousDeploymentPolicyConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-continuousdeploymentpolicyconfig.html>
+    ContinuousDeploymentPolicyConfigProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-continuousdeploymentpolicyconfig.html#cfn-cloudfront-continuousdeploymentpolicy-continuousdeploymentpolicyconfig-enabled>
+                                              enabled :: (Value Prelude.Bool),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-continuousdeploymentpolicyconfig.html#cfn-cloudfront-continuousdeploymentpolicy-continuousdeploymentpolicyconfig-singleheaderpolicyconfig>
+                                              singleHeaderPolicyConfig :: (Prelude.Maybe SingleHeaderPolicyConfigProperty),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-continuousdeploymentpolicyconfig.html#cfn-cloudfront-continuousdeploymentpolicy-continuousdeploymentpolicyconfig-singleweightpolicyconfig>
+                                              singleWeightPolicyConfig :: (Prelude.Maybe SingleWeightPolicyConfigProperty),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-continuousdeploymentpolicyconfig.html#cfn-cloudfront-continuousdeploymentpolicy-continuousdeploymentpolicyconfig-stagingdistributiondnsnames>
+                                              stagingDistributionDnsNames :: (ValueList Prelude.Text),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-continuousdeploymentpolicyconfig.html#cfn-cloudfront-continuousdeploymentpolicy-continuousdeploymentpolicyconfig-trafficconfig>
+                                              trafficConfig :: (Prelude.Maybe TrafficConfigProperty),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-continuousdeploymentpolicyconfig.html#cfn-cloudfront-continuousdeploymentpolicy-continuousdeploymentpolicyconfig-type>
+                                              type' :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkContinuousDeploymentPolicyConfigProperty ::
+  Value Prelude.Bool
+  -> ValueList Prelude.Text
+     -> ContinuousDeploymentPolicyConfigProperty
+mkContinuousDeploymentPolicyConfigProperty
+  enabled
+  stagingDistributionDnsNames
+  = ContinuousDeploymentPolicyConfigProperty
+      {haddock_workaround_ = (), enabled = enabled,
+       stagingDistributionDnsNames = stagingDistributionDnsNames,
+       singleHeaderPolicyConfig = Prelude.Nothing,
+       singleWeightPolicyConfig = Prelude.Nothing,
+       trafficConfig = Prelude.Nothing, type' = Prelude.Nothing}
+instance ToResourceProperties ContinuousDeploymentPolicyConfigProperty where
+  toResourceProperties ContinuousDeploymentPolicyConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ContinuousDeploymentPolicy.ContinuousDeploymentPolicyConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Enabled" JSON..= enabled,
+                            "StagingDistributionDnsNames" JSON..= stagingDistributionDnsNames]
+                           (Prelude.catMaybes
+                              [(JSON..=) "SingleHeaderPolicyConfig"
+                                 Prelude.<$> singleHeaderPolicyConfig,
+                               (JSON..=) "SingleWeightPolicyConfig"
+                                 Prelude.<$> singleWeightPolicyConfig,
+                               (JSON..=) "TrafficConfig" Prelude.<$> trafficConfig,
+                               (JSON..=) "Type" Prelude.<$> type']))}
+instance JSON.ToJSON ContinuousDeploymentPolicyConfigProperty where
+  toJSON ContinuousDeploymentPolicyConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Enabled" JSON..= enabled,
+               "StagingDistributionDnsNames" JSON..= stagingDistributionDnsNames]
+              (Prelude.catMaybes
+                 [(JSON..=) "SingleHeaderPolicyConfig"
+                    Prelude.<$> singleHeaderPolicyConfig,
+                  (JSON..=) "SingleWeightPolicyConfig"
+                    Prelude.<$> singleWeightPolicyConfig,
+                  (JSON..=) "TrafficConfig" Prelude.<$> trafficConfig,
+                  (JSON..=) "Type" Prelude.<$> type'])))
+instance Property "Enabled" ContinuousDeploymentPolicyConfigProperty where
+  type PropertyType "Enabled" ContinuousDeploymentPolicyConfigProperty = Value Prelude.Bool
+  set newValue ContinuousDeploymentPolicyConfigProperty {..}
+    = ContinuousDeploymentPolicyConfigProperty {enabled = newValue, ..}
+instance Property "SingleHeaderPolicyConfig" ContinuousDeploymentPolicyConfigProperty where
+  type PropertyType "SingleHeaderPolicyConfig" ContinuousDeploymentPolicyConfigProperty = SingleHeaderPolicyConfigProperty
+  set newValue ContinuousDeploymentPolicyConfigProperty {..}
+    = ContinuousDeploymentPolicyConfigProperty
+        {singleHeaderPolicyConfig = Prelude.pure newValue, ..}
+instance Property "SingleWeightPolicyConfig" ContinuousDeploymentPolicyConfigProperty where
+  type PropertyType "SingleWeightPolicyConfig" ContinuousDeploymentPolicyConfigProperty = SingleWeightPolicyConfigProperty
+  set newValue ContinuousDeploymentPolicyConfigProperty {..}
+    = ContinuousDeploymentPolicyConfigProperty
+        {singleWeightPolicyConfig = Prelude.pure newValue, ..}
+instance Property "StagingDistributionDnsNames" ContinuousDeploymentPolicyConfigProperty where
+  type PropertyType "StagingDistributionDnsNames" ContinuousDeploymentPolicyConfigProperty = ValueList Prelude.Text
+  set newValue ContinuousDeploymentPolicyConfigProperty {..}
+    = ContinuousDeploymentPolicyConfigProperty
+        {stagingDistributionDnsNames = newValue, ..}
+instance Property "TrafficConfig" ContinuousDeploymentPolicyConfigProperty where
+  type PropertyType "TrafficConfig" ContinuousDeploymentPolicyConfigProperty = TrafficConfigProperty
+  set newValue ContinuousDeploymentPolicyConfigProperty {..}
+    = ContinuousDeploymentPolicyConfigProperty
+        {trafficConfig = Prelude.pure newValue, ..}
+instance Property "Type" ContinuousDeploymentPolicyConfigProperty where
+  type PropertyType "Type" ContinuousDeploymentPolicyConfigProperty = Value Prelude.Text
+  set newValue ContinuousDeploymentPolicyConfigProperty {..}
+    = ContinuousDeploymentPolicyConfigProperty
+        {type' = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/ContinuousDeploymentPolicyConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/ContinuousDeploymentPolicyConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/ContinuousDeploymentPolicyConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ContinuousDeploymentPolicy.ContinuousDeploymentPolicyConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ContinuousDeploymentPolicyConfigProperty :: Prelude.Type
+instance ToResourceProperties ContinuousDeploymentPolicyConfigProperty
+instance Prelude.Eq ContinuousDeploymentPolicyConfigProperty
+instance Prelude.Show ContinuousDeploymentPolicyConfigProperty
+instance JSON.ToJSON ContinuousDeploymentPolicyConfigProperty
diff --git a/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SessionStickinessConfigProperty.hs b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SessionStickinessConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SessionStickinessConfigProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.CloudFront.ContinuousDeploymentPolicy.SessionStickinessConfigProperty (
+        SessionStickinessConfigProperty(..),
+        mkSessionStickinessConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SessionStickinessConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-sessionstickinessconfig.html>
+    SessionStickinessConfigProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-sessionstickinessconfig.html#cfn-cloudfront-continuousdeploymentpolicy-sessionstickinessconfig-idlettl>
+                                     idleTTL :: (Value Prelude.Integer),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-sessionstickinessconfig.html#cfn-cloudfront-continuousdeploymentpolicy-sessionstickinessconfig-maximumttl>
+                                     maximumTTL :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSessionStickinessConfigProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Integer -> SessionStickinessConfigProperty
+mkSessionStickinessConfigProperty idleTTL maximumTTL
+  = SessionStickinessConfigProperty
+      {haddock_workaround_ = (), idleTTL = idleTTL,
+       maximumTTL = maximumTTL}
+instance ToResourceProperties SessionStickinessConfigProperty where
+  toResourceProperties SessionStickinessConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ContinuousDeploymentPolicy.SessionStickinessConfig",
+         supportsTags = Prelude.False,
+         properties = ["IdleTTL" JSON..= idleTTL,
+                       "MaximumTTL" JSON..= maximumTTL]}
+instance JSON.ToJSON SessionStickinessConfigProperty where
+  toJSON SessionStickinessConfigProperty {..}
+    = JSON.object
+        ["IdleTTL" JSON..= idleTTL, "MaximumTTL" JSON..= maximumTTL]
+instance Property "IdleTTL" SessionStickinessConfigProperty where
+  type PropertyType "IdleTTL" SessionStickinessConfigProperty = Value Prelude.Integer
+  set newValue SessionStickinessConfigProperty {..}
+    = SessionStickinessConfigProperty {idleTTL = newValue, ..}
+instance Property "MaximumTTL" SessionStickinessConfigProperty where
+  type PropertyType "MaximumTTL" SessionStickinessConfigProperty = Value Prelude.Integer
+  set newValue SessionStickinessConfigProperty {..}
+    = SessionStickinessConfigProperty {maximumTTL = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SessionStickinessConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SessionStickinessConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SessionStickinessConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ContinuousDeploymentPolicy.SessionStickinessConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SessionStickinessConfigProperty :: Prelude.Type
+instance ToResourceProperties SessionStickinessConfigProperty
+instance Prelude.Eq SessionStickinessConfigProperty
+instance Prelude.Show SessionStickinessConfigProperty
+instance JSON.ToJSON SessionStickinessConfigProperty
diff --git a/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleHeaderConfigProperty.hs b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleHeaderConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleHeaderConfigProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.CloudFront.ContinuousDeploymentPolicy.SingleHeaderConfigProperty (
+        SingleHeaderConfigProperty(..), mkSingleHeaderConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SingleHeaderConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-singleheaderconfig.html>
+    SingleHeaderConfigProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-singleheaderconfig.html#cfn-cloudfront-continuousdeploymentpolicy-singleheaderconfig-header>
+                                header :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-singleheaderconfig.html#cfn-cloudfront-continuousdeploymentpolicy-singleheaderconfig-value>
+                                value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSingleHeaderConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> SingleHeaderConfigProperty
+mkSingleHeaderConfigProperty header value
+  = SingleHeaderConfigProperty
+      {haddock_workaround_ = (), header = header, value = value}
+instance ToResourceProperties SingleHeaderConfigProperty where
+  toResourceProperties SingleHeaderConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ContinuousDeploymentPolicy.SingleHeaderConfig",
+         supportsTags = Prelude.False,
+         properties = ["Header" JSON..= header, "Value" JSON..= value]}
+instance JSON.ToJSON SingleHeaderConfigProperty where
+  toJSON SingleHeaderConfigProperty {..}
+    = JSON.object ["Header" JSON..= header, "Value" JSON..= value]
+instance Property "Header" SingleHeaderConfigProperty where
+  type PropertyType "Header" SingleHeaderConfigProperty = Value Prelude.Text
+  set newValue SingleHeaderConfigProperty {..}
+    = SingleHeaderConfigProperty {header = newValue, ..}
+instance Property "Value" SingleHeaderConfigProperty where
+  type PropertyType "Value" SingleHeaderConfigProperty = Value Prelude.Text
+  set newValue SingleHeaderConfigProperty {..}
+    = SingleHeaderConfigProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleHeaderConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleHeaderConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleHeaderConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ContinuousDeploymentPolicy.SingleHeaderConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SingleHeaderConfigProperty :: Prelude.Type
+instance ToResourceProperties SingleHeaderConfigProperty
+instance Prelude.Eq SingleHeaderConfigProperty
+instance Prelude.Show SingleHeaderConfigProperty
+instance JSON.ToJSON SingleHeaderConfigProperty
diff --git a/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleHeaderPolicyConfigProperty.hs b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleHeaderPolicyConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleHeaderPolicyConfigProperty.hs
@@ -0,0 +1,40 @@
+module Stratosphere.CloudFront.ContinuousDeploymentPolicy.SingleHeaderPolicyConfigProperty (
+        SingleHeaderPolicyConfigProperty(..),
+        mkSingleHeaderPolicyConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SingleHeaderPolicyConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-singleheaderpolicyconfig.html>
+    SingleHeaderPolicyConfigProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-singleheaderpolicyconfig.html#cfn-cloudfront-continuousdeploymentpolicy-singleheaderpolicyconfig-header>
+                                      header :: (Value Prelude.Text),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-singleheaderpolicyconfig.html#cfn-cloudfront-continuousdeploymentpolicy-singleheaderpolicyconfig-value>
+                                      value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSingleHeaderPolicyConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> SingleHeaderPolicyConfigProperty
+mkSingleHeaderPolicyConfigProperty header value
+  = SingleHeaderPolicyConfigProperty
+      {haddock_workaround_ = (), header = header, value = value}
+instance ToResourceProperties SingleHeaderPolicyConfigProperty where
+  toResourceProperties SingleHeaderPolicyConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ContinuousDeploymentPolicy.SingleHeaderPolicyConfig",
+         supportsTags = Prelude.False,
+         properties = ["Header" JSON..= header, "Value" JSON..= value]}
+instance JSON.ToJSON SingleHeaderPolicyConfigProperty where
+  toJSON SingleHeaderPolicyConfigProperty {..}
+    = JSON.object ["Header" JSON..= header, "Value" JSON..= value]
+instance Property "Header" SingleHeaderPolicyConfigProperty where
+  type PropertyType "Header" SingleHeaderPolicyConfigProperty = Value Prelude.Text
+  set newValue SingleHeaderPolicyConfigProperty {..}
+    = SingleHeaderPolicyConfigProperty {header = newValue, ..}
+instance Property "Value" SingleHeaderPolicyConfigProperty where
+  type PropertyType "Value" SingleHeaderPolicyConfigProperty = Value Prelude.Text
+  set newValue SingleHeaderPolicyConfigProperty {..}
+    = SingleHeaderPolicyConfigProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleHeaderPolicyConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleHeaderPolicyConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleHeaderPolicyConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ContinuousDeploymentPolicy.SingleHeaderPolicyConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SingleHeaderPolicyConfigProperty :: Prelude.Type
+instance ToResourceProperties SingleHeaderPolicyConfigProperty
+instance Prelude.Eq SingleHeaderPolicyConfigProperty
+instance Prelude.Show SingleHeaderPolicyConfigProperty
+instance JSON.ToJSON SingleHeaderPolicyConfigProperty
diff --git a/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleWeightConfigProperty.hs b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleWeightConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleWeightConfigProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.CloudFront.ContinuousDeploymentPolicy.SingleWeightConfigProperty (
+        module Exports, SingleWeightConfigProperty(..),
+        mkSingleWeightConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.ContinuousDeploymentPolicy.SessionStickinessConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SingleWeightConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-singleweightconfig.html>
+    SingleWeightConfigProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-singleweightconfig.html#cfn-cloudfront-continuousdeploymentpolicy-singleweightconfig-sessionstickinessconfig>
+                                sessionStickinessConfig :: (Prelude.Maybe SessionStickinessConfigProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-singleweightconfig.html#cfn-cloudfront-continuousdeploymentpolicy-singleweightconfig-weight>
+                                weight :: (Value Prelude.Double)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSingleWeightConfigProperty ::
+  Value Prelude.Double -> SingleWeightConfigProperty
+mkSingleWeightConfigProperty weight
+  = SingleWeightConfigProperty
+      {haddock_workaround_ = (), weight = weight,
+       sessionStickinessConfig = Prelude.Nothing}
+instance ToResourceProperties SingleWeightConfigProperty where
+  toResourceProperties SingleWeightConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ContinuousDeploymentPolicy.SingleWeightConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Weight" JSON..= weight]
+                           (Prelude.catMaybes
+                              [(JSON..=) "SessionStickinessConfig"
+                                 Prelude.<$> sessionStickinessConfig]))}
+instance JSON.ToJSON SingleWeightConfigProperty where
+  toJSON SingleWeightConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Weight" JSON..= weight]
+              (Prelude.catMaybes
+                 [(JSON..=) "SessionStickinessConfig"
+                    Prelude.<$> sessionStickinessConfig])))
+instance Property "SessionStickinessConfig" SingleWeightConfigProperty where
+  type PropertyType "SessionStickinessConfig" SingleWeightConfigProperty = SessionStickinessConfigProperty
+  set newValue SingleWeightConfigProperty {..}
+    = SingleWeightConfigProperty
+        {sessionStickinessConfig = Prelude.pure newValue, ..}
+instance Property "Weight" SingleWeightConfigProperty where
+  type PropertyType "Weight" SingleWeightConfigProperty = Value Prelude.Double
+  set newValue SingleWeightConfigProperty {..}
+    = SingleWeightConfigProperty {weight = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleWeightConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleWeightConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleWeightConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ContinuousDeploymentPolicy.SingleWeightConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SingleWeightConfigProperty :: Prelude.Type
+instance ToResourceProperties SingleWeightConfigProperty
+instance Prelude.Eq SingleWeightConfigProperty
+instance Prelude.Show SingleWeightConfigProperty
+instance JSON.ToJSON SingleWeightConfigProperty
diff --git a/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleWeightPolicyConfigProperty.hs b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleWeightPolicyConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleWeightPolicyConfigProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.CloudFront.ContinuousDeploymentPolicy.SingleWeightPolicyConfigProperty (
+        module Exports, SingleWeightPolicyConfigProperty(..),
+        mkSingleWeightPolicyConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.ContinuousDeploymentPolicy.SessionStickinessConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SingleWeightPolicyConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-singleweightpolicyconfig.html>
+    SingleWeightPolicyConfigProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-singleweightpolicyconfig.html#cfn-cloudfront-continuousdeploymentpolicy-singleweightpolicyconfig-sessionstickinessconfig>
+                                      sessionStickinessConfig :: (Prelude.Maybe SessionStickinessConfigProperty),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-singleweightpolicyconfig.html#cfn-cloudfront-continuousdeploymentpolicy-singleweightpolicyconfig-weight>
+                                      weight :: (Value Prelude.Double)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSingleWeightPolicyConfigProperty ::
+  Value Prelude.Double -> SingleWeightPolicyConfigProperty
+mkSingleWeightPolicyConfigProperty weight
+  = SingleWeightPolicyConfigProperty
+      {haddock_workaround_ = (), weight = weight,
+       sessionStickinessConfig = Prelude.Nothing}
+instance ToResourceProperties SingleWeightPolicyConfigProperty where
+  toResourceProperties SingleWeightPolicyConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ContinuousDeploymentPolicy.SingleWeightPolicyConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Weight" JSON..= weight]
+                           (Prelude.catMaybes
+                              [(JSON..=) "SessionStickinessConfig"
+                                 Prelude.<$> sessionStickinessConfig]))}
+instance JSON.ToJSON SingleWeightPolicyConfigProperty where
+  toJSON SingleWeightPolicyConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Weight" JSON..= weight]
+              (Prelude.catMaybes
+                 [(JSON..=) "SessionStickinessConfig"
+                    Prelude.<$> sessionStickinessConfig])))
+instance Property "SessionStickinessConfig" SingleWeightPolicyConfigProperty where
+  type PropertyType "SessionStickinessConfig" SingleWeightPolicyConfigProperty = SessionStickinessConfigProperty
+  set newValue SingleWeightPolicyConfigProperty {..}
+    = SingleWeightPolicyConfigProperty
+        {sessionStickinessConfig = Prelude.pure newValue, ..}
+instance Property "Weight" SingleWeightPolicyConfigProperty where
+  type PropertyType "Weight" SingleWeightPolicyConfigProperty = Value Prelude.Double
+  set newValue SingleWeightPolicyConfigProperty {..}
+    = SingleWeightPolicyConfigProperty {weight = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleWeightPolicyConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleWeightPolicyConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/SingleWeightPolicyConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ContinuousDeploymentPolicy.SingleWeightPolicyConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SingleWeightPolicyConfigProperty :: Prelude.Type
+instance ToResourceProperties SingleWeightPolicyConfigProperty
+instance Prelude.Eq SingleWeightPolicyConfigProperty
+instance Prelude.Show SingleWeightPolicyConfigProperty
+instance JSON.ToJSON SingleWeightPolicyConfigProperty
diff --git a/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/TrafficConfigProperty.hs b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/TrafficConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/TrafficConfigProperty.hs
@@ -0,0 +1,61 @@
+module Stratosphere.CloudFront.ContinuousDeploymentPolicy.TrafficConfigProperty (
+        module Exports, TrafficConfigProperty(..), mkTrafficConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.ContinuousDeploymentPolicy.SingleHeaderConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.ContinuousDeploymentPolicy.SingleWeightConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TrafficConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-trafficconfig.html>
+    TrafficConfigProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-trafficconfig.html#cfn-cloudfront-continuousdeploymentpolicy-trafficconfig-singleheaderconfig>
+                           singleHeaderConfig :: (Prelude.Maybe SingleHeaderConfigProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-trafficconfig.html#cfn-cloudfront-continuousdeploymentpolicy-trafficconfig-singleweightconfig>
+                           singleWeightConfig :: (Prelude.Maybe SingleWeightConfigProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-continuousdeploymentpolicy-trafficconfig.html#cfn-cloudfront-continuousdeploymentpolicy-trafficconfig-type>
+                           type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTrafficConfigProperty ::
+  Value Prelude.Text -> TrafficConfigProperty
+mkTrafficConfigProperty type'
+  = TrafficConfigProperty
+      {haddock_workaround_ = (), type' = type',
+       singleHeaderConfig = Prelude.Nothing,
+       singleWeightConfig = Prelude.Nothing}
+instance ToResourceProperties TrafficConfigProperty where
+  toResourceProperties TrafficConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ContinuousDeploymentPolicy.TrafficConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "SingleHeaderConfig" Prelude.<$> singleHeaderConfig,
+                               (JSON..=) "SingleWeightConfig" Prelude.<$> singleWeightConfig]))}
+instance JSON.ToJSON TrafficConfigProperty where
+  toJSON TrafficConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "SingleHeaderConfig" Prelude.<$> singleHeaderConfig,
+                  (JSON..=) "SingleWeightConfig" Prelude.<$> singleWeightConfig])))
+instance Property "SingleHeaderConfig" TrafficConfigProperty where
+  type PropertyType "SingleHeaderConfig" TrafficConfigProperty = SingleHeaderConfigProperty
+  set newValue TrafficConfigProperty {..}
+    = TrafficConfigProperty
+        {singleHeaderConfig = Prelude.pure newValue, ..}
+instance Property "SingleWeightConfig" TrafficConfigProperty where
+  type PropertyType "SingleWeightConfig" TrafficConfigProperty = SingleWeightConfigProperty
+  set newValue TrafficConfigProperty {..}
+    = TrafficConfigProperty
+        {singleWeightConfig = Prelude.pure newValue, ..}
+instance Property "Type" TrafficConfigProperty where
+  type PropertyType "Type" TrafficConfigProperty = Value Prelude.Text
+  set newValue TrafficConfigProperty {..}
+    = TrafficConfigProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/TrafficConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/TrafficConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ContinuousDeploymentPolicy/TrafficConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ContinuousDeploymentPolicy.TrafficConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TrafficConfigProperty :: Prelude.Type
+instance ToResourceProperties TrafficConfigProperty
+instance Prelude.Eq TrafficConfigProperty
+instance Prelude.Show TrafficConfigProperty
+instance JSON.ToJSON TrafficConfigProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution.hs b/gen/Stratosphere/CloudFront/Distribution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution.hs
@@ -0,0 +1,46 @@
+module Stratosphere.CloudFront.Distribution (
+        module Exports, Distribution(..), mkDistribution
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.DistributionConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+data Distribution
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distribution.html>
+    Distribution {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distribution.html#cfn-cloudfront-distribution-distributionconfig>
+                  distributionConfig :: DistributionConfigProperty,
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distribution.html#cfn-cloudfront-distribution-tags>
+                  tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDistribution :: DistributionConfigProperty -> Distribution
+mkDistribution distributionConfig
+  = Distribution
+      {haddock_workaround_ = (), distributionConfig = distributionConfig,
+       tags = Prelude.Nothing}
+instance ToResourceProperties Distribution where
+  toResourceProperties Distribution {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DistributionConfig" JSON..= distributionConfig]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON Distribution where
+  toJSON Distribution {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DistributionConfig" JSON..= distributionConfig]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "DistributionConfig" Distribution where
+  type PropertyType "DistributionConfig" Distribution = DistributionConfigProperty
+  set newValue Distribution {..}
+    = Distribution {distributionConfig = newValue, ..}
+instance Property "Tags" Distribution where
+  type PropertyType "Tags" Distribution = [Tag]
+  set newValue Distribution {..}
+    = Distribution {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/CacheBehaviorProperty.hs b/gen/Stratosphere/CloudFront/Distribution/CacheBehaviorProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/CacheBehaviorProperty.hs
@@ -0,0 +1,244 @@
+module Stratosphere.CloudFront.Distribution.CacheBehaviorProperty (
+        module Exports, CacheBehaviorProperty(..), mkCacheBehaviorProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.ForwardedValuesProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.FunctionAssociationProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.GrpcConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.LambdaFunctionAssociationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CacheBehaviorProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html>
+    CacheBehaviorProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-allowedmethods>
+                           allowedMethods :: (Prelude.Maybe (ValueList Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-cachepolicyid>
+                           cachePolicyId :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-cachedmethods>
+                           cachedMethods :: (Prelude.Maybe (ValueList Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-compress>
+                           compress :: (Prelude.Maybe (Value Prelude.Bool)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-defaultttl>
+                           defaultTTL :: (Prelude.Maybe (Value Prelude.Double)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-fieldlevelencryptionid>
+                           fieldLevelEncryptionId :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-forwardedvalues>
+                           forwardedValues :: (Prelude.Maybe ForwardedValuesProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-functionassociations>
+                           functionAssociations :: (Prelude.Maybe [FunctionAssociationProperty]),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-grpcconfig>
+                           grpcConfig :: (Prelude.Maybe GrpcConfigProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-lambdafunctionassociations>
+                           lambdaFunctionAssociations :: (Prelude.Maybe [LambdaFunctionAssociationProperty]),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-maxttl>
+                           maxTTL :: (Prelude.Maybe (Value Prelude.Double)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-minttl>
+                           minTTL :: (Prelude.Maybe (Value Prelude.Double)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-originrequestpolicyid>
+                           originRequestPolicyId :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-pathpattern>
+                           pathPattern :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-realtimelogconfigarn>
+                           realtimeLogConfigArn :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-responseheaderspolicyid>
+                           responseHeadersPolicyId :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-smoothstreaming>
+                           smoothStreaming :: (Prelude.Maybe (Value Prelude.Bool)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-targetoriginid>
+                           targetOriginId :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-trustedkeygroups>
+                           trustedKeyGroups :: (Prelude.Maybe (ValueList Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-trustedsigners>
+                           trustedSigners :: (Prelude.Maybe (ValueList Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html#cfn-cloudfront-distribution-cachebehavior-viewerprotocolpolicy>
+                           viewerProtocolPolicy :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCacheBehaviorProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> CacheBehaviorProperty
+mkCacheBehaviorProperty
+  pathPattern
+  targetOriginId
+  viewerProtocolPolicy
+  = CacheBehaviorProperty
+      {haddock_workaround_ = (), pathPattern = pathPattern,
+       targetOriginId = targetOriginId,
+       viewerProtocolPolicy = viewerProtocolPolicy,
+       allowedMethods = Prelude.Nothing, cachePolicyId = Prelude.Nothing,
+       cachedMethods = Prelude.Nothing, compress = Prelude.Nothing,
+       defaultTTL = Prelude.Nothing,
+       fieldLevelEncryptionId = Prelude.Nothing,
+       forwardedValues = Prelude.Nothing,
+       functionAssociations = Prelude.Nothing,
+       grpcConfig = Prelude.Nothing,
+       lambdaFunctionAssociations = Prelude.Nothing,
+       maxTTL = Prelude.Nothing, minTTL = Prelude.Nothing,
+       originRequestPolicyId = Prelude.Nothing,
+       realtimeLogConfigArn = Prelude.Nothing,
+       responseHeadersPolicyId = Prelude.Nothing,
+       smoothStreaming = Prelude.Nothing,
+       trustedKeyGroups = Prelude.Nothing,
+       trustedSigners = Prelude.Nothing}
+instance ToResourceProperties CacheBehaviorProperty where
+  toResourceProperties CacheBehaviorProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.CacheBehavior",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["PathPattern" JSON..= pathPattern,
+                            "TargetOriginId" JSON..= targetOriginId,
+                            "ViewerProtocolPolicy" JSON..= viewerProtocolPolicy]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AllowedMethods" Prelude.<$> allowedMethods,
+                               (JSON..=) "CachePolicyId" Prelude.<$> cachePolicyId,
+                               (JSON..=) "CachedMethods" Prelude.<$> cachedMethods,
+                               (JSON..=) "Compress" Prelude.<$> compress,
+                               (JSON..=) "DefaultTTL" Prelude.<$> defaultTTL,
+                               (JSON..=) "FieldLevelEncryptionId"
+                                 Prelude.<$> fieldLevelEncryptionId,
+                               (JSON..=) "ForwardedValues" Prelude.<$> forwardedValues,
+                               (JSON..=) "FunctionAssociations" Prelude.<$> functionAssociations,
+                               (JSON..=) "GrpcConfig" Prelude.<$> grpcConfig,
+                               (JSON..=) "LambdaFunctionAssociations"
+                                 Prelude.<$> lambdaFunctionAssociations,
+                               (JSON..=) "MaxTTL" Prelude.<$> maxTTL,
+                               (JSON..=) "MinTTL" Prelude.<$> minTTL,
+                               (JSON..=) "OriginRequestPolicyId"
+                                 Prelude.<$> originRequestPolicyId,
+                               (JSON..=) "RealtimeLogConfigArn" Prelude.<$> realtimeLogConfigArn,
+                               (JSON..=) "ResponseHeadersPolicyId"
+                                 Prelude.<$> responseHeadersPolicyId,
+                               (JSON..=) "SmoothStreaming" Prelude.<$> smoothStreaming,
+                               (JSON..=) "TrustedKeyGroups" Prelude.<$> trustedKeyGroups,
+                               (JSON..=) "TrustedSigners" Prelude.<$> trustedSigners]))}
+instance JSON.ToJSON CacheBehaviorProperty where
+  toJSON CacheBehaviorProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["PathPattern" JSON..= pathPattern,
+               "TargetOriginId" JSON..= targetOriginId,
+               "ViewerProtocolPolicy" JSON..= viewerProtocolPolicy]
+              (Prelude.catMaybes
+                 [(JSON..=) "AllowedMethods" Prelude.<$> allowedMethods,
+                  (JSON..=) "CachePolicyId" Prelude.<$> cachePolicyId,
+                  (JSON..=) "CachedMethods" Prelude.<$> cachedMethods,
+                  (JSON..=) "Compress" Prelude.<$> compress,
+                  (JSON..=) "DefaultTTL" Prelude.<$> defaultTTL,
+                  (JSON..=) "FieldLevelEncryptionId"
+                    Prelude.<$> fieldLevelEncryptionId,
+                  (JSON..=) "ForwardedValues" Prelude.<$> forwardedValues,
+                  (JSON..=) "FunctionAssociations" Prelude.<$> functionAssociations,
+                  (JSON..=) "GrpcConfig" Prelude.<$> grpcConfig,
+                  (JSON..=) "LambdaFunctionAssociations"
+                    Prelude.<$> lambdaFunctionAssociations,
+                  (JSON..=) "MaxTTL" Prelude.<$> maxTTL,
+                  (JSON..=) "MinTTL" Prelude.<$> minTTL,
+                  (JSON..=) "OriginRequestPolicyId"
+                    Prelude.<$> originRequestPolicyId,
+                  (JSON..=) "RealtimeLogConfigArn" Prelude.<$> realtimeLogConfigArn,
+                  (JSON..=) "ResponseHeadersPolicyId"
+                    Prelude.<$> responseHeadersPolicyId,
+                  (JSON..=) "SmoothStreaming" Prelude.<$> smoothStreaming,
+                  (JSON..=) "TrustedKeyGroups" Prelude.<$> trustedKeyGroups,
+                  (JSON..=) "TrustedSigners" Prelude.<$> trustedSigners])))
+instance Property "AllowedMethods" CacheBehaviorProperty where
+  type PropertyType "AllowedMethods" CacheBehaviorProperty = ValueList Prelude.Text
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty
+        {allowedMethods = Prelude.pure newValue, ..}
+instance Property "CachePolicyId" CacheBehaviorProperty where
+  type PropertyType "CachePolicyId" CacheBehaviorProperty = Value Prelude.Text
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty {cachePolicyId = Prelude.pure newValue, ..}
+instance Property "CachedMethods" CacheBehaviorProperty where
+  type PropertyType "CachedMethods" CacheBehaviorProperty = ValueList Prelude.Text
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty {cachedMethods = Prelude.pure newValue, ..}
+instance Property "Compress" CacheBehaviorProperty where
+  type PropertyType "Compress" CacheBehaviorProperty = Value Prelude.Bool
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty {compress = Prelude.pure newValue, ..}
+instance Property "DefaultTTL" CacheBehaviorProperty where
+  type PropertyType "DefaultTTL" CacheBehaviorProperty = Value Prelude.Double
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty {defaultTTL = Prelude.pure newValue, ..}
+instance Property "FieldLevelEncryptionId" CacheBehaviorProperty where
+  type PropertyType "FieldLevelEncryptionId" CacheBehaviorProperty = Value Prelude.Text
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty
+        {fieldLevelEncryptionId = Prelude.pure newValue, ..}
+instance Property "ForwardedValues" CacheBehaviorProperty where
+  type PropertyType "ForwardedValues" CacheBehaviorProperty = ForwardedValuesProperty
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty
+        {forwardedValues = Prelude.pure newValue, ..}
+instance Property "FunctionAssociations" CacheBehaviorProperty where
+  type PropertyType "FunctionAssociations" CacheBehaviorProperty = [FunctionAssociationProperty]
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty
+        {functionAssociations = Prelude.pure newValue, ..}
+instance Property "GrpcConfig" CacheBehaviorProperty where
+  type PropertyType "GrpcConfig" CacheBehaviorProperty = GrpcConfigProperty
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty {grpcConfig = Prelude.pure newValue, ..}
+instance Property "LambdaFunctionAssociations" CacheBehaviorProperty where
+  type PropertyType "LambdaFunctionAssociations" CacheBehaviorProperty = [LambdaFunctionAssociationProperty]
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty
+        {lambdaFunctionAssociations = Prelude.pure newValue, ..}
+instance Property "MaxTTL" CacheBehaviorProperty where
+  type PropertyType "MaxTTL" CacheBehaviorProperty = Value Prelude.Double
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty {maxTTL = Prelude.pure newValue, ..}
+instance Property "MinTTL" CacheBehaviorProperty where
+  type PropertyType "MinTTL" CacheBehaviorProperty = Value Prelude.Double
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty {minTTL = Prelude.pure newValue, ..}
+instance Property "OriginRequestPolicyId" CacheBehaviorProperty where
+  type PropertyType "OriginRequestPolicyId" CacheBehaviorProperty = Value Prelude.Text
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty
+        {originRequestPolicyId = Prelude.pure newValue, ..}
+instance Property "PathPattern" CacheBehaviorProperty where
+  type PropertyType "PathPattern" CacheBehaviorProperty = Value Prelude.Text
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty {pathPattern = newValue, ..}
+instance Property "RealtimeLogConfigArn" CacheBehaviorProperty where
+  type PropertyType "RealtimeLogConfigArn" CacheBehaviorProperty = Value Prelude.Text
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty
+        {realtimeLogConfigArn = Prelude.pure newValue, ..}
+instance Property "ResponseHeadersPolicyId" CacheBehaviorProperty where
+  type PropertyType "ResponseHeadersPolicyId" CacheBehaviorProperty = Value Prelude.Text
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty
+        {responseHeadersPolicyId = Prelude.pure newValue, ..}
+instance Property "SmoothStreaming" CacheBehaviorProperty where
+  type PropertyType "SmoothStreaming" CacheBehaviorProperty = Value Prelude.Bool
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty
+        {smoothStreaming = Prelude.pure newValue, ..}
+instance Property "TargetOriginId" CacheBehaviorProperty where
+  type PropertyType "TargetOriginId" CacheBehaviorProperty = Value Prelude.Text
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty {targetOriginId = newValue, ..}
+instance Property "TrustedKeyGroups" CacheBehaviorProperty where
+  type PropertyType "TrustedKeyGroups" CacheBehaviorProperty = ValueList Prelude.Text
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty
+        {trustedKeyGroups = Prelude.pure newValue, ..}
+instance Property "TrustedSigners" CacheBehaviorProperty where
+  type PropertyType "TrustedSigners" CacheBehaviorProperty = ValueList Prelude.Text
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty
+        {trustedSigners = Prelude.pure newValue, ..}
+instance Property "ViewerProtocolPolicy" CacheBehaviorProperty where
+  type PropertyType "ViewerProtocolPolicy" CacheBehaviorProperty = Value Prelude.Text
+  set newValue CacheBehaviorProperty {..}
+    = CacheBehaviorProperty {viewerProtocolPolicy = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/CacheBehaviorProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/CacheBehaviorProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/CacheBehaviorProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.CacheBehaviorProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CacheBehaviorProperty :: Prelude.Type
+instance ToResourceProperties CacheBehaviorProperty
+instance Prelude.Eq CacheBehaviorProperty
+instance Prelude.Show CacheBehaviorProperty
+instance JSON.ToJSON CacheBehaviorProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/CookiesProperty.hs b/gen/Stratosphere/CloudFront/Distribution/CookiesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/CookiesProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.CloudFront.Distribution.CookiesProperty (
+        CookiesProperty(..), mkCookiesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CookiesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cookies.html>
+    CookiesProperty {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cookies.html#cfn-cloudfront-distribution-cookies-forward>
+                     forward :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cookies.html#cfn-cloudfront-distribution-cookies-whitelistednames>
+                     whitelistedNames :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCookiesProperty :: Value Prelude.Text -> CookiesProperty
+mkCookiesProperty forward
+  = CookiesProperty
+      {haddock_workaround_ = (), forward = forward,
+       whitelistedNames = Prelude.Nothing}
+instance ToResourceProperties CookiesProperty where
+  toResourceProperties CookiesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.Cookies",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Forward" JSON..= forward]
+                           (Prelude.catMaybes
+                              [(JSON..=) "WhitelistedNames" Prelude.<$> whitelistedNames]))}
+instance JSON.ToJSON CookiesProperty where
+  toJSON CookiesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Forward" JSON..= forward]
+              (Prelude.catMaybes
+                 [(JSON..=) "WhitelistedNames" Prelude.<$> whitelistedNames])))
+instance Property "Forward" CookiesProperty where
+  type PropertyType "Forward" CookiesProperty = Value Prelude.Text
+  set newValue CookiesProperty {..}
+    = CookiesProperty {forward = newValue, ..}
+instance Property "WhitelistedNames" CookiesProperty where
+  type PropertyType "WhitelistedNames" CookiesProperty = ValueList Prelude.Text
+  set newValue CookiesProperty {..}
+    = CookiesProperty {whitelistedNames = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/CookiesProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/CookiesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/CookiesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.CookiesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CookiesProperty :: Prelude.Type
+instance ToResourceProperties CookiesProperty
+instance Prelude.Eq CookiesProperty
+instance Prelude.Show CookiesProperty
+instance JSON.ToJSON CookiesProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/CustomErrorResponseProperty.hs b/gen/Stratosphere/CloudFront/Distribution/CustomErrorResponseProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/CustomErrorResponseProperty.hs
@@ -0,0 +1,68 @@
+module Stratosphere.CloudFront.Distribution.CustomErrorResponseProperty (
+        CustomErrorResponseProperty(..), mkCustomErrorResponseProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CustomErrorResponseProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-customerrorresponse.html>
+    CustomErrorResponseProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-customerrorresponse.html#cfn-cloudfront-distribution-customerrorresponse-errorcachingminttl>
+                                 errorCachingMinTTL :: (Prelude.Maybe (Value Prelude.Double)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-customerrorresponse.html#cfn-cloudfront-distribution-customerrorresponse-errorcode>
+                                 errorCode :: (Value Prelude.Integer),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-customerrorresponse.html#cfn-cloudfront-distribution-customerrorresponse-responsecode>
+                                 responseCode :: (Prelude.Maybe (Value Prelude.Integer)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-customerrorresponse.html#cfn-cloudfront-distribution-customerrorresponse-responsepagepath>
+                                 responsePagePath :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCustomErrorResponseProperty ::
+  Value Prelude.Integer -> CustomErrorResponseProperty
+mkCustomErrorResponseProperty errorCode
+  = CustomErrorResponseProperty
+      {haddock_workaround_ = (), errorCode = errorCode,
+       errorCachingMinTTL = Prelude.Nothing,
+       responseCode = Prelude.Nothing, responsePagePath = Prelude.Nothing}
+instance ToResourceProperties CustomErrorResponseProperty where
+  toResourceProperties CustomErrorResponseProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.CustomErrorResponse",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ErrorCode" JSON..= errorCode]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ErrorCachingMinTTL" Prelude.<$> errorCachingMinTTL,
+                               (JSON..=) "ResponseCode" Prelude.<$> responseCode,
+                               (JSON..=) "ResponsePagePath" Prelude.<$> responsePagePath]))}
+instance JSON.ToJSON CustomErrorResponseProperty where
+  toJSON CustomErrorResponseProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ErrorCode" JSON..= errorCode]
+              (Prelude.catMaybes
+                 [(JSON..=) "ErrorCachingMinTTL" Prelude.<$> errorCachingMinTTL,
+                  (JSON..=) "ResponseCode" Prelude.<$> responseCode,
+                  (JSON..=) "ResponsePagePath" Prelude.<$> responsePagePath])))
+instance Property "ErrorCachingMinTTL" CustomErrorResponseProperty where
+  type PropertyType "ErrorCachingMinTTL" CustomErrorResponseProperty = Value Prelude.Double
+  set newValue CustomErrorResponseProperty {..}
+    = CustomErrorResponseProperty
+        {errorCachingMinTTL = Prelude.pure newValue, ..}
+instance Property "ErrorCode" CustomErrorResponseProperty where
+  type PropertyType "ErrorCode" CustomErrorResponseProperty = Value Prelude.Integer
+  set newValue CustomErrorResponseProperty {..}
+    = CustomErrorResponseProperty {errorCode = newValue, ..}
+instance Property "ResponseCode" CustomErrorResponseProperty where
+  type PropertyType "ResponseCode" CustomErrorResponseProperty = Value Prelude.Integer
+  set newValue CustomErrorResponseProperty {..}
+    = CustomErrorResponseProperty
+        {responseCode = Prelude.pure newValue, ..}
+instance Property "ResponsePagePath" CustomErrorResponseProperty where
+  type PropertyType "ResponsePagePath" CustomErrorResponseProperty = Value Prelude.Text
+  set newValue CustomErrorResponseProperty {..}
+    = CustomErrorResponseProperty
+        {responsePagePath = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/CustomErrorResponseProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/CustomErrorResponseProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/CustomErrorResponseProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.CustomErrorResponseProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CustomErrorResponseProperty :: Prelude.Type
+instance ToResourceProperties CustomErrorResponseProperty
+instance Prelude.Eq CustomErrorResponseProperty
+instance Prelude.Show CustomErrorResponseProperty
+instance JSON.ToJSON CustomErrorResponseProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/CustomOriginConfigProperty.hs b/gen/Stratosphere/CloudFront/Distribution/CustomOriginConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/CustomOriginConfigProperty.hs
@@ -0,0 +1,100 @@
+module Stratosphere.CloudFront.Distribution.CustomOriginConfigProperty (
+        CustomOriginConfigProperty(..), mkCustomOriginConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CustomOriginConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-customoriginconfig.html>
+    CustomOriginConfigProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-customoriginconfig.html#cfn-cloudfront-distribution-customoriginconfig-httpport>
+                                hTTPPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-customoriginconfig.html#cfn-cloudfront-distribution-customoriginconfig-httpsport>
+                                hTTPSPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-customoriginconfig.html#cfn-cloudfront-distribution-customoriginconfig-ipaddresstype>
+                                ipAddressType :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-customoriginconfig.html#cfn-cloudfront-distribution-customoriginconfig-originkeepalivetimeout>
+                                originKeepaliveTimeout :: (Prelude.Maybe (Value Prelude.Integer)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-customoriginconfig.html#cfn-cloudfront-distribution-customoriginconfig-originprotocolpolicy>
+                                originProtocolPolicy :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-customoriginconfig.html#cfn-cloudfront-distribution-customoriginconfig-originreadtimeout>
+                                originReadTimeout :: (Prelude.Maybe (Value Prelude.Integer)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-customoriginconfig.html#cfn-cloudfront-distribution-customoriginconfig-originsslprotocols>
+                                originSSLProtocols :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCustomOriginConfigProperty ::
+  Value Prelude.Text -> CustomOriginConfigProperty
+mkCustomOriginConfigProperty originProtocolPolicy
+  = CustomOriginConfigProperty
+      {haddock_workaround_ = (),
+       originProtocolPolicy = originProtocolPolicy,
+       hTTPPort = Prelude.Nothing, hTTPSPort = Prelude.Nothing,
+       ipAddressType = Prelude.Nothing,
+       originKeepaliveTimeout = Prelude.Nothing,
+       originReadTimeout = Prelude.Nothing,
+       originSSLProtocols = Prelude.Nothing}
+instance ToResourceProperties CustomOriginConfigProperty where
+  toResourceProperties CustomOriginConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.CustomOriginConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["OriginProtocolPolicy" JSON..= originProtocolPolicy]
+                           (Prelude.catMaybes
+                              [(JSON..=) "HTTPPort" Prelude.<$> hTTPPort,
+                               (JSON..=) "HTTPSPort" Prelude.<$> hTTPSPort,
+                               (JSON..=) "IpAddressType" Prelude.<$> ipAddressType,
+                               (JSON..=) "OriginKeepaliveTimeout"
+                                 Prelude.<$> originKeepaliveTimeout,
+                               (JSON..=) "OriginReadTimeout" Prelude.<$> originReadTimeout,
+                               (JSON..=) "OriginSSLProtocols" Prelude.<$> originSSLProtocols]))}
+instance JSON.ToJSON CustomOriginConfigProperty where
+  toJSON CustomOriginConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["OriginProtocolPolicy" JSON..= originProtocolPolicy]
+              (Prelude.catMaybes
+                 [(JSON..=) "HTTPPort" Prelude.<$> hTTPPort,
+                  (JSON..=) "HTTPSPort" Prelude.<$> hTTPSPort,
+                  (JSON..=) "IpAddressType" Prelude.<$> ipAddressType,
+                  (JSON..=) "OriginKeepaliveTimeout"
+                    Prelude.<$> originKeepaliveTimeout,
+                  (JSON..=) "OriginReadTimeout" Prelude.<$> originReadTimeout,
+                  (JSON..=) "OriginSSLProtocols" Prelude.<$> originSSLProtocols])))
+instance Property "HTTPPort" CustomOriginConfigProperty where
+  type PropertyType "HTTPPort" CustomOriginConfigProperty = Value Prelude.Integer
+  set newValue CustomOriginConfigProperty {..}
+    = CustomOriginConfigProperty {hTTPPort = Prelude.pure newValue, ..}
+instance Property "HTTPSPort" CustomOriginConfigProperty where
+  type PropertyType "HTTPSPort" CustomOriginConfigProperty = Value Prelude.Integer
+  set newValue CustomOriginConfigProperty {..}
+    = CustomOriginConfigProperty
+        {hTTPSPort = Prelude.pure newValue, ..}
+instance Property "IpAddressType" CustomOriginConfigProperty where
+  type PropertyType "IpAddressType" CustomOriginConfigProperty = Value Prelude.Text
+  set newValue CustomOriginConfigProperty {..}
+    = CustomOriginConfigProperty
+        {ipAddressType = Prelude.pure newValue, ..}
+instance Property "OriginKeepaliveTimeout" CustomOriginConfigProperty where
+  type PropertyType "OriginKeepaliveTimeout" CustomOriginConfigProperty = Value Prelude.Integer
+  set newValue CustomOriginConfigProperty {..}
+    = CustomOriginConfigProperty
+        {originKeepaliveTimeout = Prelude.pure newValue, ..}
+instance Property "OriginProtocolPolicy" CustomOriginConfigProperty where
+  type PropertyType "OriginProtocolPolicy" CustomOriginConfigProperty = Value Prelude.Text
+  set newValue CustomOriginConfigProperty {..}
+    = CustomOriginConfigProperty {originProtocolPolicy = newValue, ..}
+instance Property "OriginReadTimeout" CustomOriginConfigProperty where
+  type PropertyType "OriginReadTimeout" CustomOriginConfigProperty = Value Prelude.Integer
+  set newValue CustomOriginConfigProperty {..}
+    = CustomOriginConfigProperty
+        {originReadTimeout = Prelude.pure newValue, ..}
+instance Property "OriginSSLProtocols" CustomOriginConfigProperty where
+  type PropertyType "OriginSSLProtocols" CustomOriginConfigProperty = ValueList Prelude.Text
+  set newValue CustomOriginConfigProperty {..}
+    = CustomOriginConfigProperty
+        {originSSLProtocols = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/CustomOriginConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/CustomOriginConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/CustomOriginConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.CustomOriginConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CustomOriginConfigProperty :: Prelude.Type
+instance ToResourceProperties CustomOriginConfigProperty
+instance Prelude.Eq CustomOriginConfigProperty
+instance Prelude.Show CustomOriginConfigProperty
+instance JSON.ToJSON CustomOriginConfigProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/DefaultCacheBehaviorProperty.hs b/gen/Stratosphere/CloudFront/Distribution/DefaultCacheBehaviorProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/DefaultCacheBehaviorProperty.hs
@@ -0,0 +1,238 @@
+module Stratosphere.CloudFront.Distribution.DefaultCacheBehaviorProperty (
+        module Exports, DefaultCacheBehaviorProperty(..),
+        mkDefaultCacheBehaviorProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.ForwardedValuesProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.FunctionAssociationProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.GrpcConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.LambdaFunctionAssociationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DefaultCacheBehaviorProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html>
+    DefaultCacheBehaviorProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-allowedmethods>
+                                  allowedMethods :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-cachepolicyid>
+                                  cachePolicyId :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-cachedmethods>
+                                  cachedMethods :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-compress>
+                                  compress :: (Prelude.Maybe (Value Prelude.Bool)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-defaultttl>
+                                  defaultTTL :: (Prelude.Maybe (Value Prelude.Double)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-fieldlevelencryptionid>
+                                  fieldLevelEncryptionId :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-forwardedvalues>
+                                  forwardedValues :: (Prelude.Maybe ForwardedValuesProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-functionassociations>
+                                  functionAssociations :: (Prelude.Maybe [FunctionAssociationProperty]),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-grpcconfig>
+                                  grpcConfig :: (Prelude.Maybe GrpcConfigProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-lambdafunctionassociations>
+                                  lambdaFunctionAssociations :: (Prelude.Maybe [LambdaFunctionAssociationProperty]),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-maxttl>
+                                  maxTTL :: (Prelude.Maybe (Value Prelude.Double)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-minttl>
+                                  minTTL :: (Prelude.Maybe (Value Prelude.Double)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-originrequestpolicyid>
+                                  originRequestPolicyId :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-realtimelogconfigarn>
+                                  realtimeLogConfigArn :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-responseheaderspolicyid>
+                                  responseHeadersPolicyId :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-smoothstreaming>
+                                  smoothStreaming :: (Prelude.Maybe (Value Prelude.Bool)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-targetoriginid>
+                                  targetOriginId :: (Value Prelude.Text),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-trustedkeygroups>
+                                  trustedKeyGroups :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-trustedsigners>
+                                  trustedSigners :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-defaultcachebehavior.html#cfn-cloudfront-distribution-defaultcachebehavior-viewerprotocolpolicy>
+                                  viewerProtocolPolicy :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDefaultCacheBehaviorProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> DefaultCacheBehaviorProperty
+mkDefaultCacheBehaviorProperty targetOriginId viewerProtocolPolicy
+  = DefaultCacheBehaviorProperty
+      {haddock_workaround_ = (), targetOriginId = targetOriginId,
+       viewerProtocolPolicy = viewerProtocolPolicy,
+       allowedMethods = Prelude.Nothing, cachePolicyId = Prelude.Nothing,
+       cachedMethods = Prelude.Nothing, compress = Prelude.Nothing,
+       defaultTTL = Prelude.Nothing,
+       fieldLevelEncryptionId = Prelude.Nothing,
+       forwardedValues = Prelude.Nothing,
+       functionAssociations = Prelude.Nothing,
+       grpcConfig = Prelude.Nothing,
+       lambdaFunctionAssociations = Prelude.Nothing,
+       maxTTL = Prelude.Nothing, minTTL = Prelude.Nothing,
+       originRequestPolicyId = Prelude.Nothing,
+       realtimeLogConfigArn = Prelude.Nothing,
+       responseHeadersPolicyId = Prelude.Nothing,
+       smoothStreaming = Prelude.Nothing,
+       trustedKeyGroups = Prelude.Nothing,
+       trustedSigners = Prelude.Nothing}
+instance ToResourceProperties DefaultCacheBehaviorProperty where
+  toResourceProperties DefaultCacheBehaviorProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.DefaultCacheBehavior",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["TargetOriginId" JSON..= targetOriginId,
+                            "ViewerProtocolPolicy" JSON..= viewerProtocolPolicy]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AllowedMethods" Prelude.<$> allowedMethods,
+                               (JSON..=) "CachePolicyId" Prelude.<$> cachePolicyId,
+                               (JSON..=) "CachedMethods" Prelude.<$> cachedMethods,
+                               (JSON..=) "Compress" Prelude.<$> compress,
+                               (JSON..=) "DefaultTTL" Prelude.<$> defaultTTL,
+                               (JSON..=) "FieldLevelEncryptionId"
+                                 Prelude.<$> fieldLevelEncryptionId,
+                               (JSON..=) "ForwardedValues" Prelude.<$> forwardedValues,
+                               (JSON..=) "FunctionAssociations" Prelude.<$> functionAssociations,
+                               (JSON..=) "GrpcConfig" Prelude.<$> grpcConfig,
+                               (JSON..=) "LambdaFunctionAssociations"
+                                 Prelude.<$> lambdaFunctionAssociations,
+                               (JSON..=) "MaxTTL" Prelude.<$> maxTTL,
+                               (JSON..=) "MinTTL" Prelude.<$> minTTL,
+                               (JSON..=) "OriginRequestPolicyId"
+                                 Prelude.<$> originRequestPolicyId,
+                               (JSON..=) "RealtimeLogConfigArn" Prelude.<$> realtimeLogConfigArn,
+                               (JSON..=) "ResponseHeadersPolicyId"
+                                 Prelude.<$> responseHeadersPolicyId,
+                               (JSON..=) "SmoothStreaming" Prelude.<$> smoothStreaming,
+                               (JSON..=) "TrustedKeyGroups" Prelude.<$> trustedKeyGroups,
+                               (JSON..=) "TrustedSigners" Prelude.<$> trustedSigners]))}
+instance JSON.ToJSON DefaultCacheBehaviorProperty where
+  toJSON DefaultCacheBehaviorProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["TargetOriginId" JSON..= targetOriginId,
+               "ViewerProtocolPolicy" JSON..= viewerProtocolPolicy]
+              (Prelude.catMaybes
+                 [(JSON..=) "AllowedMethods" Prelude.<$> allowedMethods,
+                  (JSON..=) "CachePolicyId" Prelude.<$> cachePolicyId,
+                  (JSON..=) "CachedMethods" Prelude.<$> cachedMethods,
+                  (JSON..=) "Compress" Prelude.<$> compress,
+                  (JSON..=) "DefaultTTL" Prelude.<$> defaultTTL,
+                  (JSON..=) "FieldLevelEncryptionId"
+                    Prelude.<$> fieldLevelEncryptionId,
+                  (JSON..=) "ForwardedValues" Prelude.<$> forwardedValues,
+                  (JSON..=) "FunctionAssociations" Prelude.<$> functionAssociations,
+                  (JSON..=) "GrpcConfig" Prelude.<$> grpcConfig,
+                  (JSON..=) "LambdaFunctionAssociations"
+                    Prelude.<$> lambdaFunctionAssociations,
+                  (JSON..=) "MaxTTL" Prelude.<$> maxTTL,
+                  (JSON..=) "MinTTL" Prelude.<$> minTTL,
+                  (JSON..=) "OriginRequestPolicyId"
+                    Prelude.<$> originRequestPolicyId,
+                  (JSON..=) "RealtimeLogConfigArn" Prelude.<$> realtimeLogConfigArn,
+                  (JSON..=) "ResponseHeadersPolicyId"
+                    Prelude.<$> responseHeadersPolicyId,
+                  (JSON..=) "SmoothStreaming" Prelude.<$> smoothStreaming,
+                  (JSON..=) "TrustedKeyGroups" Prelude.<$> trustedKeyGroups,
+                  (JSON..=) "TrustedSigners" Prelude.<$> trustedSigners])))
+instance Property "AllowedMethods" DefaultCacheBehaviorProperty where
+  type PropertyType "AllowedMethods" DefaultCacheBehaviorProperty = ValueList Prelude.Text
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {allowedMethods = Prelude.pure newValue, ..}
+instance Property "CachePolicyId" DefaultCacheBehaviorProperty where
+  type PropertyType "CachePolicyId" DefaultCacheBehaviorProperty = Value Prelude.Text
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {cachePolicyId = Prelude.pure newValue, ..}
+instance Property "CachedMethods" DefaultCacheBehaviorProperty where
+  type PropertyType "CachedMethods" DefaultCacheBehaviorProperty = ValueList Prelude.Text
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {cachedMethods = Prelude.pure newValue, ..}
+instance Property "Compress" DefaultCacheBehaviorProperty where
+  type PropertyType "Compress" DefaultCacheBehaviorProperty = Value Prelude.Bool
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {compress = Prelude.pure newValue, ..}
+instance Property "DefaultTTL" DefaultCacheBehaviorProperty where
+  type PropertyType "DefaultTTL" DefaultCacheBehaviorProperty = Value Prelude.Double
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {defaultTTL = Prelude.pure newValue, ..}
+instance Property "FieldLevelEncryptionId" DefaultCacheBehaviorProperty where
+  type PropertyType "FieldLevelEncryptionId" DefaultCacheBehaviorProperty = Value Prelude.Text
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {fieldLevelEncryptionId = Prelude.pure newValue, ..}
+instance Property "ForwardedValues" DefaultCacheBehaviorProperty where
+  type PropertyType "ForwardedValues" DefaultCacheBehaviorProperty = ForwardedValuesProperty
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {forwardedValues = Prelude.pure newValue, ..}
+instance Property "FunctionAssociations" DefaultCacheBehaviorProperty where
+  type PropertyType "FunctionAssociations" DefaultCacheBehaviorProperty = [FunctionAssociationProperty]
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {functionAssociations = Prelude.pure newValue, ..}
+instance Property "GrpcConfig" DefaultCacheBehaviorProperty where
+  type PropertyType "GrpcConfig" DefaultCacheBehaviorProperty = GrpcConfigProperty
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {grpcConfig = Prelude.pure newValue, ..}
+instance Property "LambdaFunctionAssociations" DefaultCacheBehaviorProperty where
+  type PropertyType "LambdaFunctionAssociations" DefaultCacheBehaviorProperty = [LambdaFunctionAssociationProperty]
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {lambdaFunctionAssociations = Prelude.pure newValue, ..}
+instance Property "MaxTTL" DefaultCacheBehaviorProperty where
+  type PropertyType "MaxTTL" DefaultCacheBehaviorProperty = Value Prelude.Double
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty {maxTTL = Prelude.pure newValue, ..}
+instance Property "MinTTL" DefaultCacheBehaviorProperty where
+  type PropertyType "MinTTL" DefaultCacheBehaviorProperty = Value Prelude.Double
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty {minTTL = Prelude.pure newValue, ..}
+instance Property "OriginRequestPolicyId" DefaultCacheBehaviorProperty where
+  type PropertyType "OriginRequestPolicyId" DefaultCacheBehaviorProperty = Value Prelude.Text
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {originRequestPolicyId = Prelude.pure newValue, ..}
+instance Property "RealtimeLogConfigArn" DefaultCacheBehaviorProperty where
+  type PropertyType "RealtimeLogConfigArn" DefaultCacheBehaviorProperty = Value Prelude.Text
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {realtimeLogConfigArn = Prelude.pure newValue, ..}
+instance Property "ResponseHeadersPolicyId" DefaultCacheBehaviorProperty where
+  type PropertyType "ResponseHeadersPolicyId" DefaultCacheBehaviorProperty = Value Prelude.Text
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {responseHeadersPolicyId = Prelude.pure newValue, ..}
+instance Property "SmoothStreaming" DefaultCacheBehaviorProperty where
+  type PropertyType "SmoothStreaming" DefaultCacheBehaviorProperty = Value Prelude.Bool
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {smoothStreaming = Prelude.pure newValue, ..}
+instance Property "TargetOriginId" DefaultCacheBehaviorProperty where
+  type PropertyType "TargetOriginId" DefaultCacheBehaviorProperty = Value Prelude.Text
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty {targetOriginId = newValue, ..}
+instance Property "TrustedKeyGroups" DefaultCacheBehaviorProperty where
+  type PropertyType "TrustedKeyGroups" DefaultCacheBehaviorProperty = ValueList Prelude.Text
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {trustedKeyGroups = Prelude.pure newValue, ..}
+instance Property "TrustedSigners" DefaultCacheBehaviorProperty where
+  type PropertyType "TrustedSigners" DefaultCacheBehaviorProperty = ValueList Prelude.Text
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {trustedSigners = Prelude.pure newValue, ..}
+instance Property "ViewerProtocolPolicy" DefaultCacheBehaviorProperty where
+  type PropertyType "ViewerProtocolPolicy" DefaultCacheBehaviorProperty = Value Prelude.Text
+  set newValue DefaultCacheBehaviorProperty {..}
+    = DefaultCacheBehaviorProperty
+        {viewerProtocolPolicy = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/DefaultCacheBehaviorProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/DefaultCacheBehaviorProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/DefaultCacheBehaviorProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.DefaultCacheBehaviorProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DefaultCacheBehaviorProperty :: Prelude.Type
+instance ToResourceProperties DefaultCacheBehaviorProperty
+instance Prelude.Eq DefaultCacheBehaviorProperty
+instance Prelude.Show DefaultCacheBehaviorProperty
+instance JSON.ToJSON DefaultCacheBehaviorProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/DefinitionProperty.hs b/gen/Stratosphere/CloudFront/Distribution/DefinitionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/DefinitionProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.CloudFront.Distribution.DefinitionProperty (
+        module Exports, DefinitionProperty(..), mkDefinitionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.StringSchemaProperty as Exports
+import Stratosphere.ResourceProperties
+data DefinitionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-definition.html>
+    DefinitionProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-definition.html#cfn-cloudfront-distribution-definition-stringschema>
+                        stringSchema :: (Prelude.Maybe StringSchemaProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDefinitionProperty :: DefinitionProperty
+mkDefinitionProperty
+  = DefinitionProperty
+      {haddock_workaround_ = (), stringSchema = Prelude.Nothing}
+instance ToResourceProperties DefinitionProperty where
+  toResourceProperties DefinitionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.Definition",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "StringSchema" Prelude.<$> stringSchema])}
+instance JSON.ToJSON DefinitionProperty where
+  toJSON DefinitionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "StringSchema" Prelude.<$> stringSchema]))
+instance Property "StringSchema" DefinitionProperty where
+  type PropertyType "StringSchema" DefinitionProperty = StringSchemaProperty
+  set newValue DefinitionProperty {..}
+    = DefinitionProperty {stringSchema = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/DefinitionProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/DefinitionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/DefinitionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.DefinitionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DefinitionProperty :: Prelude.Type
+instance ToResourceProperties DefinitionProperty
+instance Prelude.Eq DefinitionProperty
+instance Prelude.Show DefinitionProperty
+instance JSON.ToJSON DefinitionProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/DistributionConfigProperty.hs b/gen/Stratosphere/CloudFront/Distribution/DistributionConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/DistributionConfigProperty.hs
@@ -0,0 +1,266 @@
+module Stratosphere.CloudFront.Distribution.DistributionConfigProperty (
+        module Exports, DistributionConfigProperty(..),
+        mkDistributionConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.CacheBehaviorProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.CustomErrorResponseProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.DefaultCacheBehaviorProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.LegacyCustomOriginProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.LegacyS3OriginProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.LoggingProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.OriginProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.OriginGroupsProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.RestrictionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.TenantConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.ViewerCertificateProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DistributionConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html>
+    DistributionConfigProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-aliases>
+                                aliases :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-anycastiplistid>
+                                anycastIpListId :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-cnames>
+                                cNAMEs :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-cachebehaviors>
+                                cacheBehaviors :: (Prelude.Maybe [CacheBehaviorProperty]),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-comment>
+                                comment :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-connectionmode>
+                                connectionMode :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-continuousdeploymentpolicyid>
+                                continuousDeploymentPolicyId :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-customerrorresponses>
+                                customErrorResponses :: (Prelude.Maybe [CustomErrorResponseProperty]),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-customorigin>
+                                customOrigin :: (Prelude.Maybe LegacyCustomOriginProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-defaultcachebehavior>
+                                defaultCacheBehavior :: DefaultCacheBehaviorProperty,
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-defaultrootobject>
+                                defaultRootObject :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-enabled>
+                                enabled :: (Value Prelude.Bool),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-httpversion>
+                                httpVersion :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-ipv6enabled>
+                                iPV6Enabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-logging>
+                                logging :: (Prelude.Maybe LoggingProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-origingroups>
+                                originGroups :: (Prelude.Maybe OriginGroupsProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-origins>
+                                origins :: (Prelude.Maybe [OriginProperty]),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-priceclass>
+                                priceClass :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-restrictions>
+                                restrictions :: (Prelude.Maybe RestrictionsProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-s3origin>
+                                s3Origin :: (Prelude.Maybe LegacyS3OriginProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-staging>
+                                staging :: (Prelude.Maybe (Value Prelude.Bool)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-tenantconfig>
+                                tenantConfig :: (Prelude.Maybe TenantConfigProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-viewercertificate>
+                                viewerCertificate :: (Prelude.Maybe ViewerCertificateProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-webaclid>
+                                webACLId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDistributionConfigProperty ::
+  DefaultCacheBehaviorProperty
+  -> Value Prelude.Bool -> DistributionConfigProperty
+mkDistributionConfigProperty defaultCacheBehavior enabled
+  = DistributionConfigProperty
+      {haddock_workaround_ = (),
+       defaultCacheBehavior = defaultCacheBehavior, enabled = enabled,
+       aliases = Prelude.Nothing, anycastIpListId = Prelude.Nothing,
+       cNAMEs = Prelude.Nothing, cacheBehaviors = Prelude.Nothing,
+       comment = Prelude.Nothing, connectionMode = Prelude.Nothing,
+       continuousDeploymentPolicyId = Prelude.Nothing,
+       customErrorResponses = Prelude.Nothing,
+       customOrigin = Prelude.Nothing,
+       defaultRootObject = Prelude.Nothing, httpVersion = Prelude.Nothing,
+       iPV6Enabled = Prelude.Nothing, logging = Prelude.Nothing,
+       originGroups = Prelude.Nothing, origins = Prelude.Nothing,
+       priceClass = Prelude.Nothing, restrictions = Prelude.Nothing,
+       s3Origin = Prelude.Nothing, staging = Prelude.Nothing,
+       tenantConfig = Prelude.Nothing,
+       viewerCertificate = Prelude.Nothing, webACLId = Prelude.Nothing}
+instance ToResourceProperties DistributionConfigProperty where
+  toResourceProperties DistributionConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.DistributionConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DefaultCacheBehavior" JSON..= defaultCacheBehavior,
+                            "Enabled" JSON..= enabled]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Aliases" Prelude.<$> aliases,
+                               (JSON..=) "AnycastIpListId" Prelude.<$> anycastIpListId,
+                               (JSON..=) "CNAMEs" Prelude.<$> cNAMEs,
+                               (JSON..=) "CacheBehaviors" Prelude.<$> cacheBehaviors,
+                               (JSON..=) "Comment" Prelude.<$> comment,
+                               (JSON..=) "ConnectionMode" Prelude.<$> connectionMode,
+                               (JSON..=) "ContinuousDeploymentPolicyId"
+                                 Prelude.<$> continuousDeploymentPolicyId,
+                               (JSON..=) "CustomErrorResponses" Prelude.<$> customErrorResponses,
+                               (JSON..=) "CustomOrigin" Prelude.<$> customOrigin,
+                               (JSON..=) "DefaultRootObject" Prelude.<$> defaultRootObject,
+                               (JSON..=) "HttpVersion" Prelude.<$> httpVersion,
+                               (JSON..=) "IPV6Enabled" Prelude.<$> iPV6Enabled,
+                               (JSON..=) "Logging" Prelude.<$> logging,
+                               (JSON..=) "OriginGroups" Prelude.<$> originGroups,
+                               (JSON..=) "Origins" Prelude.<$> origins,
+                               (JSON..=) "PriceClass" Prelude.<$> priceClass,
+                               (JSON..=) "Restrictions" Prelude.<$> restrictions,
+                               (JSON..=) "S3Origin" Prelude.<$> s3Origin,
+                               (JSON..=) "Staging" Prelude.<$> staging,
+                               (JSON..=) "TenantConfig" Prelude.<$> tenantConfig,
+                               (JSON..=) "ViewerCertificate" Prelude.<$> viewerCertificate,
+                               (JSON..=) "WebACLId" Prelude.<$> webACLId]))}
+instance JSON.ToJSON DistributionConfigProperty where
+  toJSON DistributionConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DefaultCacheBehavior" JSON..= defaultCacheBehavior,
+               "Enabled" JSON..= enabled]
+              (Prelude.catMaybes
+                 [(JSON..=) "Aliases" Prelude.<$> aliases,
+                  (JSON..=) "AnycastIpListId" Prelude.<$> anycastIpListId,
+                  (JSON..=) "CNAMEs" Prelude.<$> cNAMEs,
+                  (JSON..=) "CacheBehaviors" Prelude.<$> cacheBehaviors,
+                  (JSON..=) "Comment" Prelude.<$> comment,
+                  (JSON..=) "ConnectionMode" Prelude.<$> connectionMode,
+                  (JSON..=) "ContinuousDeploymentPolicyId"
+                    Prelude.<$> continuousDeploymentPolicyId,
+                  (JSON..=) "CustomErrorResponses" Prelude.<$> customErrorResponses,
+                  (JSON..=) "CustomOrigin" Prelude.<$> customOrigin,
+                  (JSON..=) "DefaultRootObject" Prelude.<$> defaultRootObject,
+                  (JSON..=) "HttpVersion" Prelude.<$> httpVersion,
+                  (JSON..=) "IPV6Enabled" Prelude.<$> iPV6Enabled,
+                  (JSON..=) "Logging" Prelude.<$> logging,
+                  (JSON..=) "OriginGroups" Prelude.<$> originGroups,
+                  (JSON..=) "Origins" Prelude.<$> origins,
+                  (JSON..=) "PriceClass" Prelude.<$> priceClass,
+                  (JSON..=) "Restrictions" Prelude.<$> restrictions,
+                  (JSON..=) "S3Origin" Prelude.<$> s3Origin,
+                  (JSON..=) "Staging" Prelude.<$> staging,
+                  (JSON..=) "TenantConfig" Prelude.<$> tenantConfig,
+                  (JSON..=) "ViewerCertificate" Prelude.<$> viewerCertificate,
+                  (JSON..=) "WebACLId" Prelude.<$> webACLId])))
+instance Property "Aliases" DistributionConfigProperty where
+  type PropertyType "Aliases" DistributionConfigProperty = ValueList Prelude.Text
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty {aliases = Prelude.pure newValue, ..}
+instance Property "AnycastIpListId" DistributionConfigProperty where
+  type PropertyType "AnycastIpListId" DistributionConfigProperty = Value Prelude.Text
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty
+        {anycastIpListId = Prelude.pure newValue, ..}
+instance Property "CNAMEs" DistributionConfigProperty where
+  type PropertyType "CNAMEs" DistributionConfigProperty = ValueList Prelude.Text
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty {cNAMEs = Prelude.pure newValue, ..}
+instance Property "CacheBehaviors" DistributionConfigProperty where
+  type PropertyType "CacheBehaviors" DistributionConfigProperty = [CacheBehaviorProperty]
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty
+        {cacheBehaviors = Prelude.pure newValue, ..}
+instance Property "Comment" DistributionConfigProperty where
+  type PropertyType "Comment" DistributionConfigProperty = Value Prelude.Text
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty {comment = Prelude.pure newValue, ..}
+instance Property "ConnectionMode" DistributionConfigProperty where
+  type PropertyType "ConnectionMode" DistributionConfigProperty = Value Prelude.Text
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty
+        {connectionMode = Prelude.pure newValue, ..}
+instance Property "ContinuousDeploymentPolicyId" DistributionConfigProperty where
+  type PropertyType "ContinuousDeploymentPolicyId" DistributionConfigProperty = Value Prelude.Text
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty
+        {continuousDeploymentPolicyId = Prelude.pure newValue, ..}
+instance Property "CustomErrorResponses" DistributionConfigProperty where
+  type PropertyType "CustomErrorResponses" DistributionConfigProperty = [CustomErrorResponseProperty]
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty
+        {customErrorResponses = Prelude.pure newValue, ..}
+instance Property "CustomOrigin" DistributionConfigProperty where
+  type PropertyType "CustomOrigin" DistributionConfigProperty = LegacyCustomOriginProperty
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty
+        {customOrigin = Prelude.pure newValue, ..}
+instance Property "DefaultCacheBehavior" DistributionConfigProperty where
+  type PropertyType "DefaultCacheBehavior" DistributionConfigProperty = DefaultCacheBehaviorProperty
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty {defaultCacheBehavior = newValue, ..}
+instance Property "DefaultRootObject" DistributionConfigProperty where
+  type PropertyType "DefaultRootObject" DistributionConfigProperty = Value Prelude.Text
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty
+        {defaultRootObject = Prelude.pure newValue, ..}
+instance Property "Enabled" DistributionConfigProperty where
+  type PropertyType "Enabled" DistributionConfigProperty = Value Prelude.Bool
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty {enabled = newValue, ..}
+instance Property "HttpVersion" DistributionConfigProperty where
+  type PropertyType "HttpVersion" DistributionConfigProperty = Value Prelude.Text
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty
+        {httpVersion = Prelude.pure newValue, ..}
+instance Property "IPV6Enabled" DistributionConfigProperty where
+  type PropertyType "IPV6Enabled" DistributionConfigProperty = Value Prelude.Bool
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty
+        {iPV6Enabled = Prelude.pure newValue, ..}
+instance Property "Logging" DistributionConfigProperty where
+  type PropertyType "Logging" DistributionConfigProperty = LoggingProperty
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty {logging = Prelude.pure newValue, ..}
+instance Property "OriginGroups" DistributionConfigProperty where
+  type PropertyType "OriginGroups" DistributionConfigProperty = OriginGroupsProperty
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty
+        {originGroups = Prelude.pure newValue, ..}
+instance Property "Origins" DistributionConfigProperty where
+  type PropertyType "Origins" DistributionConfigProperty = [OriginProperty]
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty {origins = Prelude.pure newValue, ..}
+instance Property "PriceClass" DistributionConfigProperty where
+  type PropertyType "PriceClass" DistributionConfigProperty = Value Prelude.Text
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty
+        {priceClass = Prelude.pure newValue, ..}
+instance Property "Restrictions" DistributionConfigProperty where
+  type PropertyType "Restrictions" DistributionConfigProperty = RestrictionsProperty
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty
+        {restrictions = Prelude.pure newValue, ..}
+instance Property "S3Origin" DistributionConfigProperty where
+  type PropertyType "S3Origin" DistributionConfigProperty = LegacyS3OriginProperty
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty {s3Origin = Prelude.pure newValue, ..}
+instance Property "Staging" DistributionConfigProperty where
+  type PropertyType "Staging" DistributionConfigProperty = Value Prelude.Bool
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty {staging = Prelude.pure newValue, ..}
+instance Property "TenantConfig" DistributionConfigProperty where
+  type PropertyType "TenantConfig" DistributionConfigProperty = TenantConfigProperty
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty
+        {tenantConfig = Prelude.pure newValue, ..}
+instance Property "ViewerCertificate" DistributionConfigProperty where
+  type PropertyType "ViewerCertificate" DistributionConfigProperty = ViewerCertificateProperty
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty
+        {viewerCertificate = Prelude.pure newValue, ..}
+instance Property "WebACLId" DistributionConfigProperty where
+  type PropertyType "WebACLId" DistributionConfigProperty = Value Prelude.Text
+  set newValue DistributionConfigProperty {..}
+    = DistributionConfigProperty {webACLId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/DistributionConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/DistributionConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/DistributionConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.DistributionConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DistributionConfigProperty :: Prelude.Type
+instance ToResourceProperties DistributionConfigProperty
+instance Prelude.Eq DistributionConfigProperty
+instance Prelude.Show DistributionConfigProperty
+instance JSON.ToJSON DistributionConfigProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/ForwardedValuesProperty.hs b/gen/Stratosphere/CloudFront/Distribution/ForwardedValuesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/ForwardedValuesProperty.hs
@@ -0,0 +1,70 @@
+module Stratosphere.CloudFront.Distribution.ForwardedValuesProperty (
+        module Exports, ForwardedValuesProperty(..),
+        mkForwardedValuesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.CookiesProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ForwardedValuesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-forwardedvalues.html>
+    ForwardedValuesProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-forwardedvalues.html#cfn-cloudfront-distribution-forwardedvalues-cookies>
+                             cookies :: (Prelude.Maybe CookiesProperty),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-forwardedvalues.html#cfn-cloudfront-distribution-forwardedvalues-headers>
+                             headers :: (Prelude.Maybe (ValueList Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-forwardedvalues.html#cfn-cloudfront-distribution-forwardedvalues-querystring>
+                             queryString :: (Value Prelude.Bool),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-forwardedvalues.html#cfn-cloudfront-distribution-forwardedvalues-querystringcachekeys>
+                             queryStringCacheKeys :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkForwardedValuesProperty ::
+  Value Prelude.Bool -> ForwardedValuesProperty
+mkForwardedValuesProperty queryString
+  = ForwardedValuesProperty
+      {haddock_workaround_ = (), queryString = queryString,
+       cookies = Prelude.Nothing, headers = Prelude.Nothing,
+       queryStringCacheKeys = Prelude.Nothing}
+instance ToResourceProperties ForwardedValuesProperty where
+  toResourceProperties ForwardedValuesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.ForwardedValues",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["QueryString" JSON..= queryString]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Cookies" Prelude.<$> cookies,
+                               (JSON..=) "Headers" Prelude.<$> headers,
+                               (JSON..=) "QueryStringCacheKeys"
+                                 Prelude.<$> queryStringCacheKeys]))}
+instance JSON.ToJSON ForwardedValuesProperty where
+  toJSON ForwardedValuesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["QueryString" JSON..= queryString]
+              (Prelude.catMaybes
+                 [(JSON..=) "Cookies" Prelude.<$> cookies,
+                  (JSON..=) "Headers" Prelude.<$> headers,
+                  (JSON..=) "QueryStringCacheKeys"
+                    Prelude.<$> queryStringCacheKeys])))
+instance Property "Cookies" ForwardedValuesProperty where
+  type PropertyType "Cookies" ForwardedValuesProperty = CookiesProperty
+  set newValue ForwardedValuesProperty {..}
+    = ForwardedValuesProperty {cookies = Prelude.pure newValue, ..}
+instance Property "Headers" ForwardedValuesProperty where
+  type PropertyType "Headers" ForwardedValuesProperty = ValueList Prelude.Text
+  set newValue ForwardedValuesProperty {..}
+    = ForwardedValuesProperty {headers = Prelude.pure newValue, ..}
+instance Property "QueryString" ForwardedValuesProperty where
+  type PropertyType "QueryString" ForwardedValuesProperty = Value Prelude.Bool
+  set newValue ForwardedValuesProperty {..}
+    = ForwardedValuesProperty {queryString = newValue, ..}
+instance Property "QueryStringCacheKeys" ForwardedValuesProperty where
+  type PropertyType "QueryStringCacheKeys" ForwardedValuesProperty = ValueList Prelude.Text
+  set newValue ForwardedValuesProperty {..}
+    = ForwardedValuesProperty
+        {queryStringCacheKeys = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/ForwardedValuesProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/ForwardedValuesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/ForwardedValuesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.ForwardedValuesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ForwardedValuesProperty :: Prelude.Type
+instance ToResourceProperties ForwardedValuesProperty
+instance Prelude.Eq ForwardedValuesProperty
+instance Prelude.Show ForwardedValuesProperty
+instance JSON.ToJSON ForwardedValuesProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/FunctionAssociationProperty.hs b/gen/Stratosphere/CloudFront/Distribution/FunctionAssociationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/FunctionAssociationProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.CloudFront.Distribution.FunctionAssociationProperty (
+        FunctionAssociationProperty(..), mkFunctionAssociationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FunctionAssociationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-functionassociation.html>
+    FunctionAssociationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-functionassociation.html#cfn-cloudfront-distribution-functionassociation-eventtype>
+                                 eventType :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-functionassociation.html#cfn-cloudfront-distribution-functionassociation-functionarn>
+                                 functionARN :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFunctionAssociationProperty :: FunctionAssociationProperty
+mkFunctionAssociationProperty
+  = FunctionAssociationProperty
+      {haddock_workaround_ = (), eventType = Prelude.Nothing,
+       functionARN = Prelude.Nothing}
+instance ToResourceProperties FunctionAssociationProperty where
+  toResourceProperties FunctionAssociationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.FunctionAssociation",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EventType" Prelude.<$> eventType,
+                            (JSON..=) "FunctionARN" Prelude.<$> functionARN])}
+instance JSON.ToJSON FunctionAssociationProperty where
+  toJSON FunctionAssociationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EventType" Prelude.<$> eventType,
+               (JSON..=) "FunctionARN" Prelude.<$> functionARN]))
+instance Property "EventType" FunctionAssociationProperty where
+  type PropertyType "EventType" FunctionAssociationProperty = Value Prelude.Text
+  set newValue FunctionAssociationProperty {..}
+    = FunctionAssociationProperty
+        {eventType = Prelude.pure newValue, ..}
+instance Property "FunctionARN" FunctionAssociationProperty where
+  type PropertyType "FunctionARN" FunctionAssociationProperty = Value Prelude.Text
+  set newValue FunctionAssociationProperty {..}
+    = FunctionAssociationProperty
+        {functionARN = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/FunctionAssociationProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/FunctionAssociationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/FunctionAssociationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.FunctionAssociationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FunctionAssociationProperty :: Prelude.Type
+instance ToResourceProperties FunctionAssociationProperty
+instance Prelude.Eq FunctionAssociationProperty
+instance Prelude.Show FunctionAssociationProperty
+instance JSON.ToJSON FunctionAssociationProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/GeoRestrictionProperty.hs b/gen/Stratosphere/CloudFront/Distribution/GeoRestrictionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/GeoRestrictionProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.CloudFront.Distribution.GeoRestrictionProperty (
+        GeoRestrictionProperty(..), mkGeoRestrictionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data GeoRestrictionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-georestriction.html>
+    GeoRestrictionProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-georestriction.html#cfn-cloudfront-distribution-georestriction-locations>
+                            locations :: (Prelude.Maybe (ValueList Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-georestriction.html#cfn-cloudfront-distribution-georestriction-restrictiontype>
+                            restrictionType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGeoRestrictionProperty ::
+  Value Prelude.Text -> GeoRestrictionProperty
+mkGeoRestrictionProperty restrictionType
+  = GeoRestrictionProperty
+      {haddock_workaround_ = (), restrictionType = restrictionType,
+       locations = Prelude.Nothing}
+instance ToResourceProperties GeoRestrictionProperty where
+  toResourceProperties GeoRestrictionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.GeoRestriction",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["RestrictionType" JSON..= restrictionType]
+                           (Prelude.catMaybes [(JSON..=) "Locations" Prelude.<$> locations]))}
+instance JSON.ToJSON GeoRestrictionProperty where
+  toJSON GeoRestrictionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["RestrictionType" JSON..= restrictionType]
+              (Prelude.catMaybes [(JSON..=) "Locations" Prelude.<$> locations])))
+instance Property "Locations" GeoRestrictionProperty where
+  type PropertyType "Locations" GeoRestrictionProperty = ValueList Prelude.Text
+  set newValue GeoRestrictionProperty {..}
+    = GeoRestrictionProperty {locations = Prelude.pure newValue, ..}
+instance Property "RestrictionType" GeoRestrictionProperty where
+  type PropertyType "RestrictionType" GeoRestrictionProperty = Value Prelude.Text
+  set newValue GeoRestrictionProperty {..}
+    = GeoRestrictionProperty {restrictionType = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/GeoRestrictionProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/GeoRestrictionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/GeoRestrictionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.GeoRestrictionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data GeoRestrictionProperty :: Prelude.Type
+instance ToResourceProperties GeoRestrictionProperty
+instance Prelude.Eq GeoRestrictionProperty
+instance Prelude.Show GeoRestrictionProperty
+instance JSON.ToJSON GeoRestrictionProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/GrpcConfigProperty.hs b/gen/Stratosphere/CloudFront/Distribution/GrpcConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/GrpcConfigProperty.hs
@@ -0,0 +1,30 @@
+module Stratosphere.CloudFront.Distribution.GrpcConfigProperty (
+        GrpcConfigProperty(..), mkGrpcConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data GrpcConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-grpcconfig.html>
+    GrpcConfigProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-grpcconfig.html#cfn-cloudfront-distribution-grpcconfig-enabled>
+                        enabled :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGrpcConfigProperty :: Value Prelude.Bool -> GrpcConfigProperty
+mkGrpcConfigProperty enabled
+  = GrpcConfigProperty {haddock_workaround_ = (), enabled = enabled}
+instance ToResourceProperties GrpcConfigProperty where
+  toResourceProperties GrpcConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.GrpcConfig",
+         supportsTags = Prelude.False,
+         properties = ["Enabled" JSON..= enabled]}
+instance JSON.ToJSON GrpcConfigProperty where
+  toJSON GrpcConfigProperty {..}
+    = JSON.object ["Enabled" JSON..= enabled]
+instance Property "Enabled" GrpcConfigProperty where
+  type PropertyType "Enabled" GrpcConfigProperty = Value Prelude.Bool
+  set newValue GrpcConfigProperty {..}
+    = GrpcConfigProperty {enabled = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/GrpcConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/GrpcConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/GrpcConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.GrpcConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data GrpcConfigProperty :: Prelude.Type
+instance ToResourceProperties GrpcConfigProperty
+instance Prelude.Eq GrpcConfigProperty
+instance Prelude.Show GrpcConfigProperty
+instance JSON.ToJSON GrpcConfigProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/LambdaFunctionAssociationProperty.hs b/gen/Stratosphere/CloudFront/Distribution/LambdaFunctionAssociationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/LambdaFunctionAssociationProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.CloudFront.Distribution.LambdaFunctionAssociationProperty (
+        LambdaFunctionAssociationProperty(..),
+        mkLambdaFunctionAssociationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LambdaFunctionAssociationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-lambdafunctionassociation.html>
+    LambdaFunctionAssociationProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-lambdafunctionassociation.html#cfn-cloudfront-distribution-lambdafunctionassociation-eventtype>
+                                       eventType :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-lambdafunctionassociation.html#cfn-cloudfront-distribution-lambdafunctionassociation-includebody>
+                                       includeBody :: (Prelude.Maybe (Value Prelude.Bool)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-lambdafunctionassociation.html#cfn-cloudfront-distribution-lambdafunctionassociation-lambdafunctionarn>
+                                       lambdaFunctionARN :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLambdaFunctionAssociationProperty ::
+  LambdaFunctionAssociationProperty
+mkLambdaFunctionAssociationProperty
+  = LambdaFunctionAssociationProperty
+      {haddock_workaround_ = (), eventType = Prelude.Nothing,
+       includeBody = Prelude.Nothing, lambdaFunctionARN = Prelude.Nothing}
+instance ToResourceProperties LambdaFunctionAssociationProperty where
+  toResourceProperties LambdaFunctionAssociationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.LambdaFunctionAssociation",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EventType" Prelude.<$> eventType,
+                            (JSON..=) "IncludeBody" Prelude.<$> includeBody,
+                            (JSON..=) "LambdaFunctionARN" Prelude.<$> lambdaFunctionARN])}
+instance JSON.ToJSON LambdaFunctionAssociationProperty where
+  toJSON LambdaFunctionAssociationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EventType" Prelude.<$> eventType,
+               (JSON..=) "IncludeBody" Prelude.<$> includeBody,
+               (JSON..=) "LambdaFunctionARN" Prelude.<$> lambdaFunctionARN]))
+instance Property "EventType" LambdaFunctionAssociationProperty where
+  type PropertyType "EventType" LambdaFunctionAssociationProperty = Value Prelude.Text
+  set newValue LambdaFunctionAssociationProperty {..}
+    = LambdaFunctionAssociationProperty
+        {eventType = Prelude.pure newValue, ..}
+instance Property "IncludeBody" LambdaFunctionAssociationProperty where
+  type PropertyType "IncludeBody" LambdaFunctionAssociationProperty = Value Prelude.Bool
+  set newValue LambdaFunctionAssociationProperty {..}
+    = LambdaFunctionAssociationProperty
+        {includeBody = Prelude.pure newValue, ..}
+instance Property "LambdaFunctionARN" LambdaFunctionAssociationProperty where
+  type PropertyType "LambdaFunctionARN" LambdaFunctionAssociationProperty = Value Prelude.Text
+  set newValue LambdaFunctionAssociationProperty {..}
+    = LambdaFunctionAssociationProperty
+        {lambdaFunctionARN = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/LambdaFunctionAssociationProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/LambdaFunctionAssociationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/LambdaFunctionAssociationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.LambdaFunctionAssociationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LambdaFunctionAssociationProperty :: Prelude.Type
+instance ToResourceProperties LambdaFunctionAssociationProperty
+instance Prelude.Eq LambdaFunctionAssociationProperty
+instance Prelude.Show LambdaFunctionAssociationProperty
+instance JSON.ToJSON LambdaFunctionAssociationProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/LegacyCustomOriginProperty.hs b/gen/Stratosphere/CloudFront/Distribution/LegacyCustomOriginProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/LegacyCustomOriginProperty.hs
@@ -0,0 +1,80 @@
+module Stratosphere.CloudFront.Distribution.LegacyCustomOriginProperty (
+        LegacyCustomOriginProperty(..), mkLegacyCustomOriginProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LegacyCustomOriginProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-legacycustomorigin.html>
+    LegacyCustomOriginProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-legacycustomorigin.html#cfn-cloudfront-distribution-legacycustomorigin-dnsname>
+                                dNSName :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-legacycustomorigin.html#cfn-cloudfront-distribution-legacycustomorigin-httpport>
+                                hTTPPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-legacycustomorigin.html#cfn-cloudfront-distribution-legacycustomorigin-httpsport>
+                                hTTPSPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-legacycustomorigin.html#cfn-cloudfront-distribution-legacycustomorigin-originprotocolpolicy>
+                                originProtocolPolicy :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-legacycustomorigin.html#cfn-cloudfront-distribution-legacycustomorigin-originsslprotocols>
+                                originSSLProtocols :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLegacyCustomOriginProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> ValueList Prelude.Text -> LegacyCustomOriginProperty
+mkLegacyCustomOriginProperty
+  dNSName
+  originProtocolPolicy
+  originSSLProtocols
+  = LegacyCustomOriginProperty
+      {haddock_workaround_ = (), dNSName = dNSName,
+       originProtocolPolicy = originProtocolPolicy,
+       originSSLProtocols = originSSLProtocols,
+       hTTPPort = Prelude.Nothing, hTTPSPort = Prelude.Nothing}
+instance ToResourceProperties LegacyCustomOriginProperty where
+  toResourceProperties LegacyCustomOriginProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.LegacyCustomOrigin",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DNSName" JSON..= dNSName,
+                            "OriginProtocolPolicy" JSON..= originProtocolPolicy,
+                            "OriginSSLProtocols" JSON..= originSSLProtocols]
+                           (Prelude.catMaybes
+                              [(JSON..=) "HTTPPort" Prelude.<$> hTTPPort,
+                               (JSON..=) "HTTPSPort" Prelude.<$> hTTPSPort]))}
+instance JSON.ToJSON LegacyCustomOriginProperty where
+  toJSON LegacyCustomOriginProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DNSName" JSON..= dNSName,
+               "OriginProtocolPolicy" JSON..= originProtocolPolicy,
+               "OriginSSLProtocols" JSON..= originSSLProtocols]
+              (Prelude.catMaybes
+                 [(JSON..=) "HTTPPort" Prelude.<$> hTTPPort,
+                  (JSON..=) "HTTPSPort" Prelude.<$> hTTPSPort])))
+instance Property "DNSName" LegacyCustomOriginProperty where
+  type PropertyType "DNSName" LegacyCustomOriginProperty = Value Prelude.Text
+  set newValue LegacyCustomOriginProperty {..}
+    = LegacyCustomOriginProperty {dNSName = newValue, ..}
+instance Property "HTTPPort" LegacyCustomOriginProperty where
+  type PropertyType "HTTPPort" LegacyCustomOriginProperty = Value Prelude.Integer
+  set newValue LegacyCustomOriginProperty {..}
+    = LegacyCustomOriginProperty {hTTPPort = Prelude.pure newValue, ..}
+instance Property "HTTPSPort" LegacyCustomOriginProperty where
+  type PropertyType "HTTPSPort" LegacyCustomOriginProperty = Value Prelude.Integer
+  set newValue LegacyCustomOriginProperty {..}
+    = LegacyCustomOriginProperty
+        {hTTPSPort = Prelude.pure newValue, ..}
+instance Property "OriginProtocolPolicy" LegacyCustomOriginProperty where
+  type PropertyType "OriginProtocolPolicy" LegacyCustomOriginProperty = Value Prelude.Text
+  set newValue LegacyCustomOriginProperty {..}
+    = LegacyCustomOriginProperty {originProtocolPolicy = newValue, ..}
+instance Property "OriginSSLProtocols" LegacyCustomOriginProperty where
+  type PropertyType "OriginSSLProtocols" LegacyCustomOriginProperty = ValueList Prelude.Text
+  set newValue LegacyCustomOriginProperty {..}
+    = LegacyCustomOriginProperty {originSSLProtocols = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/LegacyCustomOriginProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/LegacyCustomOriginProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/LegacyCustomOriginProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.LegacyCustomOriginProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LegacyCustomOriginProperty :: Prelude.Type
+instance ToResourceProperties LegacyCustomOriginProperty
+instance Prelude.Eq LegacyCustomOriginProperty
+instance Prelude.Show LegacyCustomOriginProperty
+instance JSON.ToJSON LegacyCustomOriginProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/LegacyS3OriginProperty.hs b/gen/Stratosphere/CloudFront/Distribution/LegacyS3OriginProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/LegacyS3OriginProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.CloudFront.Distribution.LegacyS3OriginProperty (
+        LegacyS3OriginProperty(..), mkLegacyS3OriginProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LegacyS3OriginProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-legacys3origin.html>
+    LegacyS3OriginProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-legacys3origin.html#cfn-cloudfront-distribution-legacys3origin-dnsname>
+                            dNSName :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-legacys3origin.html#cfn-cloudfront-distribution-legacys3origin-originaccessidentity>
+                            originAccessIdentity :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLegacyS3OriginProperty ::
+  Value Prelude.Text -> LegacyS3OriginProperty
+mkLegacyS3OriginProperty dNSName
+  = LegacyS3OriginProperty
+      {haddock_workaround_ = (), dNSName = dNSName,
+       originAccessIdentity = Prelude.Nothing}
+instance ToResourceProperties LegacyS3OriginProperty where
+  toResourceProperties LegacyS3OriginProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.LegacyS3Origin",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DNSName" JSON..= dNSName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "OriginAccessIdentity"
+                                 Prelude.<$> originAccessIdentity]))}
+instance JSON.ToJSON LegacyS3OriginProperty where
+  toJSON LegacyS3OriginProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DNSName" JSON..= dNSName]
+              (Prelude.catMaybes
+                 [(JSON..=) "OriginAccessIdentity"
+                    Prelude.<$> originAccessIdentity])))
+instance Property "DNSName" LegacyS3OriginProperty where
+  type PropertyType "DNSName" LegacyS3OriginProperty = Value Prelude.Text
+  set newValue LegacyS3OriginProperty {..}
+    = LegacyS3OriginProperty {dNSName = newValue, ..}
+instance Property "OriginAccessIdentity" LegacyS3OriginProperty where
+  type PropertyType "OriginAccessIdentity" LegacyS3OriginProperty = Value Prelude.Text
+  set newValue LegacyS3OriginProperty {..}
+    = LegacyS3OriginProperty
+        {originAccessIdentity = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/LegacyS3OriginProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/LegacyS3OriginProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/LegacyS3OriginProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.LegacyS3OriginProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LegacyS3OriginProperty :: Prelude.Type
+instance ToResourceProperties LegacyS3OriginProperty
+instance Prelude.Eq LegacyS3OriginProperty
+instance Prelude.Show LegacyS3OriginProperty
+instance JSON.ToJSON LegacyS3OriginProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/LoggingProperty.hs b/gen/Stratosphere/CloudFront/Distribution/LoggingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/LoggingProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.CloudFront.Distribution.LoggingProperty (
+        LoggingProperty(..), mkLoggingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LoggingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-logging.html>
+    LoggingProperty {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-logging.html#cfn-cloudfront-distribution-logging-bucket>
+                     bucket :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-logging.html#cfn-cloudfront-distribution-logging-includecookies>
+                     includeCookies :: (Prelude.Maybe (Value Prelude.Bool)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-logging.html#cfn-cloudfront-distribution-logging-prefix>
+                     prefix :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLoggingProperty :: LoggingProperty
+mkLoggingProperty
+  = LoggingProperty
+      {haddock_workaround_ = (), bucket = Prelude.Nothing,
+       includeCookies = Prelude.Nothing, prefix = Prelude.Nothing}
+instance ToResourceProperties LoggingProperty where
+  toResourceProperties LoggingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.Logging",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Bucket" Prelude.<$> bucket,
+                            (JSON..=) "IncludeCookies" Prelude.<$> includeCookies,
+                            (JSON..=) "Prefix" Prelude.<$> prefix])}
+instance JSON.ToJSON LoggingProperty where
+  toJSON LoggingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Bucket" Prelude.<$> bucket,
+               (JSON..=) "IncludeCookies" Prelude.<$> includeCookies,
+               (JSON..=) "Prefix" Prelude.<$> prefix]))
+instance Property "Bucket" LoggingProperty where
+  type PropertyType "Bucket" LoggingProperty = Value Prelude.Text
+  set newValue LoggingProperty {..}
+    = LoggingProperty {bucket = Prelude.pure newValue, ..}
+instance Property "IncludeCookies" LoggingProperty where
+  type PropertyType "IncludeCookies" LoggingProperty = Value Prelude.Bool
+  set newValue LoggingProperty {..}
+    = LoggingProperty {includeCookies = Prelude.pure newValue, ..}
+instance Property "Prefix" LoggingProperty where
+  type PropertyType "Prefix" LoggingProperty = Value Prelude.Text
+  set newValue LoggingProperty {..}
+    = LoggingProperty {prefix = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/LoggingProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/LoggingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/LoggingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.LoggingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LoggingProperty :: Prelude.Type
+instance ToResourceProperties LoggingProperty
+instance Prelude.Eq LoggingProperty
+instance Prelude.Show LoggingProperty
+instance JSON.ToJSON LoggingProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/OriginCustomHeaderProperty.hs b/gen/Stratosphere/CloudFront/Distribution/OriginCustomHeaderProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/OriginCustomHeaderProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.CloudFront.Distribution.OriginCustomHeaderProperty (
+        OriginCustomHeaderProperty(..), mkOriginCustomHeaderProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OriginCustomHeaderProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origincustomheader.html>
+    OriginCustomHeaderProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origincustomheader.html#cfn-cloudfront-distribution-origincustomheader-headername>
+                                headerName :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origincustomheader.html#cfn-cloudfront-distribution-origincustomheader-headervalue>
+                                headerValue :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOriginCustomHeaderProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> OriginCustomHeaderProperty
+mkOriginCustomHeaderProperty headerName headerValue
+  = OriginCustomHeaderProperty
+      {haddock_workaround_ = (), headerName = headerName,
+       headerValue = headerValue}
+instance ToResourceProperties OriginCustomHeaderProperty where
+  toResourceProperties OriginCustomHeaderProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.OriginCustomHeader",
+         supportsTags = Prelude.False,
+         properties = ["HeaderName" JSON..= headerName,
+                       "HeaderValue" JSON..= headerValue]}
+instance JSON.ToJSON OriginCustomHeaderProperty where
+  toJSON OriginCustomHeaderProperty {..}
+    = JSON.object
+        ["HeaderName" JSON..= headerName,
+         "HeaderValue" JSON..= headerValue]
+instance Property "HeaderName" OriginCustomHeaderProperty where
+  type PropertyType "HeaderName" OriginCustomHeaderProperty = Value Prelude.Text
+  set newValue OriginCustomHeaderProperty {..}
+    = OriginCustomHeaderProperty {headerName = newValue, ..}
+instance Property "HeaderValue" OriginCustomHeaderProperty where
+  type PropertyType "HeaderValue" OriginCustomHeaderProperty = Value Prelude.Text
+  set newValue OriginCustomHeaderProperty {..}
+    = OriginCustomHeaderProperty {headerValue = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/OriginCustomHeaderProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/OriginCustomHeaderProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/OriginCustomHeaderProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.OriginCustomHeaderProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OriginCustomHeaderProperty :: Prelude.Type
+instance ToResourceProperties OriginCustomHeaderProperty
+instance Prelude.Eq OriginCustomHeaderProperty
+instance Prelude.Show OriginCustomHeaderProperty
+instance JSON.ToJSON OriginCustomHeaderProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/OriginGroupFailoverCriteriaProperty.hs b/gen/Stratosphere/CloudFront/Distribution/OriginGroupFailoverCriteriaProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/OriginGroupFailoverCriteriaProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.CloudFront.Distribution.OriginGroupFailoverCriteriaProperty (
+        module Exports, OriginGroupFailoverCriteriaProperty(..),
+        mkOriginGroupFailoverCriteriaProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.StatusCodesProperty as Exports
+import Stratosphere.ResourceProperties
+data OriginGroupFailoverCriteriaProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origingroupfailovercriteria.html>
+    OriginGroupFailoverCriteriaProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origingroupfailovercriteria.html#cfn-cloudfront-distribution-origingroupfailovercriteria-statuscodes>
+                                         statusCodes :: StatusCodesProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOriginGroupFailoverCriteriaProperty ::
+  StatusCodesProperty -> OriginGroupFailoverCriteriaProperty
+mkOriginGroupFailoverCriteriaProperty statusCodes
+  = OriginGroupFailoverCriteriaProperty
+      {haddock_workaround_ = (), statusCodes = statusCodes}
+instance ToResourceProperties OriginGroupFailoverCriteriaProperty where
+  toResourceProperties OriginGroupFailoverCriteriaProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.OriginGroupFailoverCriteria",
+         supportsTags = Prelude.False,
+         properties = ["StatusCodes" JSON..= statusCodes]}
+instance JSON.ToJSON OriginGroupFailoverCriteriaProperty where
+  toJSON OriginGroupFailoverCriteriaProperty {..}
+    = JSON.object ["StatusCodes" JSON..= statusCodes]
+instance Property "StatusCodes" OriginGroupFailoverCriteriaProperty where
+  type PropertyType "StatusCodes" OriginGroupFailoverCriteriaProperty = StatusCodesProperty
+  set newValue OriginGroupFailoverCriteriaProperty {..}
+    = OriginGroupFailoverCriteriaProperty {statusCodes = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/OriginGroupFailoverCriteriaProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/OriginGroupFailoverCriteriaProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/OriginGroupFailoverCriteriaProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.OriginGroupFailoverCriteriaProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OriginGroupFailoverCriteriaProperty :: Prelude.Type
+instance ToResourceProperties OriginGroupFailoverCriteriaProperty
+instance Prelude.Eq OriginGroupFailoverCriteriaProperty
+instance Prelude.Show OriginGroupFailoverCriteriaProperty
+instance JSON.ToJSON OriginGroupFailoverCriteriaProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/OriginGroupMemberProperty.hs b/gen/Stratosphere/CloudFront/Distribution/OriginGroupMemberProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/OriginGroupMemberProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.CloudFront.Distribution.OriginGroupMemberProperty (
+        OriginGroupMemberProperty(..), mkOriginGroupMemberProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OriginGroupMemberProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origingroupmember.html>
+    OriginGroupMemberProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origingroupmember.html#cfn-cloudfront-distribution-origingroupmember-originid>
+                               originId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOriginGroupMemberProperty ::
+  Value Prelude.Text -> OriginGroupMemberProperty
+mkOriginGroupMemberProperty originId
+  = OriginGroupMemberProperty
+      {haddock_workaround_ = (), originId = originId}
+instance ToResourceProperties OriginGroupMemberProperty where
+  toResourceProperties OriginGroupMemberProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.OriginGroupMember",
+         supportsTags = Prelude.False,
+         properties = ["OriginId" JSON..= originId]}
+instance JSON.ToJSON OriginGroupMemberProperty where
+  toJSON OriginGroupMemberProperty {..}
+    = JSON.object ["OriginId" JSON..= originId]
+instance Property "OriginId" OriginGroupMemberProperty where
+  type PropertyType "OriginId" OriginGroupMemberProperty = Value Prelude.Text
+  set newValue OriginGroupMemberProperty {..}
+    = OriginGroupMemberProperty {originId = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/OriginGroupMemberProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/OriginGroupMemberProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/OriginGroupMemberProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.OriginGroupMemberProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OriginGroupMemberProperty :: Prelude.Type
+instance ToResourceProperties OriginGroupMemberProperty
+instance Prelude.Eq OriginGroupMemberProperty
+instance Prelude.Show OriginGroupMemberProperty
+instance JSON.ToJSON OriginGroupMemberProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/OriginGroupMembersProperty.hs b/gen/Stratosphere/CloudFront/Distribution/OriginGroupMembersProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/OriginGroupMembersProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.CloudFront.Distribution.OriginGroupMembersProperty (
+        module Exports, OriginGroupMembersProperty(..),
+        mkOriginGroupMembersProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.OriginGroupMemberProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OriginGroupMembersProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origingroupmembers.html>
+    OriginGroupMembersProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origingroupmembers.html#cfn-cloudfront-distribution-origingroupmembers-items>
+                                items :: [OriginGroupMemberProperty],
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origingroupmembers.html#cfn-cloudfront-distribution-origingroupmembers-quantity>
+                                quantity :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOriginGroupMembersProperty ::
+  [OriginGroupMemberProperty]
+  -> Value Prelude.Integer -> OriginGroupMembersProperty
+mkOriginGroupMembersProperty items quantity
+  = OriginGroupMembersProperty
+      {haddock_workaround_ = (), items = items, quantity = quantity}
+instance ToResourceProperties OriginGroupMembersProperty where
+  toResourceProperties OriginGroupMembersProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.OriginGroupMembers",
+         supportsTags = Prelude.False,
+         properties = ["Items" JSON..= items, "Quantity" JSON..= quantity]}
+instance JSON.ToJSON OriginGroupMembersProperty where
+  toJSON OriginGroupMembersProperty {..}
+    = JSON.object ["Items" JSON..= items, "Quantity" JSON..= quantity]
+instance Property "Items" OriginGroupMembersProperty where
+  type PropertyType "Items" OriginGroupMembersProperty = [OriginGroupMemberProperty]
+  set newValue OriginGroupMembersProperty {..}
+    = OriginGroupMembersProperty {items = newValue, ..}
+instance Property "Quantity" OriginGroupMembersProperty where
+  type PropertyType "Quantity" OriginGroupMembersProperty = Value Prelude.Integer
+  set newValue OriginGroupMembersProperty {..}
+    = OriginGroupMembersProperty {quantity = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/OriginGroupMembersProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/OriginGroupMembersProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/OriginGroupMembersProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.OriginGroupMembersProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OriginGroupMembersProperty :: Prelude.Type
+instance ToResourceProperties OriginGroupMembersProperty
+instance Prelude.Eq OriginGroupMembersProperty
+instance Prelude.Show OriginGroupMembersProperty
+instance JSON.ToJSON OriginGroupMembersProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/OriginGroupProperty.hs b/gen/Stratosphere/CloudFront/Distribution/OriginGroupProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/OriginGroupProperty.hs
@@ -0,0 +1,67 @@
+module Stratosphere.CloudFront.Distribution.OriginGroupProperty (
+        module Exports, OriginGroupProperty(..), mkOriginGroupProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.OriginGroupFailoverCriteriaProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.OriginGroupMembersProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OriginGroupProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origingroup.html>
+    OriginGroupProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origingroup.html#cfn-cloudfront-distribution-origingroup-failovercriteria>
+                         failoverCriteria :: OriginGroupFailoverCriteriaProperty,
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origingroup.html#cfn-cloudfront-distribution-origingroup-id>
+                         id :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origingroup.html#cfn-cloudfront-distribution-origingroup-members>
+                         members :: OriginGroupMembersProperty,
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origingroup.html#cfn-cloudfront-distribution-origingroup-selectioncriteria>
+                         selectionCriteria :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOriginGroupProperty ::
+  OriginGroupFailoverCriteriaProperty
+  -> Value Prelude.Text
+     -> OriginGroupMembersProperty -> OriginGroupProperty
+mkOriginGroupProperty failoverCriteria id members
+  = OriginGroupProperty
+      {haddock_workaround_ = (), failoverCriteria = failoverCriteria,
+       id = id, members = members, selectionCriteria = Prelude.Nothing}
+instance ToResourceProperties OriginGroupProperty where
+  toResourceProperties OriginGroupProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.OriginGroup",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["FailoverCriteria" JSON..= failoverCriteria, "Id" JSON..= id,
+                            "Members" JSON..= members]
+                           (Prelude.catMaybes
+                              [(JSON..=) "SelectionCriteria" Prelude.<$> selectionCriteria]))}
+instance JSON.ToJSON OriginGroupProperty where
+  toJSON OriginGroupProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["FailoverCriteria" JSON..= failoverCriteria, "Id" JSON..= id,
+               "Members" JSON..= members]
+              (Prelude.catMaybes
+                 [(JSON..=) "SelectionCriteria" Prelude.<$> selectionCriteria])))
+instance Property "FailoverCriteria" OriginGroupProperty where
+  type PropertyType "FailoverCriteria" OriginGroupProperty = OriginGroupFailoverCriteriaProperty
+  set newValue OriginGroupProperty {..}
+    = OriginGroupProperty {failoverCriteria = newValue, ..}
+instance Property "Id" OriginGroupProperty where
+  type PropertyType "Id" OriginGroupProperty = Value Prelude.Text
+  set newValue OriginGroupProperty {..}
+    = OriginGroupProperty {id = newValue, ..}
+instance Property "Members" OriginGroupProperty where
+  type PropertyType "Members" OriginGroupProperty = OriginGroupMembersProperty
+  set newValue OriginGroupProperty {..}
+    = OriginGroupProperty {members = newValue, ..}
+instance Property "SelectionCriteria" OriginGroupProperty where
+  type PropertyType "SelectionCriteria" OriginGroupProperty = Value Prelude.Text
+  set newValue OriginGroupProperty {..}
+    = OriginGroupProperty
+        {selectionCriteria = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/OriginGroupProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/OriginGroupProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/OriginGroupProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.OriginGroupProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OriginGroupProperty :: Prelude.Type
+instance ToResourceProperties OriginGroupProperty
+instance Prelude.Eq OriginGroupProperty
+instance Prelude.Show OriginGroupProperty
+instance JSON.ToJSON OriginGroupProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/OriginGroupsProperty.hs b/gen/Stratosphere/CloudFront/Distribution/OriginGroupsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/OriginGroupsProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.CloudFront.Distribution.OriginGroupsProperty (
+        module Exports, OriginGroupsProperty(..), mkOriginGroupsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.OriginGroupProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OriginGroupsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origingroups.html>
+    OriginGroupsProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origingroups.html#cfn-cloudfront-distribution-origingroups-items>
+                          items :: (Prelude.Maybe [OriginGroupProperty]),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origingroups.html#cfn-cloudfront-distribution-origingroups-quantity>
+                          quantity :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOriginGroupsProperty ::
+  Value Prelude.Integer -> OriginGroupsProperty
+mkOriginGroupsProperty quantity
+  = OriginGroupsProperty
+      {haddock_workaround_ = (), quantity = quantity,
+       items = Prelude.Nothing}
+instance ToResourceProperties OriginGroupsProperty where
+  toResourceProperties OriginGroupsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.OriginGroups",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Quantity" JSON..= quantity]
+                           (Prelude.catMaybes [(JSON..=) "Items" Prelude.<$> items]))}
+instance JSON.ToJSON OriginGroupsProperty where
+  toJSON OriginGroupsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Quantity" JSON..= quantity]
+              (Prelude.catMaybes [(JSON..=) "Items" Prelude.<$> items])))
+instance Property "Items" OriginGroupsProperty where
+  type PropertyType "Items" OriginGroupsProperty = [OriginGroupProperty]
+  set newValue OriginGroupsProperty {..}
+    = OriginGroupsProperty {items = Prelude.pure newValue, ..}
+instance Property "Quantity" OriginGroupsProperty where
+  type PropertyType "Quantity" OriginGroupsProperty = Value Prelude.Integer
+  set newValue OriginGroupsProperty {..}
+    = OriginGroupsProperty {quantity = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/OriginGroupsProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/OriginGroupsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/OriginGroupsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.OriginGroupsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OriginGroupsProperty :: Prelude.Type
+instance ToResourceProperties OriginGroupsProperty
+instance Prelude.Eq OriginGroupsProperty
+instance Prelude.Show OriginGroupsProperty
+instance JSON.ToJSON OriginGroupsProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/OriginProperty.hs b/gen/Stratosphere/CloudFront/Distribution/OriginProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/OriginProperty.hs
@@ -0,0 +1,145 @@
+module Stratosphere.CloudFront.Distribution.OriginProperty (
+        module Exports, OriginProperty(..), mkOriginProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.CustomOriginConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.OriginCustomHeaderProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.OriginShieldProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.S3OriginConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.VpcOriginConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OriginProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origin.html>
+    OriginProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origin.html#cfn-cloudfront-distribution-origin-connectionattempts>
+                    connectionAttempts :: (Prelude.Maybe (Value Prelude.Integer)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origin.html#cfn-cloudfront-distribution-origin-connectiontimeout>
+                    connectionTimeout :: (Prelude.Maybe (Value Prelude.Integer)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origin.html#cfn-cloudfront-distribution-origin-customoriginconfig>
+                    customOriginConfig :: (Prelude.Maybe CustomOriginConfigProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origin.html#cfn-cloudfront-distribution-origin-domainname>
+                    domainName :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origin.html#cfn-cloudfront-distribution-origin-id>
+                    id :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origin.html#cfn-cloudfront-distribution-origin-originaccesscontrolid>
+                    originAccessControlId :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origin.html#cfn-cloudfront-distribution-origin-origincustomheaders>
+                    originCustomHeaders :: (Prelude.Maybe [OriginCustomHeaderProperty]),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origin.html#cfn-cloudfront-distribution-origin-originpath>
+                    originPath :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origin.html#cfn-cloudfront-distribution-origin-originshield>
+                    originShield :: (Prelude.Maybe OriginShieldProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origin.html#cfn-cloudfront-distribution-origin-responsecompletiontimeout>
+                    responseCompletionTimeout :: (Prelude.Maybe (Value Prelude.Integer)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origin.html#cfn-cloudfront-distribution-origin-s3originconfig>
+                    s3OriginConfig :: (Prelude.Maybe S3OriginConfigProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origin.html#cfn-cloudfront-distribution-origin-vpcoriginconfig>
+                    vpcOriginConfig :: (Prelude.Maybe VpcOriginConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOriginProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> OriginProperty
+mkOriginProperty domainName id
+  = OriginProperty
+      {haddock_workaround_ = (), domainName = domainName, id = id,
+       connectionAttempts = Prelude.Nothing,
+       connectionTimeout = Prelude.Nothing,
+       customOriginConfig = Prelude.Nothing,
+       originAccessControlId = Prelude.Nothing,
+       originCustomHeaders = Prelude.Nothing,
+       originPath = Prelude.Nothing, originShield = Prelude.Nothing,
+       responseCompletionTimeout = Prelude.Nothing,
+       s3OriginConfig = Prelude.Nothing,
+       vpcOriginConfig = Prelude.Nothing}
+instance ToResourceProperties OriginProperty where
+  toResourceProperties OriginProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.Origin",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DomainName" JSON..= domainName, "Id" JSON..= id]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ConnectionAttempts" Prelude.<$> connectionAttempts,
+                               (JSON..=) "ConnectionTimeout" Prelude.<$> connectionTimeout,
+                               (JSON..=) "CustomOriginConfig" Prelude.<$> customOriginConfig,
+                               (JSON..=) "OriginAccessControlId"
+                                 Prelude.<$> originAccessControlId,
+                               (JSON..=) "OriginCustomHeaders" Prelude.<$> originCustomHeaders,
+                               (JSON..=) "OriginPath" Prelude.<$> originPath,
+                               (JSON..=) "OriginShield" Prelude.<$> originShield,
+                               (JSON..=) "ResponseCompletionTimeout"
+                                 Prelude.<$> responseCompletionTimeout,
+                               (JSON..=) "S3OriginConfig" Prelude.<$> s3OriginConfig,
+                               (JSON..=) "VpcOriginConfig" Prelude.<$> vpcOriginConfig]))}
+instance JSON.ToJSON OriginProperty where
+  toJSON OriginProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DomainName" JSON..= domainName, "Id" JSON..= id]
+              (Prelude.catMaybes
+                 [(JSON..=) "ConnectionAttempts" Prelude.<$> connectionAttempts,
+                  (JSON..=) "ConnectionTimeout" Prelude.<$> connectionTimeout,
+                  (JSON..=) "CustomOriginConfig" Prelude.<$> customOriginConfig,
+                  (JSON..=) "OriginAccessControlId"
+                    Prelude.<$> originAccessControlId,
+                  (JSON..=) "OriginCustomHeaders" Prelude.<$> originCustomHeaders,
+                  (JSON..=) "OriginPath" Prelude.<$> originPath,
+                  (JSON..=) "OriginShield" Prelude.<$> originShield,
+                  (JSON..=) "ResponseCompletionTimeout"
+                    Prelude.<$> responseCompletionTimeout,
+                  (JSON..=) "S3OriginConfig" Prelude.<$> s3OriginConfig,
+                  (JSON..=) "VpcOriginConfig" Prelude.<$> vpcOriginConfig])))
+instance Property "ConnectionAttempts" OriginProperty where
+  type PropertyType "ConnectionAttempts" OriginProperty = Value Prelude.Integer
+  set newValue OriginProperty {..}
+    = OriginProperty {connectionAttempts = Prelude.pure newValue, ..}
+instance Property "ConnectionTimeout" OriginProperty where
+  type PropertyType "ConnectionTimeout" OriginProperty = Value Prelude.Integer
+  set newValue OriginProperty {..}
+    = OriginProperty {connectionTimeout = Prelude.pure newValue, ..}
+instance Property "CustomOriginConfig" OriginProperty where
+  type PropertyType "CustomOriginConfig" OriginProperty = CustomOriginConfigProperty
+  set newValue OriginProperty {..}
+    = OriginProperty {customOriginConfig = Prelude.pure newValue, ..}
+instance Property "DomainName" OriginProperty where
+  type PropertyType "DomainName" OriginProperty = Value Prelude.Text
+  set newValue OriginProperty {..}
+    = OriginProperty {domainName = newValue, ..}
+instance Property "Id" OriginProperty where
+  type PropertyType "Id" OriginProperty = Value Prelude.Text
+  set newValue OriginProperty {..}
+    = OriginProperty {id = newValue, ..}
+instance Property "OriginAccessControlId" OriginProperty where
+  type PropertyType "OriginAccessControlId" OriginProperty = Value Prelude.Text
+  set newValue OriginProperty {..}
+    = OriginProperty
+        {originAccessControlId = Prelude.pure newValue, ..}
+instance Property "OriginCustomHeaders" OriginProperty where
+  type PropertyType "OriginCustomHeaders" OriginProperty = [OriginCustomHeaderProperty]
+  set newValue OriginProperty {..}
+    = OriginProperty {originCustomHeaders = Prelude.pure newValue, ..}
+instance Property "OriginPath" OriginProperty where
+  type PropertyType "OriginPath" OriginProperty = Value Prelude.Text
+  set newValue OriginProperty {..}
+    = OriginProperty {originPath = Prelude.pure newValue, ..}
+instance Property "OriginShield" OriginProperty where
+  type PropertyType "OriginShield" OriginProperty = OriginShieldProperty
+  set newValue OriginProperty {..}
+    = OriginProperty {originShield = Prelude.pure newValue, ..}
+instance Property "ResponseCompletionTimeout" OriginProperty where
+  type PropertyType "ResponseCompletionTimeout" OriginProperty = Value Prelude.Integer
+  set newValue OriginProperty {..}
+    = OriginProperty
+        {responseCompletionTimeout = Prelude.pure newValue, ..}
+instance Property "S3OriginConfig" OriginProperty where
+  type PropertyType "S3OriginConfig" OriginProperty = S3OriginConfigProperty
+  set newValue OriginProperty {..}
+    = OriginProperty {s3OriginConfig = Prelude.pure newValue, ..}
+instance Property "VpcOriginConfig" OriginProperty where
+  type PropertyType "VpcOriginConfig" OriginProperty = VpcOriginConfigProperty
+  set newValue OriginProperty {..}
+    = OriginProperty {vpcOriginConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/OriginProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/OriginProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/OriginProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.OriginProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OriginProperty :: Prelude.Type
+instance ToResourceProperties OriginProperty
+instance Prelude.Eq OriginProperty
+instance Prelude.Show OriginProperty
+instance JSON.ToJSON OriginProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/OriginShieldProperty.hs b/gen/Stratosphere/CloudFront/Distribution/OriginShieldProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/OriginShieldProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.CloudFront.Distribution.OriginShieldProperty (
+        OriginShieldProperty(..), mkOriginShieldProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OriginShieldProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-originshield.html>
+    OriginShieldProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-originshield.html#cfn-cloudfront-distribution-originshield-enabled>
+                          enabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-originshield.html#cfn-cloudfront-distribution-originshield-originshieldregion>
+                          originShieldRegion :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOriginShieldProperty :: OriginShieldProperty
+mkOriginShieldProperty
+  = OriginShieldProperty
+      {haddock_workaround_ = (), enabled = Prelude.Nothing,
+       originShieldRegion = Prelude.Nothing}
+instance ToResourceProperties OriginShieldProperty where
+  toResourceProperties OriginShieldProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.OriginShield",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Enabled" Prelude.<$> enabled,
+                            (JSON..=) "OriginShieldRegion" Prelude.<$> originShieldRegion])}
+instance JSON.ToJSON OriginShieldProperty where
+  toJSON OriginShieldProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Enabled" Prelude.<$> enabled,
+               (JSON..=) "OriginShieldRegion" Prelude.<$> originShieldRegion]))
+instance Property "Enabled" OriginShieldProperty where
+  type PropertyType "Enabled" OriginShieldProperty = Value Prelude.Bool
+  set newValue OriginShieldProperty {..}
+    = OriginShieldProperty {enabled = Prelude.pure newValue, ..}
+instance Property "OriginShieldRegion" OriginShieldProperty where
+  type PropertyType "OriginShieldRegion" OriginShieldProperty = Value Prelude.Text
+  set newValue OriginShieldProperty {..}
+    = OriginShieldProperty
+        {originShieldRegion = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/OriginShieldProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/OriginShieldProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/OriginShieldProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.OriginShieldProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OriginShieldProperty :: Prelude.Type
+instance ToResourceProperties OriginShieldProperty
+instance Prelude.Eq OriginShieldProperty
+instance Prelude.Show OriginShieldProperty
+instance JSON.ToJSON OriginShieldProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/ParameterDefinitionProperty.hs b/gen/Stratosphere/CloudFront/Distribution/ParameterDefinitionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/ParameterDefinitionProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.CloudFront.Distribution.ParameterDefinitionProperty (
+        module Exports, ParameterDefinitionProperty(..),
+        mkParameterDefinitionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.DefinitionProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ParameterDefinitionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-parameterdefinition.html>
+    ParameterDefinitionProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-parameterdefinition.html#cfn-cloudfront-distribution-parameterdefinition-definition>
+                                 definition :: DefinitionProperty,
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-parameterdefinition.html#cfn-cloudfront-distribution-parameterdefinition-name>
+                                 name :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkParameterDefinitionProperty ::
+  DefinitionProperty
+  -> Value Prelude.Text -> ParameterDefinitionProperty
+mkParameterDefinitionProperty definition name
+  = ParameterDefinitionProperty
+      {haddock_workaround_ = (), definition = definition, name = name}
+instance ToResourceProperties ParameterDefinitionProperty where
+  toResourceProperties ParameterDefinitionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.ParameterDefinition",
+         supportsTags = Prelude.False,
+         properties = ["Definition" JSON..= definition,
+                       "Name" JSON..= name]}
+instance JSON.ToJSON ParameterDefinitionProperty where
+  toJSON ParameterDefinitionProperty {..}
+    = JSON.object
+        ["Definition" JSON..= definition, "Name" JSON..= name]
+instance Property "Definition" ParameterDefinitionProperty where
+  type PropertyType "Definition" ParameterDefinitionProperty = DefinitionProperty
+  set newValue ParameterDefinitionProperty {..}
+    = ParameterDefinitionProperty {definition = newValue, ..}
+instance Property "Name" ParameterDefinitionProperty where
+  type PropertyType "Name" ParameterDefinitionProperty = Value Prelude.Text
+  set newValue ParameterDefinitionProperty {..}
+    = ParameterDefinitionProperty {name = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/ParameterDefinitionProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/ParameterDefinitionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/ParameterDefinitionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.ParameterDefinitionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ParameterDefinitionProperty :: Prelude.Type
+instance ToResourceProperties ParameterDefinitionProperty
+instance Prelude.Eq ParameterDefinitionProperty
+instance Prelude.Show ParameterDefinitionProperty
+instance JSON.ToJSON ParameterDefinitionProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/RestrictionsProperty.hs b/gen/Stratosphere/CloudFront/Distribution/RestrictionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/RestrictionsProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.CloudFront.Distribution.RestrictionsProperty (
+        module Exports, RestrictionsProperty(..), mkRestrictionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.GeoRestrictionProperty as Exports
+import Stratosphere.ResourceProperties
+data RestrictionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-restrictions.html>
+    RestrictionsProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-restrictions.html#cfn-cloudfront-distribution-restrictions-georestriction>
+                          geoRestriction :: GeoRestrictionProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRestrictionsProperty ::
+  GeoRestrictionProperty -> RestrictionsProperty
+mkRestrictionsProperty geoRestriction
+  = RestrictionsProperty
+      {haddock_workaround_ = (), geoRestriction = geoRestriction}
+instance ToResourceProperties RestrictionsProperty where
+  toResourceProperties RestrictionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.Restrictions",
+         supportsTags = Prelude.False,
+         properties = ["GeoRestriction" JSON..= geoRestriction]}
+instance JSON.ToJSON RestrictionsProperty where
+  toJSON RestrictionsProperty {..}
+    = JSON.object ["GeoRestriction" JSON..= geoRestriction]
+instance Property "GeoRestriction" RestrictionsProperty where
+  type PropertyType "GeoRestriction" RestrictionsProperty = GeoRestrictionProperty
+  set newValue RestrictionsProperty {..}
+    = RestrictionsProperty {geoRestriction = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/RestrictionsProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/RestrictionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/RestrictionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.RestrictionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RestrictionsProperty :: Prelude.Type
+instance ToResourceProperties RestrictionsProperty
+instance Prelude.Eq RestrictionsProperty
+instance Prelude.Show RestrictionsProperty
+instance JSON.ToJSON RestrictionsProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/S3OriginConfigProperty.hs b/gen/Stratosphere/CloudFront/Distribution/S3OriginConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/S3OriginConfigProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.CloudFront.Distribution.S3OriginConfigProperty (
+        S3OriginConfigProperty(..), mkS3OriginConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data S3OriginConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-s3originconfig.html>
+    S3OriginConfigProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-s3originconfig.html#cfn-cloudfront-distribution-s3originconfig-originaccessidentity>
+                            originAccessIdentity :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-s3originconfig.html#cfn-cloudfront-distribution-s3originconfig-originreadtimeout>
+                            originReadTimeout :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkS3OriginConfigProperty :: S3OriginConfigProperty
+mkS3OriginConfigProperty
+  = S3OriginConfigProperty
+      {haddock_workaround_ = (), originAccessIdentity = Prelude.Nothing,
+       originReadTimeout = Prelude.Nothing}
+instance ToResourceProperties S3OriginConfigProperty where
+  toResourceProperties S3OriginConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.S3OriginConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "OriginAccessIdentity" Prelude.<$> originAccessIdentity,
+                            (JSON..=) "OriginReadTimeout" Prelude.<$> originReadTimeout])}
+instance JSON.ToJSON S3OriginConfigProperty where
+  toJSON S3OriginConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "OriginAccessIdentity" Prelude.<$> originAccessIdentity,
+               (JSON..=) "OriginReadTimeout" Prelude.<$> originReadTimeout]))
+instance Property "OriginAccessIdentity" S3OriginConfigProperty where
+  type PropertyType "OriginAccessIdentity" S3OriginConfigProperty = Value Prelude.Text
+  set newValue S3OriginConfigProperty {..}
+    = S3OriginConfigProperty
+        {originAccessIdentity = Prelude.pure newValue, ..}
+instance Property "OriginReadTimeout" S3OriginConfigProperty where
+  type PropertyType "OriginReadTimeout" S3OriginConfigProperty = Value Prelude.Integer
+  set newValue S3OriginConfigProperty {..}
+    = S3OriginConfigProperty
+        {originReadTimeout = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/S3OriginConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/S3OriginConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/S3OriginConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.S3OriginConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data S3OriginConfigProperty :: Prelude.Type
+instance ToResourceProperties S3OriginConfigProperty
+instance Prelude.Eq S3OriginConfigProperty
+instance Prelude.Show S3OriginConfigProperty
+instance JSON.ToJSON S3OriginConfigProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/StatusCodesProperty.hs b/gen/Stratosphere/CloudFront/Distribution/StatusCodesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/StatusCodesProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.CloudFront.Distribution.StatusCodesProperty (
+        StatusCodesProperty(..), mkStatusCodesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data StatusCodesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-statuscodes.html>
+    StatusCodesProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-statuscodes.html#cfn-cloudfront-distribution-statuscodes-items>
+                         items :: (ValueList Prelude.Integer),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-statuscodes.html#cfn-cloudfront-distribution-statuscodes-quantity>
+                         quantity :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStatusCodesProperty ::
+  ValueList Prelude.Integer
+  -> Value Prelude.Integer -> StatusCodesProperty
+mkStatusCodesProperty items quantity
+  = StatusCodesProperty
+      {haddock_workaround_ = (), items = items, quantity = quantity}
+instance ToResourceProperties StatusCodesProperty where
+  toResourceProperties StatusCodesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.StatusCodes",
+         supportsTags = Prelude.False,
+         properties = ["Items" JSON..= items, "Quantity" JSON..= quantity]}
+instance JSON.ToJSON StatusCodesProperty where
+  toJSON StatusCodesProperty {..}
+    = JSON.object ["Items" JSON..= items, "Quantity" JSON..= quantity]
+instance Property "Items" StatusCodesProperty where
+  type PropertyType "Items" StatusCodesProperty = ValueList Prelude.Integer
+  set newValue StatusCodesProperty {..}
+    = StatusCodesProperty {items = newValue, ..}
+instance Property "Quantity" StatusCodesProperty where
+  type PropertyType "Quantity" StatusCodesProperty = Value Prelude.Integer
+  set newValue StatusCodesProperty {..}
+    = StatusCodesProperty {quantity = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/StatusCodesProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/StatusCodesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/StatusCodesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.StatusCodesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data StatusCodesProperty :: Prelude.Type
+instance ToResourceProperties StatusCodesProperty
+instance Prelude.Eq StatusCodesProperty
+instance Prelude.Show StatusCodesProperty
+instance JSON.ToJSON StatusCodesProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/StringSchemaProperty.hs b/gen/Stratosphere/CloudFront/Distribution/StringSchemaProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/StringSchemaProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.CloudFront.Distribution.StringSchemaProperty (
+        StringSchemaProperty(..), mkStringSchemaProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data StringSchemaProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-stringschema.html>
+    StringSchemaProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-stringschema.html#cfn-cloudfront-distribution-stringschema-comment>
+                          comment :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-stringschema.html#cfn-cloudfront-distribution-stringschema-defaultvalue>
+                          defaultValue :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-stringschema.html#cfn-cloudfront-distribution-stringschema-required>
+                          required :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStringSchemaProperty ::
+  Value Prelude.Bool -> StringSchemaProperty
+mkStringSchemaProperty required
+  = StringSchemaProperty
+      {haddock_workaround_ = (), required = required,
+       comment = Prelude.Nothing, defaultValue = Prelude.Nothing}
+instance ToResourceProperties StringSchemaProperty where
+  toResourceProperties StringSchemaProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.StringSchema",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Required" JSON..= required]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Comment" Prelude.<$> comment,
+                               (JSON..=) "DefaultValue" Prelude.<$> defaultValue]))}
+instance JSON.ToJSON StringSchemaProperty where
+  toJSON StringSchemaProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Required" JSON..= required]
+              (Prelude.catMaybes
+                 [(JSON..=) "Comment" Prelude.<$> comment,
+                  (JSON..=) "DefaultValue" Prelude.<$> defaultValue])))
+instance Property "Comment" StringSchemaProperty where
+  type PropertyType "Comment" StringSchemaProperty = Value Prelude.Text
+  set newValue StringSchemaProperty {..}
+    = StringSchemaProperty {comment = Prelude.pure newValue, ..}
+instance Property "DefaultValue" StringSchemaProperty where
+  type PropertyType "DefaultValue" StringSchemaProperty = Value Prelude.Text
+  set newValue StringSchemaProperty {..}
+    = StringSchemaProperty {defaultValue = Prelude.pure newValue, ..}
+instance Property "Required" StringSchemaProperty where
+  type PropertyType "Required" StringSchemaProperty = Value Prelude.Bool
+  set newValue StringSchemaProperty {..}
+    = StringSchemaProperty {required = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/StringSchemaProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/StringSchemaProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/StringSchemaProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.StringSchemaProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data StringSchemaProperty :: Prelude.Type
+instance ToResourceProperties StringSchemaProperty
+instance Prelude.Eq StringSchemaProperty
+instance Prelude.Show StringSchemaProperty
+instance JSON.ToJSON StringSchemaProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/TenantConfigProperty.hs b/gen/Stratosphere/CloudFront/Distribution/TenantConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/TenantConfigProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.CloudFront.Distribution.TenantConfigProperty (
+        module Exports, TenantConfigProperty(..), mkTenantConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.Distribution.ParameterDefinitionProperty as Exports
+import Stratosphere.ResourceProperties
+data TenantConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-tenantconfig.html>
+    TenantConfigProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-tenantconfig.html#cfn-cloudfront-distribution-tenantconfig-parameterdefinitions>
+                          parameterDefinitions :: (Prelude.Maybe [ParameterDefinitionProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTenantConfigProperty :: TenantConfigProperty
+mkTenantConfigProperty
+  = TenantConfigProperty
+      {haddock_workaround_ = (), parameterDefinitions = Prelude.Nothing}
+instance ToResourceProperties TenantConfigProperty where
+  toResourceProperties TenantConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.TenantConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ParameterDefinitions"
+                              Prelude.<$> parameterDefinitions])}
+instance JSON.ToJSON TenantConfigProperty where
+  toJSON TenantConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ParameterDefinitions"
+                 Prelude.<$> parameterDefinitions]))
+instance Property "ParameterDefinitions" TenantConfigProperty where
+  type PropertyType "ParameterDefinitions" TenantConfigProperty = [ParameterDefinitionProperty]
+  set newValue TenantConfigProperty {..}
+    = TenantConfigProperty
+        {parameterDefinitions = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/TenantConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/TenantConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/TenantConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.TenantConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TenantConfigProperty :: Prelude.Type
+instance ToResourceProperties TenantConfigProperty
+instance Prelude.Eq TenantConfigProperty
+instance Prelude.Show TenantConfigProperty
+instance JSON.ToJSON TenantConfigProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/ViewerCertificateProperty.hs b/gen/Stratosphere/CloudFront/Distribution/ViewerCertificateProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/ViewerCertificateProperty.hs
@@ -0,0 +1,81 @@
+module Stratosphere.CloudFront.Distribution.ViewerCertificateProperty (
+        ViewerCertificateProperty(..), mkViewerCertificateProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ViewerCertificateProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-viewercertificate.html>
+    ViewerCertificateProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-viewercertificate.html#cfn-cloudfront-distribution-viewercertificate-acmcertificatearn>
+                               acmCertificateArn :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-viewercertificate.html#cfn-cloudfront-distribution-viewercertificate-cloudfrontdefaultcertificate>
+                               cloudFrontDefaultCertificate :: (Prelude.Maybe (Value Prelude.Bool)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-viewercertificate.html#cfn-cloudfront-distribution-viewercertificate-iamcertificateid>
+                               iamCertificateId :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-viewercertificate.html#cfn-cloudfront-distribution-viewercertificate-minimumprotocolversion>
+                               minimumProtocolVersion :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-viewercertificate.html#cfn-cloudfront-distribution-viewercertificate-sslsupportmethod>
+                               sslSupportMethod :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkViewerCertificateProperty :: ViewerCertificateProperty
+mkViewerCertificateProperty
+  = ViewerCertificateProperty
+      {haddock_workaround_ = (), acmCertificateArn = Prelude.Nothing,
+       cloudFrontDefaultCertificate = Prelude.Nothing,
+       iamCertificateId = Prelude.Nothing,
+       minimumProtocolVersion = Prelude.Nothing,
+       sslSupportMethod = Prelude.Nothing}
+instance ToResourceProperties ViewerCertificateProperty where
+  toResourceProperties ViewerCertificateProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.ViewerCertificate",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AcmCertificateArn" Prelude.<$> acmCertificateArn,
+                            (JSON..=) "CloudFrontDefaultCertificate"
+                              Prelude.<$> cloudFrontDefaultCertificate,
+                            (JSON..=) "IamCertificateId" Prelude.<$> iamCertificateId,
+                            (JSON..=) "MinimumProtocolVersion"
+                              Prelude.<$> minimumProtocolVersion,
+                            (JSON..=) "SslSupportMethod" Prelude.<$> sslSupportMethod])}
+instance JSON.ToJSON ViewerCertificateProperty where
+  toJSON ViewerCertificateProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AcmCertificateArn" Prelude.<$> acmCertificateArn,
+               (JSON..=) "CloudFrontDefaultCertificate"
+                 Prelude.<$> cloudFrontDefaultCertificate,
+               (JSON..=) "IamCertificateId" Prelude.<$> iamCertificateId,
+               (JSON..=) "MinimumProtocolVersion"
+                 Prelude.<$> minimumProtocolVersion,
+               (JSON..=) "SslSupportMethod" Prelude.<$> sslSupportMethod]))
+instance Property "AcmCertificateArn" ViewerCertificateProperty where
+  type PropertyType "AcmCertificateArn" ViewerCertificateProperty = Value Prelude.Text
+  set newValue ViewerCertificateProperty {..}
+    = ViewerCertificateProperty
+        {acmCertificateArn = Prelude.pure newValue, ..}
+instance Property "CloudFrontDefaultCertificate" ViewerCertificateProperty where
+  type PropertyType "CloudFrontDefaultCertificate" ViewerCertificateProperty = Value Prelude.Bool
+  set newValue ViewerCertificateProperty {..}
+    = ViewerCertificateProperty
+        {cloudFrontDefaultCertificate = Prelude.pure newValue, ..}
+instance Property "IamCertificateId" ViewerCertificateProperty where
+  type PropertyType "IamCertificateId" ViewerCertificateProperty = Value Prelude.Text
+  set newValue ViewerCertificateProperty {..}
+    = ViewerCertificateProperty
+        {iamCertificateId = Prelude.pure newValue, ..}
+instance Property "MinimumProtocolVersion" ViewerCertificateProperty where
+  type PropertyType "MinimumProtocolVersion" ViewerCertificateProperty = Value Prelude.Text
+  set newValue ViewerCertificateProperty {..}
+    = ViewerCertificateProperty
+        {minimumProtocolVersion = Prelude.pure newValue, ..}
+instance Property "SslSupportMethod" ViewerCertificateProperty where
+  type PropertyType "SslSupportMethod" ViewerCertificateProperty = Value Prelude.Text
+  set newValue ViewerCertificateProperty {..}
+    = ViewerCertificateProperty
+        {sslSupportMethod = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/ViewerCertificateProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/ViewerCertificateProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/ViewerCertificateProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.ViewerCertificateProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ViewerCertificateProperty :: Prelude.Type
+instance ToResourceProperties ViewerCertificateProperty
+instance Prelude.Eq ViewerCertificateProperty
+instance Prelude.Show ViewerCertificateProperty
+instance JSON.ToJSON ViewerCertificateProperty
diff --git a/gen/Stratosphere/CloudFront/Distribution/VpcOriginConfigProperty.hs b/gen/Stratosphere/CloudFront/Distribution/VpcOriginConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/VpcOriginConfigProperty.hs
@@ -0,0 +1,71 @@
+module Stratosphere.CloudFront.Distribution.VpcOriginConfigProperty (
+        VpcOriginConfigProperty(..), mkVpcOriginConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VpcOriginConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-vpcoriginconfig.html>
+    VpcOriginConfigProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-vpcoriginconfig.html#cfn-cloudfront-distribution-vpcoriginconfig-originkeepalivetimeout>
+                             originKeepaliveTimeout :: (Prelude.Maybe (Value Prelude.Integer)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-vpcoriginconfig.html#cfn-cloudfront-distribution-vpcoriginconfig-originreadtimeout>
+                             originReadTimeout :: (Prelude.Maybe (Value Prelude.Integer)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-vpcoriginconfig.html#cfn-cloudfront-distribution-vpcoriginconfig-owneraccountid>
+                             ownerAccountId :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-vpcoriginconfig.html#cfn-cloudfront-distribution-vpcoriginconfig-vpcoriginid>
+                             vpcOriginId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVpcOriginConfigProperty ::
+  Value Prelude.Text -> VpcOriginConfigProperty
+mkVpcOriginConfigProperty vpcOriginId
+  = VpcOriginConfigProperty
+      {haddock_workaround_ = (), vpcOriginId = vpcOriginId,
+       originKeepaliveTimeout = Prelude.Nothing,
+       originReadTimeout = Prelude.Nothing,
+       ownerAccountId = Prelude.Nothing}
+instance ToResourceProperties VpcOriginConfigProperty where
+  toResourceProperties VpcOriginConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Distribution.VpcOriginConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["VpcOriginId" JSON..= vpcOriginId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "OriginKeepaliveTimeout"
+                                 Prelude.<$> originKeepaliveTimeout,
+                               (JSON..=) "OriginReadTimeout" Prelude.<$> originReadTimeout,
+                               (JSON..=) "OwnerAccountId" Prelude.<$> ownerAccountId]))}
+instance JSON.ToJSON VpcOriginConfigProperty where
+  toJSON VpcOriginConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["VpcOriginId" JSON..= vpcOriginId]
+              (Prelude.catMaybes
+                 [(JSON..=) "OriginKeepaliveTimeout"
+                    Prelude.<$> originKeepaliveTimeout,
+                  (JSON..=) "OriginReadTimeout" Prelude.<$> originReadTimeout,
+                  (JSON..=) "OwnerAccountId" Prelude.<$> ownerAccountId])))
+instance Property "OriginKeepaliveTimeout" VpcOriginConfigProperty where
+  type PropertyType "OriginKeepaliveTimeout" VpcOriginConfigProperty = Value Prelude.Integer
+  set newValue VpcOriginConfigProperty {..}
+    = VpcOriginConfigProperty
+        {originKeepaliveTimeout = Prelude.pure newValue, ..}
+instance Property "OriginReadTimeout" VpcOriginConfigProperty where
+  type PropertyType "OriginReadTimeout" VpcOriginConfigProperty = Value Prelude.Integer
+  set newValue VpcOriginConfigProperty {..}
+    = VpcOriginConfigProperty
+        {originReadTimeout = Prelude.pure newValue, ..}
+instance Property "OwnerAccountId" VpcOriginConfigProperty where
+  type PropertyType "OwnerAccountId" VpcOriginConfigProperty = Value Prelude.Text
+  set newValue VpcOriginConfigProperty {..}
+    = VpcOriginConfigProperty
+        {ownerAccountId = Prelude.pure newValue, ..}
+instance Property "VpcOriginId" VpcOriginConfigProperty where
+  type PropertyType "VpcOriginId" VpcOriginConfigProperty = Value Prelude.Text
+  set newValue VpcOriginConfigProperty {..}
+    = VpcOriginConfigProperty {vpcOriginId = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Distribution/VpcOriginConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/Distribution/VpcOriginConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Distribution/VpcOriginConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Distribution.VpcOriginConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VpcOriginConfigProperty :: Prelude.Type
+instance ToResourceProperties VpcOriginConfigProperty
+instance Prelude.Eq VpcOriginConfigProperty
+instance Prelude.Show VpcOriginConfigProperty
+instance JSON.ToJSON VpcOriginConfigProperty
diff --git a/gen/Stratosphere/CloudFront/DistributionTenant.hs b/gen/Stratosphere/CloudFront/DistributionTenant.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/DistributionTenant.hs
@@ -0,0 +1,116 @@
+module Stratosphere.CloudFront.DistributionTenant (
+        module Exports, DistributionTenant(..), mkDistributionTenant
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.DistributionTenant.CustomizationsProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.DistributionTenant.ManagedCertificateRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.DistributionTenant.ParameterProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data DistributionTenant
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distributiontenant.html>
+    DistributionTenant {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distributiontenant.html#cfn-cloudfront-distributiontenant-connectiongroupid>
+                        connectionGroupId :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distributiontenant.html#cfn-cloudfront-distributiontenant-customizations>
+                        customizations :: (Prelude.Maybe CustomizationsProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distributiontenant.html#cfn-cloudfront-distributiontenant-distributionid>
+                        distributionId :: (Value Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distributiontenant.html#cfn-cloudfront-distributiontenant-domains>
+                        domains :: (ValueList Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distributiontenant.html#cfn-cloudfront-distributiontenant-enabled>
+                        enabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distributiontenant.html#cfn-cloudfront-distributiontenant-managedcertificaterequest>
+                        managedCertificateRequest :: (Prelude.Maybe ManagedCertificateRequestProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distributiontenant.html#cfn-cloudfront-distributiontenant-name>
+                        name :: (Value Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distributiontenant.html#cfn-cloudfront-distributiontenant-parameters>
+                        parameters :: (Prelude.Maybe [ParameterProperty]),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distributiontenant.html#cfn-cloudfront-distributiontenant-tags>
+                        tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDistributionTenant ::
+  Value Prelude.Text
+  -> ValueList Prelude.Text
+     -> Value Prelude.Text -> DistributionTenant
+mkDistributionTenant distributionId domains name
+  = DistributionTenant
+      {haddock_workaround_ = (), distributionId = distributionId,
+       domains = domains, name = name,
+       connectionGroupId = Prelude.Nothing,
+       customizations = Prelude.Nothing, enabled = Prelude.Nothing,
+       managedCertificateRequest = Prelude.Nothing,
+       parameters = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties DistributionTenant where
+  toResourceProperties DistributionTenant {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::DistributionTenant",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DistributionId" JSON..= distributionId,
+                            "Domains" JSON..= domains, "Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ConnectionGroupId" Prelude.<$> connectionGroupId,
+                               (JSON..=) "Customizations" Prelude.<$> customizations,
+                               (JSON..=) "Enabled" Prelude.<$> enabled,
+                               (JSON..=) "ManagedCertificateRequest"
+                                 Prelude.<$> managedCertificateRequest,
+                               (JSON..=) "Parameters" Prelude.<$> parameters,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON DistributionTenant where
+  toJSON DistributionTenant {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DistributionId" JSON..= distributionId,
+               "Domains" JSON..= domains, "Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "ConnectionGroupId" Prelude.<$> connectionGroupId,
+                  (JSON..=) "Customizations" Prelude.<$> customizations,
+                  (JSON..=) "Enabled" Prelude.<$> enabled,
+                  (JSON..=) "ManagedCertificateRequest"
+                    Prelude.<$> managedCertificateRequest,
+                  (JSON..=) "Parameters" Prelude.<$> parameters,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "ConnectionGroupId" DistributionTenant where
+  type PropertyType "ConnectionGroupId" DistributionTenant = Value Prelude.Text
+  set newValue DistributionTenant {..}
+    = DistributionTenant
+        {connectionGroupId = Prelude.pure newValue, ..}
+instance Property "Customizations" DistributionTenant where
+  type PropertyType "Customizations" DistributionTenant = CustomizationsProperty
+  set newValue DistributionTenant {..}
+    = DistributionTenant {customizations = Prelude.pure newValue, ..}
+instance Property "DistributionId" DistributionTenant where
+  type PropertyType "DistributionId" DistributionTenant = Value Prelude.Text
+  set newValue DistributionTenant {..}
+    = DistributionTenant {distributionId = newValue, ..}
+instance Property "Domains" DistributionTenant where
+  type PropertyType "Domains" DistributionTenant = ValueList Prelude.Text
+  set newValue DistributionTenant {..}
+    = DistributionTenant {domains = newValue, ..}
+instance Property "Enabled" DistributionTenant where
+  type PropertyType "Enabled" DistributionTenant = Value Prelude.Bool
+  set newValue DistributionTenant {..}
+    = DistributionTenant {enabled = Prelude.pure newValue, ..}
+instance Property "ManagedCertificateRequest" DistributionTenant where
+  type PropertyType "ManagedCertificateRequest" DistributionTenant = ManagedCertificateRequestProperty
+  set newValue DistributionTenant {..}
+    = DistributionTenant
+        {managedCertificateRequest = Prelude.pure newValue, ..}
+instance Property "Name" DistributionTenant where
+  type PropertyType "Name" DistributionTenant = Value Prelude.Text
+  set newValue DistributionTenant {..}
+    = DistributionTenant {name = newValue, ..}
+instance Property "Parameters" DistributionTenant where
+  type PropertyType "Parameters" DistributionTenant = [ParameterProperty]
+  set newValue DistributionTenant {..}
+    = DistributionTenant {parameters = Prelude.pure newValue, ..}
+instance Property "Tags" DistributionTenant where
+  type PropertyType "Tags" DistributionTenant = [Tag]
+  set newValue DistributionTenant {..}
+    = DistributionTenant {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/DistributionTenant/CertificateProperty.hs b/gen/Stratosphere/CloudFront/DistributionTenant/CertificateProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/DistributionTenant/CertificateProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.CloudFront.DistributionTenant.CertificateProperty (
+        CertificateProperty(..), mkCertificateProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CertificateProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-certificate.html>
+    CertificateProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-certificate.html#cfn-cloudfront-distributiontenant-certificate-arn>
+                         arn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCertificateProperty :: CertificateProperty
+mkCertificateProperty
+  = CertificateProperty
+      {haddock_workaround_ = (), arn = Prelude.Nothing}
+instance ToResourceProperties CertificateProperty where
+  toResourceProperties CertificateProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::DistributionTenant.Certificate",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Arn" Prelude.<$> arn])}
+instance JSON.ToJSON CertificateProperty where
+  toJSON CertificateProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Arn" Prelude.<$> arn]))
+instance Property "Arn" CertificateProperty where
+  type PropertyType "Arn" CertificateProperty = Value Prelude.Text
+  set newValue CertificateProperty {..}
+    = CertificateProperty {arn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/DistributionTenant/CertificateProperty.hs-boot b/gen/Stratosphere/CloudFront/DistributionTenant/CertificateProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/DistributionTenant/CertificateProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.DistributionTenant.CertificateProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CertificateProperty :: Prelude.Type
+instance ToResourceProperties CertificateProperty
+instance Prelude.Eq CertificateProperty
+instance Prelude.Show CertificateProperty
+instance JSON.ToJSON CertificateProperty
diff --git a/gen/Stratosphere/CloudFront/DistributionTenant/CustomizationsProperty.hs b/gen/Stratosphere/CloudFront/DistributionTenant/CustomizationsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/DistributionTenant/CustomizationsProperty.hs
@@ -0,0 +1,57 @@
+module Stratosphere.CloudFront.DistributionTenant.CustomizationsProperty (
+        module Exports, CustomizationsProperty(..),
+        mkCustomizationsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.DistributionTenant.CertificateProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.DistributionTenant.GeoRestrictionCustomizationProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.DistributionTenant.WebAclCustomizationProperty as Exports
+import Stratosphere.ResourceProperties
+data CustomizationsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-customizations.html>
+    CustomizationsProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-customizations.html#cfn-cloudfront-distributiontenant-customizations-certificate>
+                            certificate :: (Prelude.Maybe CertificateProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-customizations.html#cfn-cloudfront-distributiontenant-customizations-georestrictions>
+                            geoRestrictions :: (Prelude.Maybe GeoRestrictionCustomizationProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-customizations.html#cfn-cloudfront-distributiontenant-customizations-webacl>
+                            webAcl :: (Prelude.Maybe WebAclCustomizationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCustomizationsProperty :: CustomizationsProperty
+mkCustomizationsProperty
+  = CustomizationsProperty
+      {haddock_workaround_ = (), certificate = Prelude.Nothing,
+       geoRestrictions = Prelude.Nothing, webAcl = Prelude.Nothing}
+instance ToResourceProperties CustomizationsProperty where
+  toResourceProperties CustomizationsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::DistributionTenant.Customizations",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Certificate" Prelude.<$> certificate,
+                            (JSON..=) "GeoRestrictions" Prelude.<$> geoRestrictions,
+                            (JSON..=) "WebAcl" Prelude.<$> webAcl])}
+instance JSON.ToJSON CustomizationsProperty where
+  toJSON CustomizationsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Certificate" Prelude.<$> certificate,
+               (JSON..=) "GeoRestrictions" Prelude.<$> geoRestrictions,
+               (JSON..=) "WebAcl" Prelude.<$> webAcl]))
+instance Property "Certificate" CustomizationsProperty where
+  type PropertyType "Certificate" CustomizationsProperty = CertificateProperty
+  set newValue CustomizationsProperty {..}
+    = CustomizationsProperty {certificate = Prelude.pure newValue, ..}
+instance Property "GeoRestrictions" CustomizationsProperty where
+  type PropertyType "GeoRestrictions" CustomizationsProperty = GeoRestrictionCustomizationProperty
+  set newValue CustomizationsProperty {..}
+    = CustomizationsProperty
+        {geoRestrictions = Prelude.pure newValue, ..}
+instance Property "WebAcl" CustomizationsProperty where
+  type PropertyType "WebAcl" CustomizationsProperty = WebAclCustomizationProperty
+  set newValue CustomizationsProperty {..}
+    = CustomizationsProperty {webAcl = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/DistributionTenant/CustomizationsProperty.hs-boot b/gen/Stratosphere/CloudFront/DistributionTenant/CustomizationsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/DistributionTenant/CustomizationsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.DistributionTenant.CustomizationsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CustomizationsProperty :: Prelude.Type
+instance ToResourceProperties CustomizationsProperty
+instance Prelude.Eq CustomizationsProperty
+instance Prelude.Show CustomizationsProperty
+instance JSON.ToJSON CustomizationsProperty
diff --git a/gen/Stratosphere/CloudFront/DistributionTenant/DomainResultProperty.hs b/gen/Stratosphere/CloudFront/DistributionTenant/DomainResultProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/DistributionTenant/DomainResultProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.CloudFront.DistributionTenant.DomainResultProperty (
+        DomainResultProperty(..), mkDomainResultProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DomainResultProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-domainresult.html>
+    DomainResultProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-domainresult.html#cfn-cloudfront-distributiontenant-domainresult-domain>
+                          domain :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-domainresult.html#cfn-cloudfront-distributiontenant-domainresult-status>
+                          status :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDomainResultProperty :: DomainResultProperty
+mkDomainResultProperty
+  = DomainResultProperty
+      {haddock_workaround_ = (), domain = Prelude.Nothing,
+       status = Prelude.Nothing}
+instance ToResourceProperties DomainResultProperty where
+  toResourceProperties DomainResultProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::DistributionTenant.DomainResult",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Domain" Prelude.<$> domain,
+                            (JSON..=) "Status" Prelude.<$> status])}
+instance JSON.ToJSON DomainResultProperty where
+  toJSON DomainResultProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Domain" Prelude.<$> domain,
+               (JSON..=) "Status" Prelude.<$> status]))
+instance Property "Domain" DomainResultProperty where
+  type PropertyType "Domain" DomainResultProperty = Value Prelude.Text
+  set newValue DomainResultProperty {..}
+    = DomainResultProperty {domain = Prelude.pure newValue, ..}
+instance Property "Status" DomainResultProperty where
+  type PropertyType "Status" DomainResultProperty = Value Prelude.Text
+  set newValue DomainResultProperty {..}
+    = DomainResultProperty {status = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/DistributionTenant/DomainResultProperty.hs-boot b/gen/Stratosphere/CloudFront/DistributionTenant/DomainResultProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/DistributionTenant/DomainResultProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.DistributionTenant.DomainResultProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DomainResultProperty :: Prelude.Type
+instance ToResourceProperties DomainResultProperty
+instance Prelude.Eq DomainResultProperty
+instance Prelude.Show DomainResultProperty
+instance JSON.ToJSON DomainResultProperty
diff --git a/gen/Stratosphere/CloudFront/DistributionTenant/GeoRestrictionCustomizationProperty.hs b/gen/Stratosphere/CloudFront/DistributionTenant/GeoRestrictionCustomizationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/DistributionTenant/GeoRestrictionCustomizationProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.CloudFront.DistributionTenant.GeoRestrictionCustomizationProperty (
+        GeoRestrictionCustomizationProperty(..),
+        mkGeoRestrictionCustomizationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data GeoRestrictionCustomizationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-georestrictioncustomization.html>
+    GeoRestrictionCustomizationProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-georestrictioncustomization.html#cfn-cloudfront-distributiontenant-georestrictioncustomization-locations>
+                                         locations :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-georestrictioncustomization.html#cfn-cloudfront-distributiontenant-georestrictioncustomization-restrictiontype>
+                                         restrictionType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGeoRestrictionCustomizationProperty ::
+  GeoRestrictionCustomizationProperty
+mkGeoRestrictionCustomizationProperty
+  = GeoRestrictionCustomizationProperty
+      {haddock_workaround_ = (), locations = Prelude.Nothing,
+       restrictionType = Prelude.Nothing}
+instance ToResourceProperties GeoRestrictionCustomizationProperty where
+  toResourceProperties GeoRestrictionCustomizationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::DistributionTenant.GeoRestrictionCustomization",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Locations" Prelude.<$> locations,
+                            (JSON..=) "RestrictionType" Prelude.<$> restrictionType])}
+instance JSON.ToJSON GeoRestrictionCustomizationProperty where
+  toJSON GeoRestrictionCustomizationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Locations" Prelude.<$> locations,
+               (JSON..=) "RestrictionType" Prelude.<$> restrictionType]))
+instance Property "Locations" GeoRestrictionCustomizationProperty where
+  type PropertyType "Locations" GeoRestrictionCustomizationProperty = ValueList Prelude.Text
+  set newValue GeoRestrictionCustomizationProperty {..}
+    = GeoRestrictionCustomizationProperty
+        {locations = Prelude.pure newValue, ..}
+instance Property "RestrictionType" GeoRestrictionCustomizationProperty where
+  type PropertyType "RestrictionType" GeoRestrictionCustomizationProperty = Value Prelude.Text
+  set newValue GeoRestrictionCustomizationProperty {..}
+    = GeoRestrictionCustomizationProperty
+        {restrictionType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/DistributionTenant/GeoRestrictionCustomizationProperty.hs-boot b/gen/Stratosphere/CloudFront/DistributionTenant/GeoRestrictionCustomizationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/DistributionTenant/GeoRestrictionCustomizationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.DistributionTenant.GeoRestrictionCustomizationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data GeoRestrictionCustomizationProperty :: Prelude.Type
+instance ToResourceProperties GeoRestrictionCustomizationProperty
+instance Prelude.Eq GeoRestrictionCustomizationProperty
+instance Prelude.Show GeoRestrictionCustomizationProperty
+instance JSON.ToJSON GeoRestrictionCustomizationProperty
diff --git a/gen/Stratosphere/CloudFront/DistributionTenant/ManagedCertificateRequestProperty.hs b/gen/Stratosphere/CloudFront/DistributionTenant/ManagedCertificateRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/DistributionTenant/ManagedCertificateRequestProperty.hs
@@ -0,0 +1,63 @@
+module Stratosphere.CloudFront.DistributionTenant.ManagedCertificateRequestProperty (
+        ManagedCertificateRequestProperty(..),
+        mkManagedCertificateRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ManagedCertificateRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-managedcertificaterequest.html>
+    ManagedCertificateRequestProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-managedcertificaterequest.html#cfn-cloudfront-distributiontenant-managedcertificaterequest-certificatetransparencyloggingpreference>
+                                       certificateTransparencyLoggingPreference :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-managedcertificaterequest.html#cfn-cloudfront-distributiontenant-managedcertificaterequest-primarydomainname>
+                                       primaryDomainName :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-managedcertificaterequest.html#cfn-cloudfront-distributiontenant-managedcertificaterequest-validationtokenhost>
+                                       validationTokenHost :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkManagedCertificateRequestProperty ::
+  ManagedCertificateRequestProperty
+mkManagedCertificateRequestProperty
+  = ManagedCertificateRequestProperty
+      {haddock_workaround_ = (),
+       certificateTransparencyLoggingPreference = Prelude.Nothing,
+       primaryDomainName = Prelude.Nothing,
+       validationTokenHost = Prelude.Nothing}
+instance ToResourceProperties ManagedCertificateRequestProperty where
+  toResourceProperties ManagedCertificateRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::DistributionTenant.ManagedCertificateRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CertificateTransparencyLoggingPreference"
+                              Prelude.<$> certificateTransparencyLoggingPreference,
+                            (JSON..=) "PrimaryDomainName" Prelude.<$> primaryDomainName,
+                            (JSON..=) "ValidationTokenHost" Prelude.<$> validationTokenHost])}
+instance JSON.ToJSON ManagedCertificateRequestProperty where
+  toJSON ManagedCertificateRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CertificateTransparencyLoggingPreference"
+                 Prelude.<$> certificateTransparencyLoggingPreference,
+               (JSON..=) "PrimaryDomainName" Prelude.<$> primaryDomainName,
+               (JSON..=) "ValidationTokenHost" Prelude.<$> validationTokenHost]))
+instance Property "CertificateTransparencyLoggingPreference" ManagedCertificateRequestProperty where
+  type PropertyType "CertificateTransparencyLoggingPreference" ManagedCertificateRequestProperty = Value Prelude.Text
+  set newValue ManagedCertificateRequestProperty {..}
+    = ManagedCertificateRequestProperty
+        {certificateTransparencyLoggingPreference = Prelude.pure newValue,
+         ..}
+instance Property "PrimaryDomainName" ManagedCertificateRequestProperty where
+  type PropertyType "PrimaryDomainName" ManagedCertificateRequestProperty = Value Prelude.Text
+  set newValue ManagedCertificateRequestProperty {..}
+    = ManagedCertificateRequestProperty
+        {primaryDomainName = Prelude.pure newValue, ..}
+instance Property "ValidationTokenHost" ManagedCertificateRequestProperty where
+  type PropertyType "ValidationTokenHost" ManagedCertificateRequestProperty = Value Prelude.Text
+  set newValue ManagedCertificateRequestProperty {..}
+    = ManagedCertificateRequestProperty
+        {validationTokenHost = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/DistributionTenant/ManagedCertificateRequestProperty.hs-boot b/gen/Stratosphere/CloudFront/DistributionTenant/ManagedCertificateRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/DistributionTenant/ManagedCertificateRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.DistributionTenant.ManagedCertificateRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ManagedCertificateRequestProperty :: Prelude.Type
+instance ToResourceProperties ManagedCertificateRequestProperty
+instance Prelude.Eq ManagedCertificateRequestProperty
+instance Prelude.Show ManagedCertificateRequestProperty
+instance JSON.ToJSON ManagedCertificateRequestProperty
diff --git a/gen/Stratosphere/CloudFront/DistributionTenant/ParameterProperty.hs b/gen/Stratosphere/CloudFront/DistributionTenant/ParameterProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/DistributionTenant/ParameterProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.CloudFront.DistributionTenant.ParameterProperty (
+        ParameterProperty(..), mkParameterProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ParameterProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-parameter.html>
+    ParameterProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-parameter.html#cfn-cloudfront-distributiontenant-parameter-name>
+                       name :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-parameter.html#cfn-cloudfront-distributiontenant-parameter-value>
+                       value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkParameterProperty :: ParameterProperty
+mkParameterProperty
+  = ParameterProperty
+      {haddock_workaround_ = (), name = Prelude.Nothing,
+       value = Prelude.Nothing}
+instance ToResourceProperties ParameterProperty where
+  toResourceProperties ParameterProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::DistributionTenant.Parameter",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON ParameterProperty where
+  toJSON ParameterProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "Value" Prelude.<$> value]))
+instance Property "Name" ParameterProperty where
+  type PropertyType "Name" ParameterProperty = Value Prelude.Text
+  set newValue ParameterProperty {..}
+    = ParameterProperty {name = Prelude.pure newValue, ..}
+instance Property "Value" ParameterProperty where
+  type PropertyType "Value" ParameterProperty = Value Prelude.Text
+  set newValue ParameterProperty {..}
+    = ParameterProperty {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/DistributionTenant/ParameterProperty.hs-boot b/gen/Stratosphere/CloudFront/DistributionTenant/ParameterProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/DistributionTenant/ParameterProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.DistributionTenant.ParameterProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ParameterProperty :: Prelude.Type
+instance ToResourceProperties ParameterProperty
+instance Prelude.Eq ParameterProperty
+instance Prelude.Show ParameterProperty
+instance JSON.ToJSON ParameterProperty
diff --git a/gen/Stratosphere/CloudFront/DistributionTenant/WebAclCustomizationProperty.hs b/gen/Stratosphere/CloudFront/DistributionTenant/WebAclCustomizationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/DistributionTenant/WebAclCustomizationProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.CloudFront.DistributionTenant.WebAclCustomizationProperty (
+        WebAclCustomizationProperty(..), mkWebAclCustomizationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data WebAclCustomizationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-webaclcustomization.html>
+    WebAclCustomizationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-webaclcustomization.html#cfn-cloudfront-distributiontenant-webaclcustomization-action>
+                                 action :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributiontenant-webaclcustomization.html#cfn-cloudfront-distributiontenant-webaclcustomization-arn>
+                                 arn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkWebAclCustomizationProperty :: WebAclCustomizationProperty
+mkWebAclCustomizationProperty
+  = WebAclCustomizationProperty
+      {haddock_workaround_ = (), action = Prelude.Nothing,
+       arn = Prelude.Nothing}
+instance ToResourceProperties WebAclCustomizationProperty where
+  toResourceProperties WebAclCustomizationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::DistributionTenant.WebAclCustomization",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Action" Prelude.<$> action,
+                            (JSON..=) "Arn" Prelude.<$> arn])}
+instance JSON.ToJSON WebAclCustomizationProperty where
+  toJSON WebAclCustomizationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Action" Prelude.<$> action,
+               (JSON..=) "Arn" Prelude.<$> arn]))
+instance Property "Action" WebAclCustomizationProperty where
+  type PropertyType "Action" WebAclCustomizationProperty = Value Prelude.Text
+  set newValue WebAclCustomizationProperty {..}
+    = WebAclCustomizationProperty {action = Prelude.pure newValue, ..}
+instance Property "Arn" WebAclCustomizationProperty where
+  type PropertyType "Arn" WebAclCustomizationProperty = Value Prelude.Text
+  set newValue WebAclCustomizationProperty {..}
+    = WebAclCustomizationProperty {arn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/DistributionTenant/WebAclCustomizationProperty.hs-boot b/gen/Stratosphere/CloudFront/DistributionTenant/WebAclCustomizationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/DistributionTenant/WebAclCustomizationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.DistributionTenant.WebAclCustomizationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data WebAclCustomizationProperty :: Prelude.Type
+instance ToResourceProperties WebAclCustomizationProperty
+instance Prelude.Eq WebAclCustomizationProperty
+instance Prelude.Show WebAclCustomizationProperty
+instance JSON.ToJSON WebAclCustomizationProperty
diff --git a/gen/Stratosphere/CloudFront/Function.hs b/gen/Stratosphere/CloudFront/Function.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Function.hs
@@ -0,0 +1,72 @@
+module Stratosphere.CloudFront.Function (
+        module Exports, Function(..), mkFunction
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.Function.FunctionConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.Function.FunctionMetadataProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Function
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-function.html>
+    Function {haddock_workaround_ :: (),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-function.html#cfn-cloudfront-function-autopublish>
+              autoPublish :: (Prelude.Maybe (Value Prelude.Bool)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-function.html#cfn-cloudfront-function-functioncode>
+              functionCode :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-function.html#cfn-cloudfront-function-functionconfig>
+              functionConfig :: FunctionConfigProperty,
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-function.html#cfn-cloudfront-function-functionmetadata>
+              functionMetadata :: (Prelude.Maybe FunctionMetadataProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-function.html#cfn-cloudfront-function-name>
+              name :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFunction ::
+  Value Prelude.Text
+  -> FunctionConfigProperty -> Value Prelude.Text -> Function
+mkFunction functionCode functionConfig name
+  = Function
+      {haddock_workaround_ = (), functionCode = functionCode,
+       functionConfig = functionConfig, name = name,
+       autoPublish = Prelude.Nothing, functionMetadata = Prelude.Nothing}
+instance ToResourceProperties Function where
+  toResourceProperties Function {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Function",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["FunctionCode" JSON..= functionCode,
+                            "FunctionConfig" JSON..= functionConfig, "Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AutoPublish" Prelude.<$> autoPublish,
+                               (JSON..=) "FunctionMetadata" Prelude.<$> functionMetadata]))}
+instance JSON.ToJSON Function where
+  toJSON Function {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["FunctionCode" JSON..= functionCode,
+               "FunctionConfig" JSON..= functionConfig, "Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "AutoPublish" Prelude.<$> autoPublish,
+                  (JSON..=) "FunctionMetadata" Prelude.<$> functionMetadata])))
+instance Property "AutoPublish" Function where
+  type PropertyType "AutoPublish" Function = Value Prelude.Bool
+  set newValue Function {..}
+    = Function {autoPublish = Prelude.pure newValue, ..}
+instance Property "FunctionCode" Function where
+  type PropertyType "FunctionCode" Function = Value Prelude.Text
+  set newValue Function {..} = Function {functionCode = newValue, ..}
+instance Property "FunctionConfig" Function where
+  type PropertyType "FunctionConfig" Function = FunctionConfigProperty
+  set newValue Function {..}
+    = Function {functionConfig = newValue, ..}
+instance Property "FunctionMetadata" Function where
+  type PropertyType "FunctionMetadata" Function = FunctionMetadataProperty
+  set newValue Function {..}
+    = Function {functionMetadata = Prelude.pure newValue, ..}
+instance Property "Name" Function where
+  type PropertyType "Name" Function = Value Prelude.Text
+  set newValue Function {..} = Function {name = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Function/FunctionConfigProperty.hs b/gen/Stratosphere/CloudFront/Function/FunctionConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Function/FunctionConfigProperty.hs
@@ -0,0 +1,59 @@
+module Stratosphere.CloudFront.Function.FunctionConfigProperty (
+        module Exports, FunctionConfigProperty(..),
+        mkFunctionConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.Function.KeyValueStoreAssociationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FunctionConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-function-functionconfig.html>
+    FunctionConfigProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-function-functionconfig.html#cfn-cloudfront-function-functionconfig-comment>
+                            comment :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-function-functionconfig.html#cfn-cloudfront-function-functionconfig-keyvaluestoreassociations>
+                            keyValueStoreAssociations :: (Prelude.Maybe [KeyValueStoreAssociationProperty]),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-function-functionconfig.html#cfn-cloudfront-function-functionconfig-runtime>
+                            runtime :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFunctionConfigProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> FunctionConfigProperty
+mkFunctionConfigProperty comment runtime
+  = FunctionConfigProperty
+      {haddock_workaround_ = (), comment = comment, runtime = runtime,
+       keyValueStoreAssociations = Prelude.Nothing}
+instance ToResourceProperties FunctionConfigProperty where
+  toResourceProperties FunctionConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Function.FunctionConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Comment" JSON..= comment, "Runtime" JSON..= runtime]
+                           (Prelude.catMaybes
+                              [(JSON..=) "KeyValueStoreAssociations"
+                                 Prelude.<$> keyValueStoreAssociations]))}
+instance JSON.ToJSON FunctionConfigProperty where
+  toJSON FunctionConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Comment" JSON..= comment, "Runtime" JSON..= runtime]
+              (Prelude.catMaybes
+                 [(JSON..=) "KeyValueStoreAssociations"
+                    Prelude.<$> keyValueStoreAssociations])))
+instance Property "Comment" FunctionConfigProperty where
+  type PropertyType "Comment" FunctionConfigProperty = Value Prelude.Text
+  set newValue FunctionConfigProperty {..}
+    = FunctionConfigProperty {comment = newValue, ..}
+instance Property "KeyValueStoreAssociations" FunctionConfigProperty where
+  type PropertyType "KeyValueStoreAssociations" FunctionConfigProperty = [KeyValueStoreAssociationProperty]
+  set newValue FunctionConfigProperty {..}
+    = FunctionConfigProperty
+        {keyValueStoreAssociations = Prelude.pure newValue, ..}
+instance Property "Runtime" FunctionConfigProperty where
+  type PropertyType "Runtime" FunctionConfigProperty = Value Prelude.Text
+  set newValue FunctionConfigProperty {..}
+    = FunctionConfigProperty {runtime = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Function/FunctionConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/Function/FunctionConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Function/FunctionConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Function.FunctionConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FunctionConfigProperty :: Prelude.Type
+instance ToResourceProperties FunctionConfigProperty
+instance Prelude.Eq FunctionConfigProperty
+instance Prelude.Show FunctionConfigProperty
+instance JSON.ToJSON FunctionConfigProperty
diff --git a/gen/Stratosphere/CloudFront/Function/FunctionMetadataProperty.hs b/gen/Stratosphere/CloudFront/Function/FunctionMetadataProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Function/FunctionMetadataProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.CloudFront.Function.FunctionMetadataProperty (
+        FunctionMetadataProperty(..), mkFunctionMetadataProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FunctionMetadataProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-function-functionmetadata.html>
+    FunctionMetadataProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-function-functionmetadata.html#cfn-cloudfront-function-functionmetadata-functionarn>
+                              functionARN :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFunctionMetadataProperty :: FunctionMetadataProperty
+mkFunctionMetadataProperty
+  = FunctionMetadataProperty
+      {haddock_workaround_ = (), functionARN = Prelude.Nothing}
+instance ToResourceProperties FunctionMetadataProperty where
+  toResourceProperties FunctionMetadataProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Function.FunctionMetadata",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "FunctionARN" Prelude.<$> functionARN])}
+instance JSON.ToJSON FunctionMetadataProperty where
+  toJSON FunctionMetadataProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "FunctionARN" Prelude.<$> functionARN]))
+instance Property "FunctionARN" FunctionMetadataProperty where
+  type PropertyType "FunctionARN" FunctionMetadataProperty = Value Prelude.Text
+  set newValue FunctionMetadataProperty {..}
+    = FunctionMetadataProperty
+        {functionARN = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Function/FunctionMetadataProperty.hs-boot b/gen/Stratosphere/CloudFront/Function/FunctionMetadataProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Function/FunctionMetadataProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Function.FunctionMetadataProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FunctionMetadataProperty :: Prelude.Type
+instance ToResourceProperties FunctionMetadataProperty
+instance Prelude.Eq FunctionMetadataProperty
+instance Prelude.Show FunctionMetadataProperty
+instance JSON.ToJSON FunctionMetadataProperty
diff --git a/gen/Stratosphere/CloudFront/Function/KeyValueStoreAssociationProperty.hs b/gen/Stratosphere/CloudFront/Function/KeyValueStoreAssociationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Function/KeyValueStoreAssociationProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.CloudFront.Function.KeyValueStoreAssociationProperty (
+        KeyValueStoreAssociationProperty(..),
+        mkKeyValueStoreAssociationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KeyValueStoreAssociationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-function-keyvaluestoreassociation.html>
+    KeyValueStoreAssociationProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-function-keyvaluestoreassociation.html#cfn-cloudfront-function-keyvaluestoreassociation-keyvaluestorearn>
+                                      keyValueStoreARN :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKeyValueStoreAssociationProperty ::
+  Value Prelude.Text -> KeyValueStoreAssociationProperty
+mkKeyValueStoreAssociationProperty keyValueStoreARN
+  = KeyValueStoreAssociationProperty
+      {haddock_workaround_ = (), keyValueStoreARN = keyValueStoreARN}
+instance ToResourceProperties KeyValueStoreAssociationProperty where
+  toResourceProperties KeyValueStoreAssociationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::Function.KeyValueStoreAssociation",
+         supportsTags = Prelude.False,
+         properties = ["KeyValueStoreARN" JSON..= keyValueStoreARN]}
+instance JSON.ToJSON KeyValueStoreAssociationProperty where
+  toJSON KeyValueStoreAssociationProperty {..}
+    = JSON.object ["KeyValueStoreARN" JSON..= keyValueStoreARN]
+instance Property "KeyValueStoreARN" KeyValueStoreAssociationProperty where
+  type PropertyType "KeyValueStoreARN" KeyValueStoreAssociationProperty = Value Prelude.Text
+  set newValue KeyValueStoreAssociationProperty {..}
+    = KeyValueStoreAssociationProperty
+        {keyValueStoreARN = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/Function/KeyValueStoreAssociationProperty.hs-boot b/gen/Stratosphere/CloudFront/Function/KeyValueStoreAssociationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/Function/KeyValueStoreAssociationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.Function.KeyValueStoreAssociationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data KeyValueStoreAssociationProperty :: Prelude.Type
+instance ToResourceProperties KeyValueStoreAssociationProperty
+instance Prelude.Eq KeyValueStoreAssociationProperty
+instance Prelude.Show KeyValueStoreAssociationProperty
+instance JSON.ToJSON KeyValueStoreAssociationProperty
diff --git a/gen/Stratosphere/CloudFront/KeyGroup.hs b/gen/Stratosphere/CloudFront/KeyGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/KeyGroup.hs
@@ -0,0 +1,31 @@
+module Stratosphere.CloudFront.KeyGroup (
+        module Exports, KeyGroup(..), mkKeyGroup
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.KeyGroup.KeyGroupConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data KeyGroup
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-keygroup.html>
+    KeyGroup {haddock_workaround_ :: (),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-keygroup.html#cfn-cloudfront-keygroup-keygroupconfig>
+              keyGroupConfig :: KeyGroupConfigProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKeyGroup :: KeyGroupConfigProperty -> KeyGroup
+mkKeyGroup keyGroupConfig
+  = KeyGroup
+      {haddock_workaround_ = (), keyGroupConfig = keyGroupConfig}
+instance ToResourceProperties KeyGroup where
+  toResourceProperties KeyGroup {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::KeyGroup",
+         supportsTags = Prelude.False,
+         properties = ["KeyGroupConfig" JSON..= keyGroupConfig]}
+instance JSON.ToJSON KeyGroup where
+  toJSON KeyGroup {..}
+    = JSON.object ["KeyGroupConfig" JSON..= keyGroupConfig]
+instance Property "KeyGroupConfig" KeyGroup where
+  type PropertyType "KeyGroupConfig" KeyGroup = KeyGroupConfigProperty
+  set newValue KeyGroup {..}
+    = KeyGroup {keyGroupConfig = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/KeyGroup/KeyGroupConfigProperty.hs b/gen/Stratosphere/CloudFront/KeyGroup/KeyGroupConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/KeyGroup/KeyGroupConfigProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.CloudFront.KeyGroup.KeyGroupConfigProperty (
+        KeyGroupConfigProperty(..), mkKeyGroupConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KeyGroupConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-keygroup-keygroupconfig.html>
+    KeyGroupConfigProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-keygroup-keygroupconfig.html#cfn-cloudfront-keygroup-keygroupconfig-comment>
+                            comment :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-keygroup-keygroupconfig.html#cfn-cloudfront-keygroup-keygroupconfig-items>
+                            items :: (ValueList Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-keygroup-keygroupconfig.html#cfn-cloudfront-keygroup-keygroupconfig-name>
+                            name :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKeyGroupConfigProperty ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text -> KeyGroupConfigProperty
+mkKeyGroupConfigProperty items name
+  = KeyGroupConfigProperty
+      {haddock_workaround_ = (), items = items, name = name,
+       comment = Prelude.Nothing}
+instance ToResourceProperties KeyGroupConfigProperty where
+  toResourceProperties KeyGroupConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::KeyGroup.KeyGroupConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Items" JSON..= items, "Name" JSON..= name]
+                           (Prelude.catMaybes [(JSON..=) "Comment" Prelude.<$> comment]))}
+instance JSON.ToJSON KeyGroupConfigProperty where
+  toJSON KeyGroupConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Items" JSON..= items, "Name" JSON..= name]
+              (Prelude.catMaybes [(JSON..=) "Comment" Prelude.<$> comment])))
+instance Property "Comment" KeyGroupConfigProperty where
+  type PropertyType "Comment" KeyGroupConfigProperty = Value Prelude.Text
+  set newValue KeyGroupConfigProperty {..}
+    = KeyGroupConfigProperty {comment = Prelude.pure newValue, ..}
+instance Property "Items" KeyGroupConfigProperty where
+  type PropertyType "Items" KeyGroupConfigProperty = ValueList Prelude.Text
+  set newValue KeyGroupConfigProperty {..}
+    = KeyGroupConfigProperty {items = newValue, ..}
+instance Property "Name" KeyGroupConfigProperty where
+  type PropertyType "Name" KeyGroupConfigProperty = Value Prelude.Text
+  set newValue KeyGroupConfigProperty {..}
+    = KeyGroupConfigProperty {name = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/KeyGroup/KeyGroupConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/KeyGroup/KeyGroupConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/KeyGroup/KeyGroupConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.KeyGroup.KeyGroupConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data KeyGroupConfigProperty :: Prelude.Type
+instance ToResourceProperties KeyGroupConfigProperty
+instance Prelude.Eq KeyGroupConfigProperty
+instance Prelude.Show KeyGroupConfigProperty
+instance JSON.ToJSON KeyGroupConfigProperty
diff --git a/gen/Stratosphere/CloudFront/KeyValueStore.hs b/gen/Stratosphere/CloudFront/KeyValueStore.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/KeyValueStore.hs
@@ -0,0 +1,56 @@
+module Stratosphere.CloudFront.KeyValueStore (
+        module Exports, KeyValueStore(..), mkKeyValueStore
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.KeyValueStore.ImportSourceProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KeyValueStore
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-keyvaluestore.html>
+    KeyValueStore {haddock_workaround_ :: (),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-keyvaluestore.html#cfn-cloudfront-keyvaluestore-comment>
+                   comment :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-keyvaluestore.html#cfn-cloudfront-keyvaluestore-importsource>
+                   importSource :: (Prelude.Maybe ImportSourceProperty),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-keyvaluestore.html#cfn-cloudfront-keyvaluestore-name>
+                   name :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKeyValueStore :: Value Prelude.Text -> KeyValueStore
+mkKeyValueStore name
+  = KeyValueStore
+      {haddock_workaround_ = (), name = name, comment = Prelude.Nothing,
+       importSource = Prelude.Nothing}
+instance ToResourceProperties KeyValueStore where
+  toResourceProperties KeyValueStore {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::KeyValueStore",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Comment" Prelude.<$> comment,
+                               (JSON..=) "ImportSource" Prelude.<$> importSource]))}
+instance JSON.ToJSON KeyValueStore where
+  toJSON KeyValueStore {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "Comment" Prelude.<$> comment,
+                  (JSON..=) "ImportSource" Prelude.<$> importSource])))
+instance Property "Comment" KeyValueStore where
+  type PropertyType "Comment" KeyValueStore = Value Prelude.Text
+  set newValue KeyValueStore {..}
+    = KeyValueStore {comment = Prelude.pure newValue, ..}
+instance Property "ImportSource" KeyValueStore where
+  type PropertyType "ImportSource" KeyValueStore = ImportSourceProperty
+  set newValue KeyValueStore {..}
+    = KeyValueStore {importSource = Prelude.pure newValue, ..}
+instance Property "Name" KeyValueStore where
+  type PropertyType "Name" KeyValueStore = Value Prelude.Text
+  set newValue KeyValueStore {..}
+    = KeyValueStore {name = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/KeyValueStore/ImportSourceProperty.hs b/gen/Stratosphere/CloudFront/KeyValueStore/ImportSourceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/KeyValueStore/ImportSourceProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.CloudFront.KeyValueStore.ImportSourceProperty (
+        ImportSourceProperty(..), mkImportSourceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ImportSourceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-keyvaluestore-importsource.html>
+    ImportSourceProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-keyvaluestore-importsource.html#cfn-cloudfront-keyvaluestore-importsource-sourcearn>
+                          sourceArn :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-keyvaluestore-importsource.html#cfn-cloudfront-keyvaluestore-importsource-sourcetype>
+                          sourceType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkImportSourceProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> ImportSourceProperty
+mkImportSourceProperty sourceArn sourceType
+  = ImportSourceProperty
+      {haddock_workaround_ = (), sourceArn = sourceArn,
+       sourceType = sourceType}
+instance ToResourceProperties ImportSourceProperty where
+  toResourceProperties ImportSourceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::KeyValueStore.ImportSource",
+         supportsTags = Prelude.False,
+         properties = ["SourceArn" JSON..= sourceArn,
+                       "SourceType" JSON..= sourceType]}
+instance JSON.ToJSON ImportSourceProperty where
+  toJSON ImportSourceProperty {..}
+    = JSON.object
+        ["SourceArn" JSON..= sourceArn, "SourceType" JSON..= sourceType]
+instance Property "SourceArn" ImportSourceProperty where
+  type PropertyType "SourceArn" ImportSourceProperty = Value Prelude.Text
+  set newValue ImportSourceProperty {..}
+    = ImportSourceProperty {sourceArn = newValue, ..}
+instance Property "SourceType" ImportSourceProperty where
+  type PropertyType "SourceType" ImportSourceProperty = Value Prelude.Text
+  set newValue ImportSourceProperty {..}
+    = ImportSourceProperty {sourceType = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/KeyValueStore/ImportSourceProperty.hs-boot b/gen/Stratosphere/CloudFront/KeyValueStore/ImportSourceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/KeyValueStore/ImportSourceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.KeyValueStore.ImportSourceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ImportSourceProperty :: Prelude.Type
+instance ToResourceProperties ImportSourceProperty
+instance Prelude.Eq ImportSourceProperty
+instance Prelude.Show ImportSourceProperty
+instance JSON.ToJSON ImportSourceProperty
diff --git a/gen/Stratosphere/CloudFront/MonitoringSubscription.hs b/gen/Stratosphere/CloudFront/MonitoringSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/MonitoringSubscription.hs
@@ -0,0 +1,45 @@
+module Stratosphere.CloudFront.MonitoringSubscription (
+        module Exports, MonitoringSubscription(..),
+        mkMonitoringSubscription
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.MonitoringSubscription.MonitoringSubscriptionProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MonitoringSubscription
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-monitoringsubscription.html>
+    MonitoringSubscription {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-monitoringsubscription.html#cfn-cloudfront-monitoringsubscription-distributionid>
+                            distributionId :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-monitoringsubscription.html#cfn-cloudfront-monitoringsubscription-monitoringsubscription>
+                            monitoringSubscription :: MonitoringSubscriptionProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMonitoringSubscription ::
+  Value Prelude.Text
+  -> MonitoringSubscriptionProperty -> MonitoringSubscription
+mkMonitoringSubscription distributionId monitoringSubscription
+  = MonitoringSubscription
+      {haddock_workaround_ = (), distributionId = distributionId,
+       monitoringSubscription = monitoringSubscription}
+instance ToResourceProperties MonitoringSubscription where
+  toResourceProperties MonitoringSubscription {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::MonitoringSubscription",
+         supportsTags = Prelude.False,
+         properties = ["DistributionId" JSON..= distributionId,
+                       "MonitoringSubscription" JSON..= monitoringSubscription]}
+instance JSON.ToJSON MonitoringSubscription where
+  toJSON MonitoringSubscription {..}
+    = JSON.object
+        ["DistributionId" JSON..= distributionId,
+         "MonitoringSubscription" JSON..= monitoringSubscription]
+instance Property "DistributionId" MonitoringSubscription where
+  type PropertyType "DistributionId" MonitoringSubscription = Value Prelude.Text
+  set newValue MonitoringSubscription {..}
+    = MonitoringSubscription {distributionId = newValue, ..}
+instance Property "MonitoringSubscription" MonitoringSubscription where
+  type PropertyType "MonitoringSubscription" MonitoringSubscription = MonitoringSubscriptionProperty
+  set newValue MonitoringSubscription {..}
+    = MonitoringSubscription {monitoringSubscription = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/MonitoringSubscription/MonitoringSubscriptionProperty.hs b/gen/Stratosphere/CloudFront/MonitoringSubscription/MonitoringSubscriptionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/MonitoringSubscription/MonitoringSubscriptionProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.CloudFront.MonitoringSubscription.MonitoringSubscriptionProperty (
+        module Exports, MonitoringSubscriptionProperty(..),
+        mkMonitoringSubscriptionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.MonitoringSubscription.RealtimeMetricsSubscriptionConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data MonitoringSubscriptionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-monitoringsubscription-monitoringsubscription.html>
+    MonitoringSubscriptionProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-monitoringsubscription-monitoringsubscription.html#cfn-cloudfront-monitoringsubscription-monitoringsubscription-realtimemetricssubscriptionconfig>
+                                    realtimeMetricsSubscriptionConfig :: (Prelude.Maybe RealtimeMetricsSubscriptionConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMonitoringSubscriptionProperty :: MonitoringSubscriptionProperty
+mkMonitoringSubscriptionProperty
+  = MonitoringSubscriptionProperty
+      {haddock_workaround_ = (),
+       realtimeMetricsSubscriptionConfig = Prelude.Nothing}
+instance ToResourceProperties MonitoringSubscriptionProperty where
+  toResourceProperties MonitoringSubscriptionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::MonitoringSubscription.MonitoringSubscription",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "RealtimeMetricsSubscriptionConfig"
+                              Prelude.<$> realtimeMetricsSubscriptionConfig])}
+instance JSON.ToJSON MonitoringSubscriptionProperty where
+  toJSON MonitoringSubscriptionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "RealtimeMetricsSubscriptionConfig"
+                 Prelude.<$> realtimeMetricsSubscriptionConfig]))
+instance Property "RealtimeMetricsSubscriptionConfig" MonitoringSubscriptionProperty where
+  type PropertyType "RealtimeMetricsSubscriptionConfig" MonitoringSubscriptionProperty = RealtimeMetricsSubscriptionConfigProperty
+  set newValue MonitoringSubscriptionProperty {..}
+    = MonitoringSubscriptionProperty
+        {realtimeMetricsSubscriptionConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/MonitoringSubscription/MonitoringSubscriptionProperty.hs-boot b/gen/Stratosphere/CloudFront/MonitoringSubscription/MonitoringSubscriptionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/MonitoringSubscription/MonitoringSubscriptionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.MonitoringSubscription.MonitoringSubscriptionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MonitoringSubscriptionProperty :: Prelude.Type
+instance ToResourceProperties MonitoringSubscriptionProperty
+instance Prelude.Eq MonitoringSubscriptionProperty
+instance Prelude.Show MonitoringSubscriptionProperty
+instance JSON.ToJSON MonitoringSubscriptionProperty
diff --git a/gen/Stratosphere/CloudFront/MonitoringSubscription/RealtimeMetricsSubscriptionConfigProperty.hs b/gen/Stratosphere/CloudFront/MonitoringSubscription/RealtimeMetricsSubscriptionConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/MonitoringSubscription/RealtimeMetricsSubscriptionConfigProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.CloudFront.MonitoringSubscription.RealtimeMetricsSubscriptionConfigProperty (
+        RealtimeMetricsSubscriptionConfigProperty(..),
+        mkRealtimeMetricsSubscriptionConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RealtimeMetricsSubscriptionConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-monitoringsubscription-realtimemetricssubscriptionconfig.html>
+    RealtimeMetricsSubscriptionConfigProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-monitoringsubscription-realtimemetricssubscriptionconfig.html#cfn-cloudfront-monitoringsubscription-realtimemetricssubscriptionconfig-realtimemetricssubscriptionstatus>
+                                               realtimeMetricsSubscriptionStatus :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRealtimeMetricsSubscriptionConfigProperty ::
+  Value Prelude.Text -> RealtimeMetricsSubscriptionConfigProperty
+mkRealtimeMetricsSubscriptionConfigProperty
+  realtimeMetricsSubscriptionStatus
+  = RealtimeMetricsSubscriptionConfigProperty
+      {haddock_workaround_ = (),
+       realtimeMetricsSubscriptionStatus = realtimeMetricsSubscriptionStatus}
+instance ToResourceProperties RealtimeMetricsSubscriptionConfigProperty where
+  toResourceProperties RealtimeMetricsSubscriptionConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::MonitoringSubscription.RealtimeMetricsSubscriptionConfig",
+         supportsTags = Prelude.False,
+         properties = ["RealtimeMetricsSubscriptionStatus"
+                         JSON..= realtimeMetricsSubscriptionStatus]}
+instance JSON.ToJSON RealtimeMetricsSubscriptionConfigProperty where
+  toJSON RealtimeMetricsSubscriptionConfigProperty {..}
+    = JSON.object
+        ["RealtimeMetricsSubscriptionStatus"
+           JSON..= realtimeMetricsSubscriptionStatus]
+instance Property "RealtimeMetricsSubscriptionStatus" RealtimeMetricsSubscriptionConfigProperty where
+  type PropertyType "RealtimeMetricsSubscriptionStatus" RealtimeMetricsSubscriptionConfigProperty = Value Prelude.Text
+  set newValue RealtimeMetricsSubscriptionConfigProperty {..}
+    = RealtimeMetricsSubscriptionConfigProperty
+        {realtimeMetricsSubscriptionStatus = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/MonitoringSubscription/RealtimeMetricsSubscriptionConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/MonitoringSubscription/RealtimeMetricsSubscriptionConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/MonitoringSubscription/RealtimeMetricsSubscriptionConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.MonitoringSubscription.RealtimeMetricsSubscriptionConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RealtimeMetricsSubscriptionConfigProperty :: Prelude.Type
+instance ToResourceProperties RealtimeMetricsSubscriptionConfigProperty
+instance Prelude.Eq RealtimeMetricsSubscriptionConfigProperty
+instance Prelude.Show RealtimeMetricsSubscriptionConfigProperty
+instance JSON.ToJSON RealtimeMetricsSubscriptionConfigProperty
diff --git a/gen/Stratosphere/CloudFront/OriginAccessControl.hs b/gen/Stratosphere/CloudFront/OriginAccessControl.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/OriginAccessControl.hs
@@ -0,0 +1,35 @@
+module Stratosphere.CloudFront.OriginAccessControl (
+        module Exports, OriginAccessControl(..), mkOriginAccessControl
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.OriginAccessControl.OriginAccessControlConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data OriginAccessControl
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-originaccesscontrol.html>
+    OriginAccessControl {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-originaccesscontrol.html#cfn-cloudfront-originaccesscontrol-originaccesscontrolconfig>
+                         originAccessControlConfig :: OriginAccessControlConfigProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOriginAccessControl ::
+  OriginAccessControlConfigProperty -> OriginAccessControl
+mkOriginAccessControl originAccessControlConfig
+  = OriginAccessControl
+      {haddock_workaround_ = (),
+       originAccessControlConfig = originAccessControlConfig}
+instance ToResourceProperties OriginAccessControl where
+  toResourceProperties OriginAccessControl {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::OriginAccessControl",
+         supportsTags = Prelude.False,
+         properties = ["OriginAccessControlConfig"
+                         JSON..= originAccessControlConfig]}
+instance JSON.ToJSON OriginAccessControl where
+  toJSON OriginAccessControl {..}
+    = JSON.object
+        ["OriginAccessControlConfig" JSON..= originAccessControlConfig]
+instance Property "OriginAccessControlConfig" OriginAccessControl where
+  type PropertyType "OriginAccessControlConfig" OriginAccessControl = OriginAccessControlConfigProperty
+  set newValue OriginAccessControl {..}
+    = OriginAccessControl {originAccessControlConfig = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/OriginAccessControl/OriginAccessControlConfigProperty.hs b/gen/Stratosphere/CloudFront/OriginAccessControl/OriginAccessControlConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/OriginAccessControl/OriginAccessControlConfigProperty.hs
@@ -0,0 +1,88 @@
+module Stratosphere.CloudFront.OriginAccessControl.OriginAccessControlConfigProperty (
+        OriginAccessControlConfigProperty(..),
+        mkOriginAccessControlConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OriginAccessControlConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originaccesscontrol-originaccesscontrolconfig.html>
+    OriginAccessControlConfigProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originaccesscontrol-originaccesscontrolconfig.html#cfn-cloudfront-originaccesscontrol-originaccesscontrolconfig-description>
+                                       description :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originaccesscontrol-originaccesscontrolconfig.html#cfn-cloudfront-originaccesscontrol-originaccesscontrolconfig-name>
+                                       name :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originaccesscontrol-originaccesscontrolconfig.html#cfn-cloudfront-originaccesscontrol-originaccesscontrolconfig-originaccesscontrolorigintype>
+                                       originAccessControlOriginType :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originaccesscontrol-originaccesscontrolconfig.html#cfn-cloudfront-originaccesscontrol-originaccesscontrolconfig-signingbehavior>
+                                       signingBehavior :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originaccesscontrol-originaccesscontrolconfig.html#cfn-cloudfront-originaccesscontrol-originaccesscontrolconfig-signingprotocol>
+                                       signingProtocol :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOriginAccessControlConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text
+        -> Value Prelude.Text -> OriginAccessControlConfigProperty
+mkOriginAccessControlConfigProperty
+  name
+  originAccessControlOriginType
+  signingBehavior
+  signingProtocol
+  = OriginAccessControlConfigProperty
+      {haddock_workaround_ = (), name = name,
+       originAccessControlOriginType = originAccessControlOriginType,
+       signingBehavior = signingBehavior,
+       signingProtocol = signingProtocol, description = Prelude.Nothing}
+instance ToResourceProperties OriginAccessControlConfigProperty where
+  toResourceProperties OriginAccessControlConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::OriginAccessControl.OriginAccessControlConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Name" JSON..= name,
+                            "OriginAccessControlOriginType"
+                              JSON..= originAccessControlOriginType,
+                            "SigningBehavior" JSON..= signingBehavior,
+                            "SigningProtocol" JSON..= signingProtocol]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description]))}
+instance JSON.ToJSON OriginAccessControlConfigProperty where
+  toJSON OriginAccessControlConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Name" JSON..= name,
+               "OriginAccessControlOriginType"
+                 JSON..= originAccessControlOriginType,
+               "SigningBehavior" JSON..= signingBehavior,
+               "SigningProtocol" JSON..= signingProtocol]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description])))
+instance Property "Description" OriginAccessControlConfigProperty where
+  type PropertyType "Description" OriginAccessControlConfigProperty = Value Prelude.Text
+  set newValue OriginAccessControlConfigProperty {..}
+    = OriginAccessControlConfigProperty
+        {description = Prelude.pure newValue, ..}
+instance Property "Name" OriginAccessControlConfigProperty where
+  type PropertyType "Name" OriginAccessControlConfigProperty = Value Prelude.Text
+  set newValue OriginAccessControlConfigProperty {..}
+    = OriginAccessControlConfigProperty {name = newValue, ..}
+instance Property "OriginAccessControlOriginType" OriginAccessControlConfigProperty where
+  type PropertyType "OriginAccessControlOriginType" OriginAccessControlConfigProperty = Value Prelude.Text
+  set newValue OriginAccessControlConfigProperty {..}
+    = OriginAccessControlConfigProperty
+        {originAccessControlOriginType = newValue, ..}
+instance Property "SigningBehavior" OriginAccessControlConfigProperty where
+  type PropertyType "SigningBehavior" OriginAccessControlConfigProperty = Value Prelude.Text
+  set newValue OriginAccessControlConfigProperty {..}
+    = OriginAccessControlConfigProperty
+        {signingBehavior = newValue, ..}
+instance Property "SigningProtocol" OriginAccessControlConfigProperty where
+  type PropertyType "SigningProtocol" OriginAccessControlConfigProperty = Value Prelude.Text
+  set newValue OriginAccessControlConfigProperty {..}
+    = OriginAccessControlConfigProperty
+        {signingProtocol = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/OriginAccessControl/OriginAccessControlConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/OriginAccessControl/OriginAccessControlConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/OriginAccessControl/OriginAccessControlConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.OriginAccessControl.OriginAccessControlConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OriginAccessControlConfigProperty :: Prelude.Type
+instance ToResourceProperties OriginAccessControlConfigProperty
+instance Prelude.Eq OriginAccessControlConfigProperty
+instance Prelude.Show OriginAccessControlConfigProperty
+instance JSON.ToJSON OriginAccessControlConfigProperty
diff --git a/gen/Stratosphere/CloudFront/OriginRequestPolicy.hs b/gen/Stratosphere/CloudFront/OriginRequestPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/OriginRequestPolicy.hs
@@ -0,0 +1,35 @@
+module Stratosphere.CloudFront.OriginRequestPolicy (
+        module Exports, OriginRequestPolicy(..), mkOriginRequestPolicy
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.OriginRequestPolicy.OriginRequestPolicyConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data OriginRequestPolicy
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-originrequestpolicy.html>
+    OriginRequestPolicy {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-originrequestpolicy.html#cfn-cloudfront-originrequestpolicy-originrequestpolicyconfig>
+                         originRequestPolicyConfig :: OriginRequestPolicyConfigProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOriginRequestPolicy ::
+  OriginRequestPolicyConfigProperty -> OriginRequestPolicy
+mkOriginRequestPolicy originRequestPolicyConfig
+  = OriginRequestPolicy
+      {haddock_workaround_ = (),
+       originRequestPolicyConfig = originRequestPolicyConfig}
+instance ToResourceProperties OriginRequestPolicy where
+  toResourceProperties OriginRequestPolicy {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::OriginRequestPolicy",
+         supportsTags = Prelude.False,
+         properties = ["OriginRequestPolicyConfig"
+                         JSON..= originRequestPolicyConfig]}
+instance JSON.ToJSON OriginRequestPolicy where
+  toJSON OriginRequestPolicy {..}
+    = JSON.object
+        ["OriginRequestPolicyConfig" JSON..= originRequestPolicyConfig]
+instance Property "OriginRequestPolicyConfig" OriginRequestPolicy where
+  type PropertyType "OriginRequestPolicyConfig" OriginRequestPolicy = OriginRequestPolicyConfigProperty
+  set newValue OriginRequestPolicy {..}
+    = OriginRequestPolicy {originRequestPolicyConfig = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/OriginRequestPolicy/CookiesConfigProperty.hs b/gen/Stratosphere/CloudFront/OriginRequestPolicy/CookiesConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/OriginRequestPolicy/CookiesConfigProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.CloudFront.OriginRequestPolicy.CookiesConfigProperty (
+        CookiesConfigProperty(..), mkCookiesConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CookiesConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originrequestpolicy-cookiesconfig.html>
+    CookiesConfigProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originrequestpolicy-cookiesconfig.html#cfn-cloudfront-originrequestpolicy-cookiesconfig-cookiebehavior>
+                           cookieBehavior :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originrequestpolicy-cookiesconfig.html#cfn-cloudfront-originrequestpolicy-cookiesconfig-cookies>
+                           cookies :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCookiesConfigProperty ::
+  Value Prelude.Text -> CookiesConfigProperty
+mkCookiesConfigProperty cookieBehavior
+  = CookiesConfigProperty
+      {haddock_workaround_ = (), cookieBehavior = cookieBehavior,
+       cookies = Prelude.Nothing}
+instance ToResourceProperties CookiesConfigProperty where
+  toResourceProperties CookiesConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::OriginRequestPolicy.CookiesConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["CookieBehavior" JSON..= cookieBehavior]
+                           (Prelude.catMaybes [(JSON..=) "Cookies" Prelude.<$> cookies]))}
+instance JSON.ToJSON CookiesConfigProperty where
+  toJSON CookiesConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["CookieBehavior" JSON..= cookieBehavior]
+              (Prelude.catMaybes [(JSON..=) "Cookies" Prelude.<$> cookies])))
+instance Property "CookieBehavior" CookiesConfigProperty where
+  type PropertyType "CookieBehavior" CookiesConfigProperty = Value Prelude.Text
+  set newValue CookiesConfigProperty {..}
+    = CookiesConfigProperty {cookieBehavior = newValue, ..}
+instance Property "Cookies" CookiesConfigProperty where
+  type PropertyType "Cookies" CookiesConfigProperty = ValueList Prelude.Text
+  set newValue CookiesConfigProperty {..}
+    = CookiesConfigProperty {cookies = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/OriginRequestPolicy/CookiesConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/OriginRequestPolicy/CookiesConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/OriginRequestPolicy/CookiesConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.OriginRequestPolicy.CookiesConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CookiesConfigProperty :: Prelude.Type
+instance ToResourceProperties CookiesConfigProperty
+instance Prelude.Eq CookiesConfigProperty
+instance Prelude.Show CookiesConfigProperty
+instance JSON.ToJSON CookiesConfigProperty
diff --git a/gen/Stratosphere/CloudFront/OriginRequestPolicy/HeadersConfigProperty.hs b/gen/Stratosphere/CloudFront/OriginRequestPolicy/HeadersConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/OriginRequestPolicy/HeadersConfigProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.CloudFront.OriginRequestPolicy.HeadersConfigProperty (
+        HeadersConfigProperty(..), mkHeadersConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data HeadersConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originrequestpolicy-headersconfig.html>
+    HeadersConfigProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originrequestpolicy-headersconfig.html#cfn-cloudfront-originrequestpolicy-headersconfig-headerbehavior>
+                           headerBehavior :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originrequestpolicy-headersconfig.html#cfn-cloudfront-originrequestpolicy-headersconfig-headers>
+                           headers :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHeadersConfigProperty ::
+  Value Prelude.Text -> HeadersConfigProperty
+mkHeadersConfigProperty headerBehavior
+  = HeadersConfigProperty
+      {haddock_workaround_ = (), headerBehavior = headerBehavior,
+       headers = Prelude.Nothing}
+instance ToResourceProperties HeadersConfigProperty where
+  toResourceProperties HeadersConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::OriginRequestPolicy.HeadersConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["HeaderBehavior" JSON..= headerBehavior]
+                           (Prelude.catMaybes [(JSON..=) "Headers" Prelude.<$> headers]))}
+instance JSON.ToJSON HeadersConfigProperty where
+  toJSON HeadersConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["HeaderBehavior" JSON..= headerBehavior]
+              (Prelude.catMaybes [(JSON..=) "Headers" Prelude.<$> headers])))
+instance Property "HeaderBehavior" HeadersConfigProperty where
+  type PropertyType "HeaderBehavior" HeadersConfigProperty = Value Prelude.Text
+  set newValue HeadersConfigProperty {..}
+    = HeadersConfigProperty {headerBehavior = newValue, ..}
+instance Property "Headers" HeadersConfigProperty where
+  type PropertyType "Headers" HeadersConfigProperty = ValueList Prelude.Text
+  set newValue HeadersConfigProperty {..}
+    = HeadersConfigProperty {headers = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/OriginRequestPolicy/HeadersConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/OriginRequestPolicy/HeadersConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/OriginRequestPolicy/HeadersConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.OriginRequestPolicy.HeadersConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HeadersConfigProperty :: Prelude.Type
+instance ToResourceProperties HeadersConfigProperty
+instance Prelude.Eq HeadersConfigProperty
+instance Prelude.Show HeadersConfigProperty
+instance JSON.ToJSON HeadersConfigProperty
diff --git a/gen/Stratosphere/CloudFront/OriginRequestPolicy/OriginRequestPolicyConfigProperty.hs b/gen/Stratosphere/CloudFront/OriginRequestPolicy/OriginRequestPolicyConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/OriginRequestPolicy/OriginRequestPolicyConfigProperty.hs
@@ -0,0 +1,82 @@
+module Stratosphere.CloudFront.OriginRequestPolicy.OriginRequestPolicyConfigProperty (
+        module Exports, OriginRequestPolicyConfigProperty(..),
+        mkOriginRequestPolicyConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.OriginRequestPolicy.CookiesConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.OriginRequestPolicy.HeadersConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.OriginRequestPolicy.QueryStringsConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OriginRequestPolicyConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originrequestpolicy-originrequestpolicyconfig.html>
+    OriginRequestPolicyConfigProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originrequestpolicy-originrequestpolicyconfig.html#cfn-cloudfront-originrequestpolicy-originrequestpolicyconfig-comment>
+                                       comment :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originrequestpolicy-originrequestpolicyconfig.html#cfn-cloudfront-originrequestpolicy-originrequestpolicyconfig-cookiesconfig>
+                                       cookiesConfig :: CookiesConfigProperty,
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originrequestpolicy-originrequestpolicyconfig.html#cfn-cloudfront-originrequestpolicy-originrequestpolicyconfig-headersconfig>
+                                       headersConfig :: HeadersConfigProperty,
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originrequestpolicy-originrequestpolicyconfig.html#cfn-cloudfront-originrequestpolicy-originrequestpolicyconfig-name>
+                                       name :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originrequestpolicy-originrequestpolicyconfig.html#cfn-cloudfront-originrequestpolicy-originrequestpolicyconfig-querystringsconfig>
+                                       queryStringsConfig :: QueryStringsConfigProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOriginRequestPolicyConfigProperty ::
+  CookiesConfigProperty
+  -> HeadersConfigProperty
+     -> Value Prelude.Text
+        -> QueryStringsConfigProperty -> OriginRequestPolicyConfigProperty
+mkOriginRequestPolicyConfigProperty
+  cookiesConfig
+  headersConfig
+  name
+  queryStringsConfig
+  = OriginRequestPolicyConfigProperty
+      {haddock_workaround_ = (), cookiesConfig = cookiesConfig,
+       headersConfig = headersConfig, name = name,
+       queryStringsConfig = queryStringsConfig, comment = Prelude.Nothing}
+instance ToResourceProperties OriginRequestPolicyConfigProperty where
+  toResourceProperties OriginRequestPolicyConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::OriginRequestPolicy.OriginRequestPolicyConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["CookiesConfig" JSON..= cookiesConfig,
+                            "HeadersConfig" JSON..= headersConfig, "Name" JSON..= name,
+                            "QueryStringsConfig" JSON..= queryStringsConfig]
+                           (Prelude.catMaybes [(JSON..=) "Comment" Prelude.<$> comment]))}
+instance JSON.ToJSON OriginRequestPolicyConfigProperty where
+  toJSON OriginRequestPolicyConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["CookiesConfig" JSON..= cookiesConfig,
+               "HeadersConfig" JSON..= headersConfig, "Name" JSON..= name,
+               "QueryStringsConfig" JSON..= queryStringsConfig]
+              (Prelude.catMaybes [(JSON..=) "Comment" Prelude.<$> comment])))
+instance Property "Comment" OriginRequestPolicyConfigProperty where
+  type PropertyType "Comment" OriginRequestPolicyConfigProperty = Value Prelude.Text
+  set newValue OriginRequestPolicyConfigProperty {..}
+    = OriginRequestPolicyConfigProperty
+        {comment = Prelude.pure newValue, ..}
+instance Property "CookiesConfig" OriginRequestPolicyConfigProperty where
+  type PropertyType "CookiesConfig" OriginRequestPolicyConfigProperty = CookiesConfigProperty
+  set newValue OriginRequestPolicyConfigProperty {..}
+    = OriginRequestPolicyConfigProperty {cookiesConfig = newValue, ..}
+instance Property "HeadersConfig" OriginRequestPolicyConfigProperty where
+  type PropertyType "HeadersConfig" OriginRequestPolicyConfigProperty = HeadersConfigProperty
+  set newValue OriginRequestPolicyConfigProperty {..}
+    = OriginRequestPolicyConfigProperty {headersConfig = newValue, ..}
+instance Property "Name" OriginRequestPolicyConfigProperty where
+  type PropertyType "Name" OriginRequestPolicyConfigProperty = Value Prelude.Text
+  set newValue OriginRequestPolicyConfigProperty {..}
+    = OriginRequestPolicyConfigProperty {name = newValue, ..}
+instance Property "QueryStringsConfig" OriginRequestPolicyConfigProperty where
+  type PropertyType "QueryStringsConfig" OriginRequestPolicyConfigProperty = QueryStringsConfigProperty
+  set newValue OriginRequestPolicyConfigProperty {..}
+    = OriginRequestPolicyConfigProperty
+        {queryStringsConfig = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/OriginRequestPolicy/OriginRequestPolicyConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/OriginRequestPolicy/OriginRequestPolicyConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/OriginRequestPolicy/OriginRequestPolicyConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.OriginRequestPolicy.OriginRequestPolicyConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OriginRequestPolicyConfigProperty :: Prelude.Type
+instance ToResourceProperties OriginRequestPolicyConfigProperty
+instance Prelude.Eq OriginRequestPolicyConfigProperty
+instance Prelude.Show OriginRequestPolicyConfigProperty
+instance JSON.ToJSON OriginRequestPolicyConfigProperty
diff --git a/gen/Stratosphere/CloudFront/OriginRequestPolicy/QueryStringsConfigProperty.hs b/gen/Stratosphere/CloudFront/OriginRequestPolicy/QueryStringsConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/OriginRequestPolicy/QueryStringsConfigProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.CloudFront.OriginRequestPolicy.QueryStringsConfigProperty (
+        QueryStringsConfigProperty(..), mkQueryStringsConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data QueryStringsConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originrequestpolicy-querystringsconfig.html>
+    QueryStringsConfigProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originrequestpolicy-querystringsconfig.html#cfn-cloudfront-originrequestpolicy-querystringsconfig-querystringbehavior>
+                                queryStringBehavior :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-originrequestpolicy-querystringsconfig.html#cfn-cloudfront-originrequestpolicy-querystringsconfig-querystrings>
+                                queryStrings :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkQueryStringsConfigProperty ::
+  Value Prelude.Text -> QueryStringsConfigProperty
+mkQueryStringsConfigProperty queryStringBehavior
+  = QueryStringsConfigProperty
+      {haddock_workaround_ = (),
+       queryStringBehavior = queryStringBehavior,
+       queryStrings = Prelude.Nothing}
+instance ToResourceProperties QueryStringsConfigProperty where
+  toResourceProperties QueryStringsConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::OriginRequestPolicy.QueryStringsConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["QueryStringBehavior" JSON..= queryStringBehavior]
+                           (Prelude.catMaybes
+                              [(JSON..=) "QueryStrings" Prelude.<$> queryStrings]))}
+instance JSON.ToJSON QueryStringsConfigProperty where
+  toJSON QueryStringsConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["QueryStringBehavior" JSON..= queryStringBehavior]
+              (Prelude.catMaybes
+                 [(JSON..=) "QueryStrings" Prelude.<$> queryStrings])))
+instance Property "QueryStringBehavior" QueryStringsConfigProperty where
+  type PropertyType "QueryStringBehavior" QueryStringsConfigProperty = Value Prelude.Text
+  set newValue QueryStringsConfigProperty {..}
+    = QueryStringsConfigProperty {queryStringBehavior = newValue, ..}
+instance Property "QueryStrings" QueryStringsConfigProperty where
+  type PropertyType "QueryStrings" QueryStringsConfigProperty = ValueList Prelude.Text
+  set newValue QueryStringsConfigProperty {..}
+    = QueryStringsConfigProperty
+        {queryStrings = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/OriginRequestPolicy/QueryStringsConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/OriginRequestPolicy/QueryStringsConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/OriginRequestPolicy/QueryStringsConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.OriginRequestPolicy.QueryStringsConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data QueryStringsConfigProperty :: Prelude.Type
+instance ToResourceProperties QueryStringsConfigProperty
+instance Prelude.Eq QueryStringsConfigProperty
+instance Prelude.Show QueryStringsConfigProperty
+instance JSON.ToJSON QueryStringsConfigProperty
diff --git a/gen/Stratosphere/CloudFront/PublicKey.hs b/gen/Stratosphere/CloudFront/PublicKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/PublicKey.hs
@@ -0,0 +1,31 @@
+module Stratosphere.CloudFront.PublicKey (
+        module Exports, PublicKey(..), mkPublicKey
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.PublicKey.PublicKeyConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data PublicKey
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-publickey.html>
+    PublicKey {haddock_workaround_ :: (),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-publickey.html#cfn-cloudfront-publickey-publickeyconfig>
+               publicKeyConfig :: PublicKeyConfigProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPublicKey :: PublicKeyConfigProperty -> PublicKey
+mkPublicKey publicKeyConfig
+  = PublicKey
+      {haddock_workaround_ = (), publicKeyConfig = publicKeyConfig}
+instance ToResourceProperties PublicKey where
+  toResourceProperties PublicKey {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::PublicKey",
+         supportsTags = Prelude.False,
+         properties = ["PublicKeyConfig" JSON..= publicKeyConfig]}
+instance JSON.ToJSON PublicKey where
+  toJSON PublicKey {..}
+    = JSON.object ["PublicKeyConfig" JSON..= publicKeyConfig]
+instance Property "PublicKeyConfig" PublicKey where
+  type PropertyType "PublicKeyConfig" PublicKey = PublicKeyConfigProperty
+  set newValue PublicKey {..}
+    = PublicKey {publicKeyConfig = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/PublicKey/PublicKeyConfigProperty.hs b/gen/Stratosphere/CloudFront/PublicKey/PublicKeyConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/PublicKey/PublicKeyConfigProperty.hs
@@ -0,0 +1,62 @@
+module Stratosphere.CloudFront.PublicKey.PublicKeyConfigProperty (
+        PublicKeyConfigProperty(..), mkPublicKeyConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PublicKeyConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-publickey-publickeyconfig.html>
+    PublicKeyConfigProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-publickey-publickeyconfig.html#cfn-cloudfront-publickey-publickeyconfig-callerreference>
+                             callerReference :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-publickey-publickeyconfig.html#cfn-cloudfront-publickey-publickeyconfig-comment>
+                             comment :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-publickey-publickeyconfig.html#cfn-cloudfront-publickey-publickeyconfig-encodedkey>
+                             encodedKey :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-publickey-publickeyconfig.html#cfn-cloudfront-publickey-publickeyconfig-name>
+                             name :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPublicKeyConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> PublicKeyConfigProperty
+mkPublicKeyConfigProperty callerReference encodedKey name
+  = PublicKeyConfigProperty
+      {haddock_workaround_ = (), callerReference = callerReference,
+       encodedKey = encodedKey, name = name, comment = Prelude.Nothing}
+instance ToResourceProperties PublicKeyConfigProperty where
+  toResourceProperties PublicKeyConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::PublicKey.PublicKeyConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["CallerReference" JSON..= callerReference,
+                            "EncodedKey" JSON..= encodedKey, "Name" JSON..= name]
+                           (Prelude.catMaybes [(JSON..=) "Comment" Prelude.<$> comment]))}
+instance JSON.ToJSON PublicKeyConfigProperty where
+  toJSON PublicKeyConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["CallerReference" JSON..= callerReference,
+               "EncodedKey" JSON..= encodedKey, "Name" JSON..= name]
+              (Prelude.catMaybes [(JSON..=) "Comment" Prelude.<$> comment])))
+instance Property "CallerReference" PublicKeyConfigProperty where
+  type PropertyType "CallerReference" PublicKeyConfigProperty = Value Prelude.Text
+  set newValue PublicKeyConfigProperty {..}
+    = PublicKeyConfigProperty {callerReference = newValue, ..}
+instance Property "Comment" PublicKeyConfigProperty where
+  type PropertyType "Comment" PublicKeyConfigProperty = Value Prelude.Text
+  set newValue PublicKeyConfigProperty {..}
+    = PublicKeyConfigProperty {comment = Prelude.pure newValue, ..}
+instance Property "EncodedKey" PublicKeyConfigProperty where
+  type PropertyType "EncodedKey" PublicKeyConfigProperty = Value Prelude.Text
+  set newValue PublicKeyConfigProperty {..}
+    = PublicKeyConfigProperty {encodedKey = newValue, ..}
+instance Property "Name" PublicKeyConfigProperty where
+  type PropertyType "Name" PublicKeyConfigProperty = Value Prelude.Text
+  set newValue PublicKeyConfigProperty {..}
+    = PublicKeyConfigProperty {name = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/PublicKey/PublicKeyConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/PublicKey/PublicKeyConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/PublicKey/PublicKeyConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.PublicKey.PublicKeyConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PublicKeyConfigProperty :: Prelude.Type
+instance ToResourceProperties PublicKeyConfigProperty
+instance Prelude.Eq PublicKeyConfigProperty
+instance Prelude.Show PublicKeyConfigProperty
+instance JSON.ToJSON PublicKeyConfigProperty
diff --git a/gen/Stratosphere/CloudFront/RealtimeLogConfig.hs b/gen/Stratosphere/CloudFront/RealtimeLogConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/RealtimeLogConfig.hs
@@ -0,0 +1,58 @@
+module Stratosphere.CloudFront.RealtimeLogConfig (
+        module Exports, RealtimeLogConfig(..), mkRealtimeLogConfig
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.RealtimeLogConfig.EndPointProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RealtimeLogConfig
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-realtimelogconfig.html>
+    RealtimeLogConfig {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-realtimelogconfig.html#cfn-cloudfront-realtimelogconfig-endpoints>
+                       endPoints :: [EndPointProperty],
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-realtimelogconfig.html#cfn-cloudfront-realtimelogconfig-fields>
+                       fields :: (ValueList Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-realtimelogconfig.html#cfn-cloudfront-realtimelogconfig-name>
+                       name :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-realtimelogconfig.html#cfn-cloudfront-realtimelogconfig-samplingrate>
+                       samplingRate :: (Value Prelude.Double)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRealtimeLogConfig ::
+  [EndPointProperty]
+  -> ValueList Prelude.Text
+     -> Value Prelude.Text -> Value Prelude.Double -> RealtimeLogConfig
+mkRealtimeLogConfig endPoints fields name samplingRate
+  = RealtimeLogConfig
+      {haddock_workaround_ = (), endPoints = endPoints, fields = fields,
+       name = name, samplingRate = samplingRate}
+instance ToResourceProperties RealtimeLogConfig where
+  toResourceProperties RealtimeLogConfig {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::RealtimeLogConfig",
+         supportsTags = Prelude.False,
+         properties = ["EndPoints" JSON..= endPoints,
+                       "Fields" JSON..= fields, "Name" JSON..= name,
+                       "SamplingRate" JSON..= samplingRate]}
+instance JSON.ToJSON RealtimeLogConfig where
+  toJSON RealtimeLogConfig {..}
+    = JSON.object
+        ["EndPoints" JSON..= endPoints, "Fields" JSON..= fields,
+         "Name" JSON..= name, "SamplingRate" JSON..= samplingRate]
+instance Property "EndPoints" RealtimeLogConfig where
+  type PropertyType "EndPoints" RealtimeLogConfig = [EndPointProperty]
+  set newValue RealtimeLogConfig {..}
+    = RealtimeLogConfig {endPoints = newValue, ..}
+instance Property "Fields" RealtimeLogConfig where
+  type PropertyType "Fields" RealtimeLogConfig = ValueList Prelude.Text
+  set newValue RealtimeLogConfig {..}
+    = RealtimeLogConfig {fields = newValue, ..}
+instance Property "Name" RealtimeLogConfig where
+  type PropertyType "Name" RealtimeLogConfig = Value Prelude.Text
+  set newValue RealtimeLogConfig {..}
+    = RealtimeLogConfig {name = newValue, ..}
+instance Property "SamplingRate" RealtimeLogConfig where
+  type PropertyType "SamplingRate" RealtimeLogConfig = Value Prelude.Double
+  set newValue RealtimeLogConfig {..}
+    = RealtimeLogConfig {samplingRate = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/RealtimeLogConfig/EndPointProperty.hs b/gen/Stratosphere/CloudFront/RealtimeLogConfig/EndPointProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/RealtimeLogConfig/EndPointProperty.hs
@@ -0,0 +1,44 @@
+module Stratosphere.CloudFront.RealtimeLogConfig.EndPointProperty (
+        module Exports, EndPointProperty(..), mkEndPointProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.RealtimeLogConfig.KinesisStreamConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EndPointProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-realtimelogconfig-endpoint.html>
+    EndPointProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-realtimelogconfig-endpoint.html#cfn-cloudfront-realtimelogconfig-endpoint-kinesisstreamconfig>
+                      kinesisStreamConfig :: KinesisStreamConfigProperty,
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-realtimelogconfig-endpoint.html#cfn-cloudfront-realtimelogconfig-endpoint-streamtype>
+                      streamType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEndPointProperty ::
+  KinesisStreamConfigProperty
+  -> Value Prelude.Text -> EndPointProperty
+mkEndPointProperty kinesisStreamConfig streamType
+  = EndPointProperty
+      {haddock_workaround_ = (),
+       kinesisStreamConfig = kinesisStreamConfig, streamType = streamType}
+instance ToResourceProperties EndPointProperty where
+  toResourceProperties EndPointProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::RealtimeLogConfig.EndPoint",
+         supportsTags = Prelude.False,
+         properties = ["KinesisStreamConfig" JSON..= kinesisStreamConfig,
+                       "StreamType" JSON..= streamType]}
+instance JSON.ToJSON EndPointProperty where
+  toJSON EndPointProperty {..}
+    = JSON.object
+        ["KinesisStreamConfig" JSON..= kinesisStreamConfig,
+         "StreamType" JSON..= streamType]
+instance Property "KinesisStreamConfig" EndPointProperty where
+  type PropertyType "KinesisStreamConfig" EndPointProperty = KinesisStreamConfigProperty
+  set newValue EndPointProperty {..}
+    = EndPointProperty {kinesisStreamConfig = newValue, ..}
+instance Property "StreamType" EndPointProperty where
+  type PropertyType "StreamType" EndPointProperty = Value Prelude.Text
+  set newValue EndPointProperty {..}
+    = EndPointProperty {streamType = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/RealtimeLogConfig/EndPointProperty.hs-boot b/gen/Stratosphere/CloudFront/RealtimeLogConfig/EndPointProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/RealtimeLogConfig/EndPointProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.RealtimeLogConfig.EndPointProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EndPointProperty :: Prelude.Type
+instance ToResourceProperties EndPointProperty
+instance Prelude.Eq EndPointProperty
+instance Prelude.Show EndPointProperty
+instance JSON.ToJSON EndPointProperty
diff --git a/gen/Stratosphere/CloudFront/RealtimeLogConfig/KinesisStreamConfigProperty.hs b/gen/Stratosphere/CloudFront/RealtimeLogConfig/KinesisStreamConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/RealtimeLogConfig/KinesisStreamConfigProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.CloudFront.RealtimeLogConfig.KinesisStreamConfigProperty (
+        KinesisStreamConfigProperty(..), mkKinesisStreamConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KinesisStreamConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-realtimelogconfig-kinesisstreamconfig.html>
+    KinesisStreamConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-realtimelogconfig-kinesisstreamconfig.html#cfn-cloudfront-realtimelogconfig-kinesisstreamconfig-rolearn>
+                                 roleArn :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-realtimelogconfig-kinesisstreamconfig.html#cfn-cloudfront-realtimelogconfig-kinesisstreamconfig-streamarn>
+                                 streamArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKinesisStreamConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> KinesisStreamConfigProperty
+mkKinesisStreamConfigProperty roleArn streamArn
+  = KinesisStreamConfigProperty
+      {haddock_workaround_ = (), roleArn = roleArn,
+       streamArn = streamArn}
+instance ToResourceProperties KinesisStreamConfigProperty where
+  toResourceProperties KinesisStreamConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::RealtimeLogConfig.KinesisStreamConfig",
+         supportsTags = Prelude.False,
+         properties = ["RoleArn" JSON..= roleArn,
+                       "StreamArn" JSON..= streamArn]}
+instance JSON.ToJSON KinesisStreamConfigProperty where
+  toJSON KinesisStreamConfigProperty {..}
+    = JSON.object
+        ["RoleArn" JSON..= roleArn, "StreamArn" JSON..= streamArn]
+instance Property "RoleArn" KinesisStreamConfigProperty where
+  type PropertyType "RoleArn" KinesisStreamConfigProperty = Value Prelude.Text
+  set newValue KinesisStreamConfigProperty {..}
+    = KinesisStreamConfigProperty {roleArn = newValue, ..}
+instance Property "StreamArn" KinesisStreamConfigProperty where
+  type PropertyType "StreamArn" KinesisStreamConfigProperty = Value Prelude.Text
+  set newValue KinesisStreamConfigProperty {..}
+    = KinesisStreamConfigProperty {streamArn = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/RealtimeLogConfig/KinesisStreamConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/RealtimeLogConfig/KinesisStreamConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/RealtimeLogConfig/KinesisStreamConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.RealtimeLogConfig.KinesisStreamConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data KinesisStreamConfigProperty :: Prelude.Type
+instance ToResourceProperties KinesisStreamConfigProperty
+instance Prelude.Eq KinesisStreamConfigProperty
+instance Prelude.Show KinesisStreamConfigProperty
+instance JSON.ToJSON KinesisStreamConfigProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy.hs
@@ -0,0 +1,36 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy (
+        module Exports, ResponseHeadersPolicy(..), mkResponseHeadersPolicy
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.ResponseHeadersPolicyConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data ResponseHeadersPolicy
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-responseheaderspolicy.html>
+    ResponseHeadersPolicy {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-responseheaderspolicy.html#cfn-cloudfront-responseheaderspolicy-responseheaderspolicyconfig>
+                           responseHeadersPolicyConfig :: ResponseHeadersPolicyConfigProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResponseHeadersPolicy ::
+  ResponseHeadersPolicyConfigProperty -> ResponseHeadersPolicy
+mkResponseHeadersPolicy responseHeadersPolicyConfig
+  = ResponseHeadersPolicy
+      {haddock_workaround_ = (),
+       responseHeadersPolicyConfig = responseHeadersPolicyConfig}
+instance ToResourceProperties ResponseHeadersPolicy where
+  toResourceProperties ResponseHeadersPolicy {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy",
+         supportsTags = Prelude.False,
+         properties = ["ResponseHeadersPolicyConfig"
+                         JSON..= responseHeadersPolicyConfig]}
+instance JSON.ToJSON ResponseHeadersPolicy where
+  toJSON ResponseHeadersPolicy {..}
+    = JSON.object
+        ["ResponseHeadersPolicyConfig" JSON..= responseHeadersPolicyConfig]
+instance Property "ResponseHeadersPolicyConfig" ResponseHeadersPolicy where
+  type PropertyType "ResponseHeadersPolicyConfig" ResponseHeadersPolicy = ResponseHeadersPolicyConfigProperty
+  set newValue ResponseHeadersPolicy {..}
+    = ResponseHeadersPolicy
+        {responseHeadersPolicyConfig = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowHeadersProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowHeadersProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowHeadersProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.AccessControlAllowHeadersProperty (
+        AccessControlAllowHeadersProperty(..),
+        mkAccessControlAllowHeadersProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AccessControlAllowHeadersProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-accesscontrolallowheaders.html>
+    AccessControlAllowHeadersProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-accesscontrolallowheaders.html#cfn-cloudfront-responseheaderspolicy-accesscontrolallowheaders-items>
+                                       items :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAccessControlAllowHeadersProperty ::
+  ValueList Prelude.Text -> AccessControlAllowHeadersProperty
+mkAccessControlAllowHeadersProperty items
+  = AccessControlAllowHeadersProperty
+      {haddock_workaround_ = (), items = items}
+instance ToResourceProperties AccessControlAllowHeadersProperty where
+  toResourceProperties AccessControlAllowHeadersProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.AccessControlAllowHeaders",
+         supportsTags = Prelude.False, properties = ["Items" JSON..= items]}
+instance JSON.ToJSON AccessControlAllowHeadersProperty where
+  toJSON AccessControlAllowHeadersProperty {..}
+    = JSON.object ["Items" JSON..= items]
+instance Property "Items" AccessControlAllowHeadersProperty where
+  type PropertyType "Items" AccessControlAllowHeadersProperty = ValueList Prelude.Text
+  set newValue AccessControlAllowHeadersProperty {..}
+    = AccessControlAllowHeadersProperty {items = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowHeadersProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowHeadersProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowHeadersProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.AccessControlAllowHeadersProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AccessControlAllowHeadersProperty :: Prelude.Type
+instance ToResourceProperties AccessControlAllowHeadersProperty
+instance Prelude.Eq AccessControlAllowHeadersProperty
+instance Prelude.Show AccessControlAllowHeadersProperty
+instance JSON.ToJSON AccessControlAllowHeadersProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowMethodsProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowMethodsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowMethodsProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.AccessControlAllowMethodsProperty (
+        AccessControlAllowMethodsProperty(..),
+        mkAccessControlAllowMethodsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AccessControlAllowMethodsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-accesscontrolallowmethods.html>
+    AccessControlAllowMethodsProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-accesscontrolallowmethods.html#cfn-cloudfront-responseheaderspolicy-accesscontrolallowmethods-items>
+                                       items :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAccessControlAllowMethodsProperty ::
+  ValueList Prelude.Text -> AccessControlAllowMethodsProperty
+mkAccessControlAllowMethodsProperty items
+  = AccessControlAllowMethodsProperty
+      {haddock_workaround_ = (), items = items}
+instance ToResourceProperties AccessControlAllowMethodsProperty where
+  toResourceProperties AccessControlAllowMethodsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.AccessControlAllowMethods",
+         supportsTags = Prelude.False, properties = ["Items" JSON..= items]}
+instance JSON.ToJSON AccessControlAllowMethodsProperty where
+  toJSON AccessControlAllowMethodsProperty {..}
+    = JSON.object ["Items" JSON..= items]
+instance Property "Items" AccessControlAllowMethodsProperty where
+  type PropertyType "Items" AccessControlAllowMethodsProperty = ValueList Prelude.Text
+  set newValue AccessControlAllowMethodsProperty {..}
+    = AccessControlAllowMethodsProperty {items = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowMethodsProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowMethodsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowMethodsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.AccessControlAllowMethodsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AccessControlAllowMethodsProperty :: Prelude.Type
+instance ToResourceProperties AccessControlAllowMethodsProperty
+instance Prelude.Eq AccessControlAllowMethodsProperty
+instance Prelude.Show AccessControlAllowMethodsProperty
+instance JSON.ToJSON AccessControlAllowMethodsProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowOriginsProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowOriginsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowOriginsProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.AccessControlAllowOriginsProperty (
+        AccessControlAllowOriginsProperty(..),
+        mkAccessControlAllowOriginsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AccessControlAllowOriginsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-accesscontrolalloworigins.html>
+    AccessControlAllowOriginsProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-accesscontrolalloworigins.html#cfn-cloudfront-responseheaderspolicy-accesscontrolalloworigins-items>
+                                       items :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAccessControlAllowOriginsProperty ::
+  ValueList Prelude.Text -> AccessControlAllowOriginsProperty
+mkAccessControlAllowOriginsProperty items
+  = AccessControlAllowOriginsProperty
+      {haddock_workaround_ = (), items = items}
+instance ToResourceProperties AccessControlAllowOriginsProperty where
+  toResourceProperties AccessControlAllowOriginsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.AccessControlAllowOrigins",
+         supportsTags = Prelude.False, properties = ["Items" JSON..= items]}
+instance JSON.ToJSON AccessControlAllowOriginsProperty where
+  toJSON AccessControlAllowOriginsProperty {..}
+    = JSON.object ["Items" JSON..= items]
+instance Property "Items" AccessControlAllowOriginsProperty where
+  type PropertyType "Items" AccessControlAllowOriginsProperty = ValueList Prelude.Text
+  set newValue AccessControlAllowOriginsProperty {..}
+    = AccessControlAllowOriginsProperty {items = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowOriginsProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowOriginsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlAllowOriginsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.AccessControlAllowOriginsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AccessControlAllowOriginsProperty :: Prelude.Type
+instance ToResourceProperties AccessControlAllowOriginsProperty
+instance Prelude.Eq AccessControlAllowOriginsProperty
+instance Prelude.Show AccessControlAllowOriginsProperty
+instance JSON.ToJSON AccessControlAllowOriginsProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlExposeHeadersProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlExposeHeadersProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlExposeHeadersProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.AccessControlExposeHeadersProperty (
+        AccessControlExposeHeadersProperty(..),
+        mkAccessControlExposeHeadersProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AccessControlExposeHeadersProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-accesscontrolexposeheaders.html>
+    AccessControlExposeHeadersProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-accesscontrolexposeheaders.html#cfn-cloudfront-responseheaderspolicy-accesscontrolexposeheaders-items>
+                                        items :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAccessControlExposeHeadersProperty ::
+  ValueList Prelude.Text -> AccessControlExposeHeadersProperty
+mkAccessControlExposeHeadersProperty items
+  = AccessControlExposeHeadersProperty
+      {haddock_workaround_ = (), items = items}
+instance ToResourceProperties AccessControlExposeHeadersProperty where
+  toResourceProperties AccessControlExposeHeadersProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.AccessControlExposeHeaders",
+         supportsTags = Prelude.False, properties = ["Items" JSON..= items]}
+instance JSON.ToJSON AccessControlExposeHeadersProperty where
+  toJSON AccessControlExposeHeadersProperty {..}
+    = JSON.object ["Items" JSON..= items]
+instance Property "Items" AccessControlExposeHeadersProperty where
+  type PropertyType "Items" AccessControlExposeHeadersProperty = ValueList Prelude.Text
+  set newValue AccessControlExposeHeadersProperty {..}
+    = AccessControlExposeHeadersProperty {items = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlExposeHeadersProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlExposeHeadersProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/AccessControlExposeHeadersProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.AccessControlExposeHeadersProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AccessControlExposeHeadersProperty :: Prelude.Type
+instance ToResourceProperties AccessControlExposeHeadersProperty
+instance Prelude.Eq AccessControlExposeHeadersProperty
+instance Prelude.Show AccessControlExposeHeadersProperty
+instance JSON.ToJSON AccessControlExposeHeadersProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ContentSecurityPolicyProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ContentSecurityPolicyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ContentSecurityPolicyProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.ContentSecurityPolicyProperty (
+        ContentSecurityPolicyProperty(..), mkContentSecurityPolicyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ContentSecurityPolicyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-contentsecuritypolicy.html>
+    ContentSecurityPolicyProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-contentsecuritypolicy.html#cfn-cloudfront-responseheaderspolicy-contentsecuritypolicy-contentsecuritypolicy>
+                                   contentSecurityPolicy :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-contentsecuritypolicy.html#cfn-cloudfront-responseheaderspolicy-contentsecuritypolicy-override>
+                                   override :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkContentSecurityPolicyProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Bool -> ContentSecurityPolicyProperty
+mkContentSecurityPolicyProperty contentSecurityPolicy override
+  = ContentSecurityPolicyProperty
+      {haddock_workaround_ = (),
+       contentSecurityPolicy = contentSecurityPolicy, override = override}
+instance ToResourceProperties ContentSecurityPolicyProperty where
+  toResourceProperties ContentSecurityPolicyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.ContentSecurityPolicy",
+         supportsTags = Prelude.False,
+         properties = ["ContentSecurityPolicy"
+                         JSON..= contentSecurityPolicy,
+                       "Override" JSON..= override]}
+instance JSON.ToJSON ContentSecurityPolicyProperty where
+  toJSON ContentSecurityPolicyProperty {..}
+    = JSON.object
+        ["ContentSecurityPolicy" JSON..= contentSecurityPolicy,
+         "Override" JSON..= override]
+instance Property "ContentSecurityPolicy" ContentSecurityPolicyProperty where
+  type PropertyType "ContentSecurityPolicy" ContentSecurityPolicyProperty = Value Prelude.Text
+  set newValue ContentSecurityPolicyProperty {..}
+    = ContentSecurityPolicyProperty
+        {contentSecurityPolicy = newValue, ..}
+instance Property "Override" ContentSecurityPolicyProperty where
+  type PropertyType "Override" ContentSecurityPolicyProperty = Value Prelude.Bool
+  set newValue ContentSecurityPolicyProperty {..}
+    = ContentSecurityPolicyProperty {override = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ContentSecurityPolicyProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ContentSecurityPolicyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ContentSecurityPolicyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.ContentSecurityPolicyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ContentSecurityPolicyProperty :: Prelude.Type
+instance ToResourceProperties ContentSecurityPolicyProperty
+instance Prelude.Eq ContentSecurityPolicyProperty
+instance Prelude.Show ContentSecurityPolicyProperty
+instance JSON.ToJSON ContentSecurityPolicyProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ContentTypeOptionsProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ContentTypeOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ContentTypeOptionsProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.ContentTypeOptionsProperty (
+        ContentTypeOptionsProperty(..), mkContentTypeOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ContentTypeOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-contenttypeoptions.html>
+    ContentTypeOptionsProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-contenttypeoptions.html#cfn-cloudfront-responseheaderspolicy-contenttypeoptions-override>
+                                override :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkContentTypeOptionsProperty ::
+  Value Prelude.Bool -> ContentTypeOptionsProperty
+mkContentTypeOptionsProperty override
+  = ContentTypeOptionsProperty
+      {haddock_workaround_ = (), override = override}
+instance ToResourceProperties ContentTypeOptionsProperty where
+  toResourceProperties ContentTypeOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.ContentTypeOptions",
+         supportsTags = Prelude.False,
+         properties = ["Override" JSON..= override]}
+instance JSON.ToJSON ContentTypeOptionsProperty where
+  toJSON ContentTypeOptionsProperty {..}
+    = JSON.object ["Override" JSON..= override]
+instance Property "Override" ContentTypeOptionsProperty where
+  type PropertyType "Override" ContentTypeOptionsProperty = Value Prelude.Bool
+  set newValue ContentTypeOptionsProperty {..}
+    = ContentTypeOptionsProperty {override = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ContentTypeOptionsProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ContentTypeOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ContentTypeOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.ContentTypeOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ContentTypeOptionsProperty :: Prelude.Type
+instance ToResourceProperties ContentTypeOptionsProperty
+instance Prelude.Eq ContentTypeOptionsProperty
+instance Prelude.Show ContentTypeOptionsProperty
+instance JSON.ToJSON ContentTypeOptionsProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CorsConfigProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CorsConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CorsConfigProperty.hs
@@ -0,0 +1,115 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.CorsConfigProperty (
+        module Exports, CorsConfigProperty(..), mkCorsConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.AccessControlAllowHeadersProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.AccessControlAllowMethodsProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.AccessControlAllowOriginsProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.AccessControlExposeHeadersProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CorsConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-corsconfig.html>
+    CorsConfigProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-corsconfig.html#cfn-cloudfront-responseheaderspolicy-corsconfig-accesscontrolallowcredentials>
+                        accessControlAllowCredentials :: (Value Prelude.Bool),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-corsconfig.html#cfn-cloudfront-responseheaderspolicy-corsconfig-accesscontrolallowheaders>
+                        accessControlAllowHeaders :: AccessControlAllowHeadersProperty,
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-corsconfig.html#cfn-cloudfront-responseheaderspolicy-corsconfig-accesscontrolallowmethods>
+                        accessControlAllowMethods :: AccessControlAllowMethodsProperty,
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-corsconfig.html#cfn-cloudfront-responseheaderspolicy-corsconfig-accesscontrolalloworigins>
+                        accessControlAllowOrigins :: AccessControlAllowOriginsProperty,
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-corsconfig.html#cfn-cloudfront-responseheaderspolicy-corsconfig-accesscontrolexposeheaders>
+                        accessControlExposeHeaders :: (Prelude.Maybe AccessControlExposeHeadersProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-corsconfig.html#cfn-cloudfront-responseheaderspolicy-corsconfig-accesscontrolmaxagesec>
+                        accessControlMaxAgeSec :: (Prelude.Maybe (Value Prelude.Integer)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-corsconfig.html#cfn-cloudfront-responseheaderspolicy-corsconfig-originoverride>
+                        originOverride :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCorsConfigProperty ::
+  Value Prelude.Bool
+  -> AccessControlAllowHeadersProperty
+     -> AccessControlAllowMethodsProperty
+        -> AccessControlAllowOriginsProperty
+           -> Value Prelude.Bool -> CorsConfigProperty
+mkCorsConfigProperty
+  accessControlAllowCredentials
+  accessControlAllowHeaders
+  accessControlAllowMethods
+  accessControlAllowOrigins
+  originOverride
+  = CorsConfigProperty
+      {haddock_workaround_ = (),
+       accessControlAllowCredentials = accessControlAllowCredentials,
+       accessControlAllowHeaders = accessControlAllowHeaders,
+       accessControlAllowMethods = accessControlAllowMethods,
+       accessControlAllowOrigins = accessControlAllowOrigins,
+       originOverride = originOverride,
+       accessControlExposeHeaders = Prelude.Nothing,
+       accessControlMaxAgeSec = Prelude.Nothing}
+instance ToResourceProperties CorsConfigProperty where
+  toResourceProperties CorsConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.CorsConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AccessControlAllowCredentials"
+                              JSON..= accessControlAllowCredentials,
+                            "AccessControlAllowHeaders" JSON..= accessControlAllowHeaders,
+                            "AccessControlAllowMethods" JSON..= accessControlAllowMethods,
+                            "AccessControlAllowOrigins" JSON..= accessControlAllowOrigins,
+                            "OriginOverride" JSON..= originOverride]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AccessControlExposeHeaders"
+                                 Prelude.<$> accessControlExposeHeaders,
+                               (JSON..=) "AccessControlMaxAgeSec"
+                                 Prelude.<$> accessControlMaxAgeSec]))}
+instance JSON.ToJSON CorsConfigProperty where
+  toJSON CorsConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AccessControlAllowCredentials"
+                 JSON..= accessControlAllowCredentials,
+               "AccessControlAllowHeaders" JSON..= accessControlAllowHeaders,
+               "AccessControlAllowMethods" JSON..= accessControlAllowMethods,
+               "AccessControlAllowOrigins" JSON..= accessControlAllowOrigins,
+               "OriginOverride" JSON..= originOverride]
+              (Prelude.catMaybes
+                 [(JSON..=) "AccessControlExposeHeaders"
+                    Prelude.<$> accessControlExposeHeaders,
+                  (JSON..=) "AccessControlMaxAgeSec"
+                    Prelude.<$> accessControlMaxAgeSec])))
+instance Property "AccessControlAllowCredentials" CorsConfigProperty where
+  type PropertyType "AccessControlAllowCredentials" CorsConfigProperty = Value Prelude.Bool
+  set newValue CorsConfigProperty {..}
+    = CorsConfigProperty {accessControlAllowCredentials = newValue, ..}
+instance Property "AccessControlAllowHeaders" CorsConfigProperty where
+  type PropertyType "AccessControlAllowHeaders" CorsConfigProperty = AccessControlAllowHeadersProperty
+  set newValue CorsConfigProperty {..}
+    = CorsConfigProperty {accessControlAllowHeaders = newValue, ..}
+instance Property "AccessControlAllowMethods" CorsConfigProperty where
+  type PropertyType "AccessControlAllowMethods" CorsConfigProperty = AccessControlAllowMethodsProperty
+  set newValue CorsConfigProperty {..}
+    = CorsConfigProperty {accessControlAllowMethods = newValue, ..}
+instance Property "AccessControlAllowOrigins" CorsConfigProperty where
+  type PropertyType "AccessControlAllowOrigins" CorsConfigProperty = AccessControlAllowOriginsProperty
+  set newValue CorsConfigProperty {..}
+    = CorsConfigProperty {accessControlAllowOrigins = newValue, ..}
+instance Property "AccessControlExposeHeaders" CorsConfigProperty where
+  type PropertyType "AccessControlExposeHeaders" CorsConfigProperty = AccessControlExposeHeadersProperty
+  set newValue CorsConfigProperty {..}
+    = CorsConfigProperty
+        {accessControlExposeHeaders = Prelude.pure newValue, ..}
+instance Property "AccessControlMaxAgeSec" CorsConfigProperty where
+  type PropertyType "AccessControlMaxAgeSec" CorsConfigProperty = Value Prelude.Integer
+  set newValue CorsConfigProperty {..}
+    = CorsConfigProperty
+        {accessControlMaxAgeSec = Prelude.pure newValue, ..}
+instance Property "OriginOverride" CorsConfigProperty where
+  type PropertyType "OriginOverride" CorsConfigProperty = Value Prelude.Bool
+  set newValue CorsConfigProperty {..}
+    = CorsConfigProperty {originOverride = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CorsConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CorsConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CorsConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.CorsConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CorsConfigProperty :: Prelude.Type
+instance ToResourceProperties CorsConfigProperty
+instance Prelude.Eq CorsConfigProperty
+instance Prelude.Show CorsConfigProperty
+instance JSON.ToJSON CorsConfigProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CustomHeaderProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CustomHeaderProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CustomHeaderProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.CustomHeaderProperty (
+        CustomHeaderProperty(..), mkCustomHeaderProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CustomHeaderProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-customheader.html>
+    CustomHeaderProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-customheader.html#cfn-cloudfront-responseheaderspolicy-customheader-header>
+                          header :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-customheader.html#cfn-cloudfront-responseheaderspolicy-customheader-override>
+                          override :: (Value Prelude.Bool),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-customheader.html#cfn-cloudfront-responseheaderspolicy-customheader-value>
+                          value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCustomHeaderProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Bool -> Value Prelude.Text -> CustomHeaderProperty
+mkCustomHeaderProperty header override value
+  = CustomHeaderProperty
+      {haddock_workaround_ = (), header = header, override = override,
+       value = value}
+instance ToResourceProperties CustomHeaderProperty where
+  toResourceProperties CustomHeaderProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.CustomHeader",
+         supportsTags = Prelude.False,
+         properties = ["Header" JSON..= header, "Override" JSON..= override,
+                       "Value" JSON..= value]}
+instance JSON.ToJSON CustomHeaderProperty where
+  toJSON CustomHeaderProperty {..}
+    = JSON.object
+        ["Header" JSON..= header, "Override" JSON..= override,
+         "Value" JSON..= value]
+instance Property "Header" CustomHeaderProperty where
+  type PropertyType "Header" CustomHeaderProperty = Value Prelude.Text
+  set newValue CustomHeaderProperty {..}
+    = CustomHeaderProperty {header = newValue, ..}
+instance Property "Override" CustomHeaderProperty where
+  type PropertyType "Override" CustomHeaderProperty = Value Prelude.Bool
+  set newValue CustomHeaderProperty {..}
+    = CustomHeaderProperty {override = newValue, ..}
+instance Property "Value" CustomHeaderProperty where
+  type PropertyType "Value" CustomHeaderProperty = Value Prelude.Text
+  set newValue CustomHeaderProperty {..}
+    = CustomHeaderProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CustomHeaderProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CustomHeaderProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CustomHeaderProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.CustomHeaderProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CustomHeaderProperty :: Prelude.Type
+instance ToResourceProperties CustomHeaderProperty
+instance Prelude.Eq CustomHeaderProperty
+instance Prelude.Show CustomHeaderProperty
+instance JSON.ToJSON CustomHeaderProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CustomHeadersConfigProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CustomHeadersConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CustomHeadersConfigProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.CustomHeadersConfigProperty (
+        module Exports, CustomHeadersConfigProperty(..),
+        mkCustomHeadersConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.CustomHeaderProperty as Exports
+import Stratosphere.ResourceProperties
+data CustomHeadersConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-customheadersconfig.html>
+    CustomHeadersConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-customheadersconfig.html#cfn-cloudfront-responseheaderspolicy-customheadersconfig-items>
+                                 items :: [CustomHeaderProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCustomHeadersConfigProperty ::
+  [CustomHeaderProperty] -> CustomHeadersConfigProperty
+mkCustomHeadersConfigProperty items
+  = CustomHeadersConfigProperty
+      {haddock_workaround_ = (), items = items}
+instance ToResourceProperties CustomHeadersConfigProperty where
+  toResourceProperties CustomHeadersConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.CustomHeadersConfig",
+         supportsTags = Prelude.False, properties = ["Items" JSON..= items]}
+instance JSON.ToJSON CustomHeadersConfigProperty where
+  toJSON CustomHeadersConfigProperty {..}
+    = JSON.object ["Items" JSON..= items]
+instance Property "Items" CustomHeadersConfigProperty where
+  type PropertyType "Items" CustomHeadersConfigProperty = [CustomHeaderProperty]
+  set newValue CustomHeadersConfigProperty {..}
+    = CustomHeadersConfigProperty {items = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CustomHeadersConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CustomHeadersConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/CustomHeadersConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.CustomHeadersConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CustomHeadersConfigProperty :: Prelude.Type
+instance ToResourceProperties CustomHeadersConfigProperty
+instance Prelude.Eq CustomHeadersConfigProperty
+instance Prelude.Show CustomHeadersConfigProperty
+instance JSON.ToJSON CustomHeadersConfigProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/FrameOptionsProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/FrameOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/FrameOptionsProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.FrameOptionsProperty (
+        FrameOptionsProperty(..), mkFrameOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FrameOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-frameoptions.html>
+    FrameOptionsProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-frameoptions.html#cfn-cloudfront-responseheaderspolicy-frameoptions-frameoption>
+                          frameOption :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-frameoptions.html#cfn-cloudfront-responseheaderspolicy-frameoptions-override>
+                          override :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFrameOptionsProperty ::
+  Value Prelude.Text -> Value Prelude.Bool -> FrameOptionsProperty
+mkFrameOptionsProperty frameOption override
+  = FrameOptionsProperty
+      {haddock_workaround_ = (), frameOption = frameOption,
+       override = override}
+instance ToResourceProperties FrameOptionsProperty where
+  toResourceProperties FrameOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.FrameOptions",
+         supportsTags = Prelude.False,
+         properties = ["FrameOption" JSON..= frameOption,
+                       "Override" JSON..= override]}
+instance JSON.ToJSON FrameOptionsProperty where
+  toJSON FrameOptionsProperty {..}
+    = JSON.object
+        ["FrameOption" JSON..= frameOption, "Override" JSON..= override]
+instance Property "FrameOption" FrameOptionsProperty where
+  type PropertyType "FrameOption" FrameOptionsProperty = Value Prelude.Text
+  set newValue FrameOptionsProperty {..}
+    = FrameOptionsProperty {frameOption = newValue, ..}
+instance Property "Override" FrameOptionsProperty where
+  type PropertyType "Override" FrameOptionsProperty = Value Prelude.Bool
+  set newValue FrameOptionsProperty {..}
+    = FrameOptionsProperty {override = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/FrameOptionsProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/FrameOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/FrameOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.FrameOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FrameOptionsProperty :: Prelude.Type
+instance ToResourceProperties FrameOptionsProperty
+instance Prelude.Eq FrameOptionsProperty
+instance Prelude.Show FrameOptionsProperty
+instance JSON.ToJSON FrameOptionsProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ReferrerPolicyProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ReferrerPolicyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ReferrerPolicyProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.ReferrerPolicyProperty (
+        ReferrerPolicyProperty(..), mkReferrerPolicyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ReferrerPolicyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-referrerpolicy.html>
+    ReferrerPolicyProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-referrerpolicy.html#cfn-cloudfront-responseheaderspolicy-referrerpolicy-override>
+                            override :: (Value Prelude.Bool),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-referrerpolicy.html#cfn-cloudfront-responseheaderspolicy-referrerpolicy-referrerpolicy>
+                            referrerPolicy :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReferrerPolicyProperty ::
+  Value Prelude.Bool -> Value Prelude.Text -> ReferrerPolicyProperty
+mkReferrerPolicyProperty override referrerPolicy
+  = ReferrerPolicyProperty
+      {haddock_workaround_ = (), override = override,
+       referrerPolicy = referrerPolicy}
+instance ToResourceProperties ReferrerPolicyProperty where
+  toResourceProperties ReferrerPolicyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.ReferrerPolicy",
+         supportsTags = Prelude.False,
+         properties = ["Override" JSON..= override,
+                       "ReferrerPolicy" JSON..= referrerPolicy]}
+instance JSON.ToJSON ReferrerPolicyProperty where
+  toJSON ReferrerPolicyProperty {..}
+    = JSON.object
+        ["Override" JSON..= override,
+         "ReferrerPolicy" JSON..= referrerPolicy]
+instance Property "Override" ReferrerPolicyProperty where
+  type PropertyType "Override" ReferrerPolicyProperty = Value Prelude.Bool
+  set newValue ReferrerPolicyProperty {..}
+    = ReferrerPolicyProperty {override = newValue, ..}
+instance Property "ReferrerPolicy" ReferrerPolicyProperty where
+  type PropertyType "ReferrerPolicy" ReferrerPolicyProperty = Value Prelude.Text
+  set newValue ReferrerPolicyProperty {..}
+    = ReferrerPolicyProperty {referrerPolicy = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ReferrerPolicyProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ReferrerPolicyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ReferrerPolicyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.ReferrerPolicyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ReferrerPolicyProperty :: Prelude.Type
+instance ToResourceProperties ReferrerPolicyProperty
+instance Prelude.Eq ReferrerPolicyProperty
+instance Prelude.Show ReferrerPolicyProperty
+instance JSON.ToJSON ReferrerPolicyProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/RemoveHeaderProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/RemoveHeaderProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/RemoveHeaderProperty.hs
@@ -0,0 +1,31 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.RemoveHeaderProperty (
+        RemoveHeaderProperty(..), mkRemoveHeaderProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RemoveHeaderProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-removeheader.html>
+    RemoveHeaderProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-removeheader.html#cfn-cloudfront-responseheaderspolicy-removeheader-header>
+                          header :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRemoveHeaderProperty ::
+  Value Prelude.Text -> RemoveHeaderProperty
+mkRemoveHeaderProperty header
+  = RemoveHeaderProperty {haddock_workaround_ = (), header = header}
+instance ToResourceProperties RemoveHeaderProperty where
+  toResourceProperties RemoveHeaderProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.RemoveHeader",
+         supportsTags = Prelude.False,
+         properties = ["Header" JSON..= header]}
+instance JSON.ToJSON RemoveHeaderProperty where
+  toJSON RemoveHeaderProperty {..}
+    = JSON.object ["Header" JSON..= header]
+instance Property "Header" RemoveHeaderProperty where
+  type PropertyType "Header" RemoveHeaderProperty = Value Prelude.Text
+  set newValue RemoveHeaderProperty {..}
+    = RemoveHeaderProperty {header = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/RemoveHeaderProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/RemoveHeaderProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/RemoveHeaderProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.RemoveHeaderProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RemoveHeaderProperty :: Prelude.Type
+instance ToResourceProperties RemoveHeaderProperty
+instance Prelude.Eq RemoveHeaderProperty
+instance Prelude.Show RemoveHeaderProperty
+instance JSON.ToJSON RemoveHeaderProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/RemoveHeadersConfigProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/RemoveHeadersConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/RemoveHeadersConfigProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.RemoveHeadersConfigProperty (
+        module Exports, RemoveHeadersConfigProperty(..),
+        mkRemoveHeadersConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.RemoveHeaderProperty as Exports
+import Stratosphere.ResourceProperties
+data RemoveHeadersConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-removeheadersconfig.html>
+    RemoveHeadersConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-removeheadersconfig.html#cfn-cloudfront-responseheaderspolicy-removeheadersconfig-items>
+                                 items :: [RemoveHeaderProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRemoveHeadersConfigProperty ::
+  [RemoveHeaderProperty] -> RemoveHeadersConfigProperty
+mkRemoveHeadersConfigProperty items
+  = RemoveHeadersConfigProperty
+      {haddock_workaround_ = (), items = items}
+instance ToResourceProperties RemoveHeadersConfigProperty where
+  toResourceProperties RemoveHeadersConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.RemoveHeadersConfig",
+         supportsTags = Prelude.False, properties = ["Items" JSON..= items]}
+instance JSON.ToJSON RemoveHeadersConfigProperty where
+  toJSON RemoveHeadersConfigProperty {..}
+    = JSON.object ["Items" JSON..= items]
+instance Property "Items" RemoveHeadersConfigProperty where
+  type PropertyType "Items" RemoveHeadersConfigProperty = [RemoveHeaderProperty]
+  set newValue RemoveHeadersConfigProperty {..}
+    = RemoveHeadersConfigProperty {items = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/RemoveHeadersConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/RemoveHeadersConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/RemoveHeadersConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.RemoveHeadersConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RemoveHeadersConfigProperty :: Prelude.Type
+instance ToResourceProperties RemoveHeadersConfigProperty
+instance Prelude.Eq RemoveHeadersConfigProperty
+instance Prelude.Show RemoveHeadersConfigProperty
+instance JSON.ToJSON RemoveHeadersConfigProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ResponseHeadersPolicyConfigProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ResponseHeadersPolicyConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ResponseHeadersPolicyConfigProperty.hs
@@ -0,0 +1,108 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.ResponseHeadersPolicyConfigProperty (
+        module Exports, ResponseHeadersPolicyConfigProperty(..),
+        mkResponseHeadersPolicyConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.CorsConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.CustomHeadersConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.RemoveHeadersConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.SecurityHeadersConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.ServerTimingHeadersConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ResponseHeadersPolicyConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-responseheaderspolicyconfig.html>
+    ResponseHeadersPolicyConfigProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-responseheaderspolicyconfig.html#cfn-cloudfront-responseheaderspolicy-responseheaderspolicyconfig-comment>
+                                         comment :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-responseheaderspolicyconfig.html#cfn-cloudfront-responseheaderspolicy-responseheaderspolicyconfig-corsconfig>
+                                         corsConfig :: (Prelude.Maybe CorsConfigProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-responseheaderspolicyconfig.html#cfn-cloudfront-responseheaderspolicy-responseheaderspolicyconfig-customheadersconfig>
+                                         customHeadersConfig :: (Prelude.Maybe CustomHeadersConfigProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-responseheaderspolicyconfig.html#cfn-cloudfront-responseheaderspolicy-responseheaderspolicyconfig-name>
+                                         name :: (Value Prelude.Text),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-responseheaderspolicyconfig.html#cfn-cloudfront-responseheaderspolicy-responseheaderspolicyconfig-removeheadersconfig>
+                                         removeHeadersConfig :: (Prelude.Maybe RemoveHeadersConfigProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-responseheaderspolicyconfig.html#cfn-cloudfront-responseheaderspolicy-responseheaderspolicyconfig-securityheadersconfig>
+                                         securityHeadersConfig :: (Prelude.Maybe SecurityHeadersConfigProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-responseheaderspolicyconfig.html#cfn-cloudfront-responseheaderspolicy-responseheaderspolicyconfig-servertimingheadersconfig>
+                                         serverTimingHeadersConfig :: (Prelude.Maybe ServerTimingHeadersConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResponseHeadersPolicyConfigProperty ::
+  Value Prelude.Text -> ResponseHeadersPolicyConfigProperty
+mkResponseHeadersPolicyConfigProperty name
+  = ResponseHeadersPolicyConfigProperty
+      {haddock_workaround_ = (), name = name, comment = Prelude.Nothing,
+       corsConfig = Prelude.Nothing,
+       customHeadersConfig = Prelude.Nothing,
+       removeHeadersConfig = Prelude.Nothing,
+       securityHeadersConfig = Prelude.Nothing,
+       serverTimingHeadersConfig = Prelude.Nothing}
+instance ToResourceProperties ResponseHeadersPolicyConfigProperty where
+  toResourceProperties ResponseHeadersPolicyConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.ResponseHeadersPolicyConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Comment" Prelude.<$> comment,
+                               (JSON..=) "CorsConfig" Prelude.<$> corsConfig,
+                               (JSON..=) "CustomHeadersConfig" Prelude.<$> customHeadersConfig,
+                               (JSON..=) "RemoveHeadersConfig" Prelude.<$> removeHeadersConfig,
+                               (JSON..=) "SecurityHeadersConfig"
+                                 Prelude.<$> securityHeadersConfig,
+                               (JSON..=) "ServerTimingHeadersConfig"
+                                 Prelude.<$> serverTimingHeadersConfig]))}
+instance JSON.ToJSON ResponseHeadersPolicyConfigProperty where
+  toJSON ResponseHeadersPolicyConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "Comment" Prelude.<$> comment,
+                  (JSON..=) "CorsConfig" Prelude.<$> corsConfig,
+                  (JSON..=) "CustomHeadersConfig" Prelude.<$> customHeadersConfig,
+                  (JSON..=) "RemoveHeadersConfig" Prelude.<$> removeHeadersConfig,
+                  (JSON..=) "SecurityHeadersConfig"
+                    Prelude.<$> securityHeadersConfig,
+                  (JSON..=) "ServerTimingHeadersConfig"
+                    Prelude.<$> serverTimingHeadersConfig])))
+instance Property "Comment" ResponseHeadersPolicyConfigProperty where
+  type PropertyType "Comment" ResponseHeadersPolicyConfigProperty = Value Prelude.Text
+  set newValue ResponseHeadersPolicyConfigProperty {..}
+    = ResponseHeadersPolicyConfigProperty
+        {comment = Prelude.pure newValue, ..}
+instance Property "CorsConfig" ResponseHeadersPolicyConfigProperty where
+  type PropertyType "CorsConfig" ResponseHeadersPolicyConfigProperty = CorsConfigProperty
+  set newValue ResponseHeadersPolicyConfigProperty {..}
+    = ResponseHeadersPolicyConfigProperty
+        {corsConfig = Prelude.pure newValue, ..}
+instance Property "CustomHeadersConfig" ResponseHeadersPolicyConfigProperty where
+  type PropertyType "CustomHeadersConfig" ResponseHeadersPolicyConfigProperty = CustomHeadersConfigProperty
+  set newValue ResponseHeadersPolicyConfigProperty {..}
+    = ResponseHeadersPolicyConfigProperty
+        {customHeadersConfig = Prelude.pure newValue, ..}
+instance Property "Name" ResponseHeadersPolicyConfigProperty where
+  type PropertyType "Name" ResponseHeadersPolicyConfigProperty = Value Prelude.Text
+  set newValue ResponseHeadersPolicyConfigProperty {..}
+    = ResponseHeadersPolicyConfigProperty {name = newValue, ..}
+instance Property "RemoveHeadersConfig" ResponseHeadersPolicyConfigProperty where
+  type PropertyType "RemoveHeadersConfig" ResponseHeadersPolicyConfigProperty = RemoveHeadersConfigProperty
+  set newValue ResponseHeadersPolicyConfigProperty {..}
+    = ResponseHeadersPolicyConfigProperty
+        {removeHeadersConfig = Prelude.pure newValue, ..}
+instance Property "SecurityHeadersConfig" ResponseHeadersPolicyConfigProperty where
+  type PropertyType "SecurityHeadersConfig" ResponseHeadersPolicyConfigProperty = SecurityHeadersConfigProperty
+  set newValue ResponseHeadersPolicyConfigProperty {..}
+    = ResponseHeadersPolicyConfigProperty
+        {securityHeadersConfig = Prelude.pure newValue, ..}
+instance Property "ServerTimingHeadersConfig" ResponseHeadersPolicyConfigProperty where
+  type PropertyType "ServerTimingHeadersConfig" ResponseHeadersPolicyConfigProperty = ServerTimingHeadersConfigProperty
+  set newValue ResponseHeadersPolicyConfigProperty {..}
+    = ResponseHeadersPolicyConfigProperty
+        {serverTimingHeadersConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ResponseHeadersPolicyConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ResponseHeadersPolicyConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ResponseHeadersPolicyConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.ResponseHeadersPolicyConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ResponseHeadersPolicyConfigProperty :: Prelude.Type
+instance ToResourceProperties ResponseHeadersPolicyConfigProperty
+instance Prelude.Eq ResponseHeadersPolicyConfigProperty
+instance Prelude.Show ResponseHeadersPolicyConfigProperty
+instance JSON.ToJSON ResponseHeadersPolicyConfigProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/SecurityHeadersConfigProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/SecurityHeadersConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/SecurityHeadersConfigProperty.hs
@@ -0,0 +1,96 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.SecurityHeadersConfigProperty (
+        module Exports, SecurityHeadersConfigProperty(..),
+        mkSecurityHeadersConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.ContentSecurityPolicyProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.ContentTypeOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.FrameOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.ReferrerPolicyProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.StrictTransportSecurityProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.ResponseHeadersPolicy.XSSProtectionProperty as Exports
+import Stratosphere.ResourceProperties
+data SecurityHeadersConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-securityheadersconfig.html>
+    SecurityHeadersConfigProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-securityheadersconfig.html#cfn-cloudfront-responseheaderspolicy-securityheadersconfig-contentsecuritypolicy>
+                                   contentSecurityPolicy :: (Prelude.Maybe ContentSecurityPolicyProperty),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-securityheadersconfig.html#cfn-cloudfront-responseheaderspolicy-securityheadersconfig-contenttypeoptions>
+                                   contentTypeOptions :: (Prelude.Maybe ContentTypeOptionsProperty),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-securityheadersconfig.html#cfn-cloudfront-responseheaderspolicy-securityheadersconfig-frameoptions>
+                                   frameOptions :: (Prelude.Maybe FrameOptionsProperty),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-securityheadersconfig.html#cfn-cloudfront-responseheaderspolicy-securityheadersconfig-referrerpolicy>
+                                   referrerPolicy :: (Prelude.Maybe ReferrerPolicyProperty),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-securityheadersconfig.html#cfn-cloudfront-responseheaderspolicy-securityheadersconfig-stricttransportsecurity>
+                                   strictTransportSecurity :: (Prelude.Maybe StrictTransportSecurityProperty),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-securityheadersconfig.html#cfn-cloudfront-responseheaderspolicy-securityheadersconfig-xssprotection>
+                                   xSSProtection :: (Prelude.Maybe XSSProtectionProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSecurityHeadersConfigProperty :: SecurityHeadersConfigProperty
+mkSecurityHeadersConfigProperty
+  = SecurityHeadersConfigProperty
+      {haddock_workaround_ = (), contentSecurityPolicy = Prelude.Nothing,
+       contentTypeOptions = Prelude.Nothing,
+       frameOptions = Prelude.Nothing, referrerPolicy = Prelude.Nothing,
+       strictTransportSecurity = Prelude.Nothing,
+       xSSProtection = Prelude.Nothing}
+instance ToResourceProperties SecurityHeadersConfigProperty where
+  toResourceProperties SecurityHeadersConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.SecurityHeadersConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ContentSecurityPolicy"
+                              Prelude.<$> contentSecurityPolicy,
+                            (JSON..=) "ContentTypeOptions" Prelude.<$> contentTypeOptions,
+                            (JSON..=) "FrameOptions" Prelude.<$> frameOptions,
+                            (JSON..=) "ReferrerPolicy" Prelude.<$> referrerPolicy,
+                            (JSON..=) "StrictTransportSecurity"
+                              Prelude.<$> strictTransportSecurity,
+                            (JSON..=) "XSSProtection" Prelude.<$> xSSProtection])}
+instance JSON.ToJSON SecurityHeadersConfigProperty where
+  toJSON SecurityHeadersConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ContentSecurityPolicy"
+                 Prelude.<$> contentSecurityPolicy,
+               (JSON..=) "ContentTypeOptions" Prelude.<$> contentTypeOptions,
+               (JSON..=) "FrameOptions" Prelude.<$> frameOptions,
+               (JSON..=) "ReferrerPolicy" Prelude.<$> referrerPolicy,
+               (JSON..=) "StrictTransportSecurity"
+                 Prelude.<$> strictTransportSecurity,
+               (JSON..=) "XSSProtection" Prelude.<$> xSSProtection]))
+instance Property "ContentSecurityPolicy" SecurityHeadersConfigProperty where
+  type PropertyType "ContentSecurityPolicy" SecurityHeadersConfigProperty = ContentSecurityPolicyProperty
+  set newValue SecurityHeadersConfigProperty {..}
+    = SecurityHeadersConfigProperty
+        {contentSecurityPolicy = Prelude.pure newValue, ..}
+instance Property "ContentTypeOptions" SecurityHeadersConfigProperty where
+  type PropertyType "ContentTypeOptions" SecurityHeadersConfigProperty = ContentTypeOptionsProperty
+  set newValue SecurityHeadersConfigProperty {..}
+    = SecurityHeadersConfigProperty
+        {contentTypeOptions = Prelude.pure newValue, ..}
+instance Property "FrameOptions" SecurityHeadersConfigProperty where
+  type PropertyType "FrameOptions" SecurityHeadersConfigProperty = FrameOptionsProperty
+  set newValue SecurityHeadersConfigProperty {..}
+    = SecurityHeadersConfigProperty
+        {frameOptions = Prelude.pure newValue, ..}
+instance Property "ReferrerPolicy" SecurityHeadersConfigProperty where
+  type PropertyType "ReferrerPolicy" SecurityHeadersConfigProperty = ReferrerPolicyProperty
+  set newValue SecurityHeadersConfigProperty {..}
+    = SecurityHeadersConfigProperty
+        {referrerPolicy = Prelude.pure newValue, ..}
+instance Property "StrictTransportSecurity" SecurityHeadersConfigProperty where
+  type PropertyType "StrictTransportSecurity" SecurityHeadersConfigProperty = StrictTransportSecurityProperty
+  set newValue SecurityHeadersConfigProperty {..}
+    = SecurityHeadersConfigProperty
+        {strictTransportSecurity = Prelude.pure newValue, ..}
+instance Property "XSSProtection" SecurityHeadersConfigProperty where
+  type PropertyType "XSSProtection" SecurityHeadersConfigProperty = XSSProtectionProperty
+  set newValue SecurityHeadersConfigProperty {..}
+    = SecurityHeadersConfigProperty
+        {xSSProtection = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/SecurityHeadersConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/SecurityHeadersConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/SecurityHeadersConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.SecurityHeadersConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SecurityHeadersConfigProperty :: Prelude.Type
+instance ToResourceProperties SecurityHeadersConfigProperty
+instance Prelude.Eq SecurityHeadersConfigProperty
+instance Prelude.Show SecurityHeadersConfigProperty
+instance JSON.ToJSON SecurityHeadersConfigProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ServerTimingHeadersConfigProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ServerTimingHeadersConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ServerTimingHeadersConfigProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.ServerTimingHeadersConfigProperty (
+        ServerTimingHeadersConfigProperty(..),
+        mkServerTimingHeadersConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ServerTimingHeadersConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-servertimingheadersconfig.html>
+    ServerTimingHeadersConfigProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-servertimingheadersconfig.html#cfn-cloudfront-responseheaderspolicy-servertimingheadersconfig-enabled>
+                                       enabled :: (Value Prelude.Bool),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-servertimingheadersconfig.html#cfn-cloudfront-responseheaderspolicy-servertimingheadersconfig-samplingrate>
+                                       samplingRate :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkServerTimingHeadersConfigProperty ::
+  Value Prelude.Bool -> ServerTimingHeadersConfigProperty
+mkServerTimingHeadersConfigProperty enabled
+  = ServerTimingHeadersConfigProperty
+      {haddock_workaround_ = (), enabled = enabled,
+       samplingRate = Prelude.Nothing}
+instance ToResourceProperties ServerTimingHeadersConfigProperty where
+  toResourceProperties ServerTimingHeadersConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.ServerTimingHeadersConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Enabled" JSON..= enabled]
+                           (Prelude.catMaybes
+                              [(JSON..=) "SamplingRate" Prelude.<$> samplingRate]))}
+instance JSON.ToJSON ServerTimingHeadersConfigProperty where
+  toJSON ServerTimingHeadersConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Enabled" JSON..= enabled]
+              (Prelude.catMaybes
+                 [(JSON..=) "SamplingRate" Prelude.<$> samplingRate])))
+instance Property "Enabled" ServerTimingHeadersConfigProperty where
+  type PropertyType "Enabled" ServerTimingHeadersConfigProperty = Value Prelude.Bool
+  set newValue ServerTimingHeadersConfigProperty {..}
+    = ServerTimingHeadersConfigProperty {enabled = newValue, ..}
+instance Property "SamplingRate" ServerTimingHeadersConfigProperty where
+  type PropertyType "SamplingRate" ServerTimingHeadersConfigProperty = Value Prelude.Double
+  set newValue ServerTimingHeadersConfigProperty {..}
+    = ServerTimingHeadersConfigProperty
+        {samplingRate = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ServerTimingHeadersConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ServerTimingHeadersConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/ServerTimingHeadersConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.ServerTimingHeadersConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ServerTimingHeadersConfigProperty :: Prelude.Type
+instance ToResourceProperties ServerTimingHeadersConfigProperty
+instance Prelude.Eq ServerTimingHeadersConfigProperty
+instance Prelude.Show ServerTimingHeadersConfigProperty
+instance JSON.ToJSON ServerTimingHeadersConfigProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/StrictTransportSecurityProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/StrictTransportSecurityProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/StrictTransportSecurityProperty.hs
@@ -0,0 +1,71 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.StrictTransportSecurityProperty (
+        StrictTransportSecurityProperty(..),
+        mkStrictTransportSecurityProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data StrictTransportSecurityProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-stricttransportsecurity.html>
+    StrictTransportSecurityProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-stricttransportsecurity.html#cfn-cloudfront-responseheaderspolicy-stricttransportsecurity-accesscontrolmaxagesec>
+                                     accessControlMaxAgeSec :: (Value Prelude.Integer),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-stricttransportsecurity.html#cfn-cloudfront-responseheaderspolicy-stricttransportsecurity-includesubdomains>
+                                     includeSubdomains :: (Prelude.Maybe (Value Prelude.Bool)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-stricttransportsecurity.html#cfn-cloudfront-responseheaderspolicy-stricttransportsecurity-override>
+                                     override :: (Value Prelude.Bool),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-stricttransportsecurity.html#cfn-cloudfront-responseheaderspolicy-stricttransportsecurity-preload>
+                                     preload :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStrictTransportSecurityProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Bool -> StrictTransportSecurityProperty
+mkStrictTransportSecurityProperty accessControlMaxAgeSec override
+  = StrictTransportSecurityProperty
+      {haddock_workaround_ = (),
+       accessControlMaxAgeSec = accessControlMaxAgeSec,
+       override = override, includeSubdomains = Prelude.Nothing,
+       preload = Prelude.Nothing}
+instance ToResourceProperties StrictTransportSecurityProperty where
+  toResourceProperties StrictTransportSecurityProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.StrictTransportSecurity",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AccessControlMaxAgeSec" JSON..= accessControlMaxAgeSec,
+                            "Override" JSON..= override]
+                           (Prelude.catMaybes
+                              [(JSON..=) "IncludeSubdomains" Prelude.<$> includeSubdomains,
+                               (JSON..=) "Preload" Prelude.<$> preload]))}
+instance JSON.ToJSON StrictTransportSecurityProperty where
+  toJSON StrictTransportSecurityProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AccessControlMaxAgeSec" JSON..= accessControlMaxAgeSec,
+               "Override" JSON..= override]
+              (Prelude.catMaybes
+                 [(JSON..=) "IncludeSubdomains" Prelude.<$> includeSubdomains,
+                  (JSON..=) "Preload" Prelude.<$> preload])))
+instance Property "AccessControlMaxAgeSec" StrictTransportSecurityProperty where
+  type PropertyType "AccessControlMaxAgeSec" StrictTransportSecurityProperty = Value Prelude.Integer
+  set newValue StrictTransportSecurityProperty {..}
+    = StrictTransportSecurityProperty
+        {accessControlMaxAgeSec = newValue, ..}
+instance Property "IncludeSubdomains" StrictTransportSecurityProperty where
+  type PropertyType "IncludeSubdomains" StrictTransportSecurityProperty = Value Prelude.Bool
+  set newValue StrictTransportSecurityProperty {..}
+    = StrictTransportSecurityProperty
+        {includeSubdomains = Prelude.pure newValue, ..}
+instance Property "Override" StrictTransportSecurityProperty where
+  type PropertyType "Override" StrictTransportSecurityProperty = Value Prelude.Bool
+  set newValue StrictTransportSecurityProperty {..}
+    = StrictTransportSecurityProperty {override = newValue, ..}
+instance Property "Preload" StrictTransportSecurityProperty where
+  type PropertyType "Preload" StrictTransportSecurityProperty = Value Prelude.Bool
+  set newValue StrictTransportSecurityProperty {..}
+    = StrictTransportSecurityProperty
+        {preload = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/StrictTransportSecurityProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/StrictTransportSecurityProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/StrictTransportSecurityProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.StrictTransportSecurityProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data StrictTransportSecurityProperty :: Prelude.Type
+instance ToResourceProperties StrictTransportSecurityProperty
+instance Prelude.Eq StrictTransportSecurityProperty
+instance Prelude.Show StrictTransportSecurityProperty
+instance JSON.ToJSON StrictTransportSecurityProperty
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/XSSProtectionProperty.hs b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/XSSProtectionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/XSSProtectionProperty.hs
@@ -0,0 +1,63 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.XSSProtectionProperty (
+        XSSProtectionProperty(..), mkXSSProtectionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data XSSProtectionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-xssprotection.html>
+    XSSProtectionProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-xssprotection.html#cfn-cloudfront-responseheaderspolicy-xssprotection-modeblock>
+                           modeBlock :: (Prelude.Maybe (Value Prelude.Bool)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-xssprotection.html#cfn-cloudfront-responseheaderspolicy-xssprotection-override>
+                           override :: (Value Prelude.Bool),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-xssprotection.html#cfn-cloudfront-responseheaderspolicy-xssprotection-protection>
+                           protection :: (Value Prelude.Bool),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-xssprotection.html#cfn-cloudfront-responseheaderspolicy-xssprotection-reporturi>
+                           reportUri :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkXSSProtectionProperty ::
+  Value Prelude.Bool -> Value Prelude.Bool -> XSSProtectionProperty
+mkXSSProtectionProperty override protection
+  = XSSProtectionProperty
+      {haddock_workaround_ = (), override = override,
+       protection = protection, modeBlock = Prelude.Nothing,
+       reportUri = Prelude.Nothing}
+instance ToResourceProperties XSSProtectionProperty where
+  toResourceProperties XSSProtectionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::ResponseHeadersPolicy.XSSProtection",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Override" JSON..= override, "Protection" JSON..= protection]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ModeBlock" Prelude.<$> modeBlock,
+                               (JSON..=) "ReportUri" Prelude.<$> reportUri]))}
+instance JSON.ToJSON XSSProtectionProperty where
+  toJSON XSSProtectionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Override" JSON..= override, "Protection" JSON..= protection]
+              (Prelude.catMaybes
+                 [(JSON..=) "ModeBlock" Prelude.<$> modeBlock,
+                  (JSON..=) "ReportUri" Prelude.<$> reportUri])))
+instance Property "ModeBlock" XSSProtectionProperty where
+  type PropertyType "ModeBlock" XSSProtectionProperty = Value Prelude.Bool
+  set newValue XSSProtectionProperty {..}
+    = XSSProtectionProperty {modeBlock = Prelude.pure newValue, ..}
+instance Property "Override" XSSProtectionProperty where
+  type PropertyType "Override" XSSProtectionProperty = Value Prelude.Bool
+  set newValue XSSProtectionProperty {..}
+    = XSSProtectionProperty {override = newValue, ..}
+instance Property "Protection" XSSProtectionProperty where
+  type PropertyType "Protection" XSSProtectionProperty = Value Prelude.Bool
+  set newValue XSSProtectionProperty {..}
+    = XSSProtectionProperty {protection = newValue, ..}
+instance Property "ReportUri" XSSProtectionProperty where
+  type PropertyType "ReportUri" XSSProtectionProperty = Value Prelude.Text
+  set newValue XSSProtectionProperty {..}
+    = XSSProtectionProperty {reportUri = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/XSSProtectionProperty.hs-boot b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/XSSProtectionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/ResponseHeadersPolicy/XSSProtectionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.ResponseHeadersPolicy.XSSProtectionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data XSSProtectionProperty :: Prelude.Type
+instance ToResourceProperties XSSProtectionProperty
+instance Prelude.Eq XSSProtectionProperty
+instance Prelude.Show XSSProtectionProperty
+instance JSON.ToJSON XSSProtectionProperty
diff --git a/gen/Stratosphere/CloudFront/StreamingDistribution.hs b/gen/Stratosphere/CloudFront/StreamingDistribution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/StreamingDistribution.hs
@@ -0,0 +1,47 @@
+module Stratosphere.CloudFront.StreamingDistribution (
+        module Exports, StreamingDistribution(..), mkStreamingDistribution
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.StreamingDistribution.StreamingDistributionConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+data StreamingDistribution
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-streamingdistribution.html>
+    StreamingDistribution {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-streamingdistribution.html#cfn-cloudfront-streamingdistribution-streamingdistributionconfig>
+                           streamingDistributionConfig :: StreamingDistributionConfigProperty,
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-streamingdistribution.html#cfn-cloudfront-streamingdistribution-tags>
+                           tags :: [Tag]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStreamingDistribution ::
+  StreamingDistributionConfigProperty
+  -> [Tag] -> StreamingDistribution
+mkStreamingDistribution streamingDistributionConfig tags
+  = StreamingDistribution
+      {haddock_workaround_ = (),
+       streamingDistributionConfig = streamingDistributionConfig,
+       tags = tags}
+instance ToResourceProperties StreamingDistribution where
+  toResourceProperties StreamingDistribution {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::StreamingDistribution",
+         supportsTags = Prelude.True,
+         properties = ["StreamingDistributionConfig"
+                         JSON..= streamingDistributionConfig,
+                       "Tags" JSON..= tags]}
+instance JSON.ToJSON StreamingDistribution where
+  toJSON StreamingDistribution {..}
+    = JSON.object
+        ["StreamingDistributionConfig" JSON..= streamingDistributionConfig,
+         "Tags" JSON..= tags]
+instance Property "StreamingDistributionConfig" StreamingDistribution where
+  type PropertyType "StreamingDistributionConfig" StreamingDistribution = StreamingDistributionConfigProperty
+  set newValue StreamingDistribution {..}
+    = StreamingDistribution
+        {streamingDistributionConfig = newValue, ..}
+instance Property "Tags" StreamingDistribution where
+  type PropertyType "Tags" StreamingDistribution = [Tag]
+  set newValue StreamingDistribution {..}
+    = StreamingDistribution {tags = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/StreamingDistribution/LoggingProperty.hs b/gen/Stratosphere/CloudFront/StreamingDistribution/LoggingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/StreamingDistribution/LoggingProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.CloudFront.StreamingDistribution.LoggingProperty (
+        LoggingProperty(..), mkLoggingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LoggingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-logging.html>
+    LoggingProperty {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-logging.html#cfn-cloudfront-streamingdistribution-logging-bucket>
+                     bucket :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-logging.html#cfn-cloudfront-streamingdistribution-logging-enabled>
+                     enabled :: (Value Prelude.Bool),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-logging.html#cfn-cloudfront-streamingdistribution-logging-prefix>
+                     prefix :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLoggingProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Bool -> Value Prelude.Text -> LoggingProperty
+mkLoggingProperty bucket enabled prefix
+  = LoggingProperty
+      {haddock_workaround_ = (), bucket = bucket, enabled = enabled,
+       prefix = prefix}
+instance ToResourceProperties LoggingProperty where
+  toResourceProperties LoggingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::StreamingDistribution.Logging",
+         supportsTags = Prelude.False,
+         properties = ["Bucket" JSON..= bucket, "Enabled" JSON..= enabled,
+                       "Prefix" JSON..= prefix]}
+instance JSON.ToJSON LoggingProperty where
+  toJSON LoggingProperty {..}
+    = JSON.object
+        ["Bucket" JSON..= bucket, "Enabled" JSON..= enabled,
+         "Prefix" JSON..= prefix]
+instance Property "Bucket" LoggingProperty where
+  type PropertyType "Bucket" LoggingProperty = Value Prelude.Text
+  set newValue LoggingProperty {..}
+    = LoggingProperty {bucket = newValue, ..}
+instance Property "Enabled" LoggingProperty where
+  type PropertyType "Enabled" LoggingProperty = Value Prelude.Bool
+  set newValue LoggingProperty {..}
+    = LoggingProperty {enabled = newValue, ..}
+instance Property "Prefix" LoggingProperty where
+  type PropertyType "Prefix" LoggingProperty = Value Prelude.Text
+  set newValue LoggingProperty {..}
+    = LoggingProperty {prefix = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/StreamingDistribution/LoggingProperty.hs-boot b/gen/Stratosphere/CloudFront/StreamingDistribution/LoggingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/StreamingDistribution/LoggingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.StreamingDistribution.LoggingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LoggingProperty :: Prelude.Type
+instance ToResourceProperties LoggingProperty
+instance Prelude.Eq LoggingProperty
+instance Prelude.Show LoggingProperty
+instance JSON.ToJSON LoggingProperty
diff --git a/gen/Stratosphere/CloudFront/StreamingDistribution/S3OriginProperty.hs b/gen/Stratosphere/CloudFront/StreamingDistribution/S3OriginProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/StreamingDistribution/S3OriginProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.CloudFront.StreamingDistribution.S3OriginProperty (
+        S3OriginProperty(..), mkS3OriginProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data S3OriginProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-s3origin.html>
+    S3OriginProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-s3origin.html#cfn-cloudfront-streamingdistribution-s3origin-domainname>
+                      domainName :: (Value Prelude.Text),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-s3origin.html#cfn-cloudfront-streamingdistribution-s3origin-originaccessidentity>
+                      originAccessIdentity :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkS3OriginProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> S3OriginProperty
+mkS3OriginProperty domainName originAccessIdentity
+  = S3OriginProperty
+      {haddock_workaround_ = (), domainName = domainName,
+       originAccessIdentity = originAccessIdentity}
+instance ToResourceProperties S3OriginProperty where
+  toResourceProperties S3OriginProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::StreamingDistribution.S3Origin",
+         supportsTags = Prelude.False,
+         properties = ["DomainName" JSON..= domainName,
+                       "OriginAccessIdentity" JSON..= originAccessIdentity]}
+instance JSON.ToJSON S3OriginProperty where
+  toJSON S3OriginProperty {..}
+    = JSON.object
+        ["DomainName" JSON..= domainName,
+         "OriginAccessIdentity" JSON..= originAccessIdentity]
+instance Property "DomainName" S3OriginProperty where
+  type PropertyType "DomainName" S3OriginProperty = Value Prelude.Text
+  set newValue S3OriginProperty {..}
+    = S3OriginProperty {domainName = newValue, ..}
+instance Property "OriginAccessIdentity" S3OriginProperty where
+  type PropertyType "OriginAccessIdentity" S3OriginProperty = Value Prelude.Text
+  set newValue S3OriginProperty {..}
+    = S3OriginProperty {originAccessIdentity = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/StreamingDistribution/S3OriginProperty.hs-boot b/gen/Stratosphere/CloudFront/StreamingDistribution/S3OriginProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/StreamingDistribution/S3OriginProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.StreamingDistribution.S3OriginProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data S3OriginProperty :: Prelude.Type
+instance ToResourceProperties S3OriginProperty
+instance Prelude.Eq S3OriginProperty
+instance Prelude.Show S3OriginProperty
+instance JSON.ToJSON S3OriginProperty
diff --git a/gen/Stratosphere/CloudFront/StreamingDistribution/StreamingDistributionConfigProperty.hs b/gen/Stratosphere/CloudFront/StreamingDistribution/StreamingDistributionConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/StreamingDistribution/StreamingDistributionConfigProperty.hs
@@ -0,0 +1,103 @@
+module Stratosphere.CloudFront.StreamingDistribution.StreamingDistributionConfigProperty (
+        module Exports, StreamingDistributionConfigProperty(..),
+        mkStreamingDistributionConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.StreamingDistribution.LoggingProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.StreamingDistribution.S3OriginProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudFront.StreamingDistribution.TrustedSignersProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data StreamingDistributionConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-streamingdistributionconfig.html>
+    StreamingDistributionConfigProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-streamingdistributionconfig.html#cfn-cloudfront-streamingdistribution-streamingdistributionconfig-aliases>
+                                         aliases :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-streamingdistributionconfig.html#cfn-cloudfront-streamingdistribution-streamingdistributionconfig-comment>
+                                         comment :: (Value Prelude.Text),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-streamingdistributionconfig.html#cfn-cloudfront-streamingdistribution-streamingdistributionconfig-enabled>
+                                         enabled :: (Value Prelude.Bool),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-streamingdistributionconfig.html#cfn-cloudfront-streamingdistribution-streamingdistributionconfig-logging>
+                                         logging :: (Prelude.Maybe LoggingProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-streamingdistributionconfig.html#cfn-cloudfront-streamingdistribution-streamingdistributionconfig-priceclass>
+                                         priceClass :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-streamingdistributionconfig.html#cfn-cloudfront-streamingdistribution-streamingdistributionconfig-s3origin>
+                                         s3Origin :: S3OriginProperty,
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-streamingdistributionconfig.html#cfn-cloudfront-streamingdistribution-streamingdistributionconfig-trustedsigners>
+                                         trustedSigners :: TrustedSignersProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStreamingDistributionConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Bool
+     -> S3OriginProperty
+        -> TrustedSignersProperty -> StreamingDistributionConfigProperty
+mkStreamingDistributionConfigProperty
+  comment
+  enabled
+  s3Origin
+  trustedSigners
+  = StreamingDistributionConfigProperty
+      {haddock_workaround_ = (), comment = comment, enabled = enabled,
+       s3Origin = s3Origin, trustedSigners = trustedSigners,
+       aliases = Prelude.Nothing, logging = Prelude.Nothing,
+       priceClass = Prelude.Nothing}
+instance ToResourceProperties StreamingDistributionConfigProperty where
+  toResourceProperties StreamingDistributionConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::StreamingDistribution.StreamingDistributionConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Comment" JSON..= comment, "Enabled" JSON..= enabled,
+                            "S3Origin" JSON..= s3Origin,
+                            "TrustedSigners" JSON..= trustedSigners]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Aliases" Prelude.<$> aliases,
+                               (JSON..=) "Logging" Prelude.<$> logging,
+                               (JSON..=) "PriceClass" Prelude.<$> priceClass]))}
+instance JSON.ToJSON StreamingDistributionConfigProperty where
+  toJSON StreamingDistributionConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Comment" JSON..= comment, "Enabled" JSON..= enabled,
+               "S3Origin" JSON..= s3Origin,
+               "TrustedSigners" JSON..= trustedSigners]
+              (Prelude.catMaybes
+                 [(JSON..=) "Aliases" Prelude.<$> aliases,
+                  (JSON..=) "Logging" Prelude.<$> logging,
+                  (JSON..=) "PriceClass" Prelude.<$> priceClass])))
+instance Property "Aliases" StreamingDistributionConfigProperty where
+  type PropertyType "Aliases" StreamingDistributionConfigProperty = ValueList Prelude.Text
+  set newValue StreamingDistributionConfigProperty {..}
+    = StreamingDistributionConfigProperty
+        {aliases = Prelude.pure newValue, ..}
+instance Property "Comment" StreamingDistributionConfigProperty where
+  type PropertyType "Comment" StreamingDistributionConfigProperty = Value Prelude.Text
+  set newValue StreamingDistributionConfigProperty {..}
+    = StreamingDistributionConfigProperty {comment = newValue, ..}
+instance Property "Enabled" StreamingDistributionConfigProperty where
+  type PropertyType "Enabled" StreamingDistributionConfigProperty = Value Prelude.Bool
+  set newValue StreamingDistributionConfigProperty {..}
+    = StreamingDistributionConfigProperty {enabled = newValue, ..}
+instance Property "Logging" StreamingDistributionConfigProperty where
+  type PropertyType "Logging" StreamingDistributionConfigProperty = LoggingProperty
+  set newValue StreamingDistributionConfigProperty {..}
+    = StreamingDistributionConfigProperty
+        {logging = Prelude.pure newValue, ..}
+instance Property "PriceClass" StreamingDistributionConfigProperty where
+  type PropertyType "PriceClass" StreamingDistributionConfigProperty = Value Prelude.Text
+  set newValue StreamingDistributionConfigProperty {..}
+    = StreamingDistributionConfigProperty
+        {priceClass = Prelude.pure newValue, ..}
+instance Property "S3Origin" StreamingDistributionConfigProperty where
+  type PropertyType "S3Origin" StreamingDistributionConfigProperty = S3OriginProperty
+  set newValue StreamingDistributionConfigProperty {..}
+    = StreamingDistributionConfigProperty {s3Origin = newValue, ..}
+instance Property "TrustedSigners" StreamingDistributionConfigProperty where
+  type PropertyType "TrustedSigners" StreamingDistributionConfigProperty = TrustedSignersProperty
+  set newValue StreamingDistributionConfigProperty {..}
+    = StreamingDistributionConfigProperty
+        {trustedSigners = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/StreamingDistribution/StreamingDistributionConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/StreamingDistribution/StreamingDistributionConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/StreamingDistribution/StreamingDistributionConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.StreamingDistribution.StreamingDistributionConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data StreamingDistributionConfigProperty :: Prelude.Type
+instance ToResourceProperties StreamingDistributionConfigProperty
+instance Prelude.Eq StreamingDistributionConfigProperty
+instance Prelude.Show StreamingDistributionConfigProperty
+instance JSON.ToJSON StreamingDistributionConfigProperty
diff --git a/gen/Stratosphere/CloudFront/StreamingDistribution/TrustedSignersProperty.hs b/gen/Stratosphere/CloudFront/StreamingDistribution/TrustedSignersProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/StreamingDistribution/TrustedSignersProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.CloudFront.StreamingDistribution.TrustedSignersProperty (
+        TrustedSignersProperty(..), mkTrustedSignersProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TrustedSignersProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-trustedsigners.html>
+    TrustedSignersProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-trustedsigners.html#cfn-cloudfront-streamingdistribution-trustedsigners-awsaccountnumbers>
+                            awsAccountNumbers :: (Prelude.Maybe (ValueList Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-streamingdistribution-trustedsigners.html#cfn-cloudfront-streamingdistribution-trustedsigners-enabled>
+                            enabled :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTrustedSignersProperty ::
+  Value Prelude.Bool -> TrustedSignersProperty
+mkTrustedSignersProperty enabled
+  = TrustedSignersProperty
+      {haddock_workaround_ = (), enabled = enabled,
+       awsAccountNumbers = Prelude.Nothing}
+instance ToResourceProperties TrustedSignersProperty where
+  toResourceProperties TrustedSignersProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::StreamingDistribution.TrustedSigners",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Enabled" JSON..= enabled]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AwsAccountNumbers" Prelude.<$> awsAccountNumbers]))}
+instance JSON.ToJSON TrustedSignersProperty where
+  toJSON TrustedSignersProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Enabled" JSON..= enabled]
+              (Prelude.catMaybes
+                 [(JSON..=) "AwsAccountNumbers" Prelude.<$> awsAccountNumbers])))
+instance Property "AwsAccountNumbers" TrustedSignersProperty where
+  type PropertyType "AwsAccountNumbers" TrustedSignersProperty = ValueList Prelude.Text
+  set newValue TrustedSignersProperty {..}
+    = TrustedSignersProperty
+        {awsAccountNumbers = Prelude.pure newValue, ..}
+instance Property "Enabled" TrustedSignersProperty where
+  type PropertyType "Enabled" TrustedSignersProperty = Value Prelude.Bool
+  set newValue TrustedSignersProperty {..}
+    = TrustedSignersProperty {enabled = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/StreamingDistribution/TrustedSignersProperty.hs-boot b/gen/Stratosphere/CloudFront/StreamingDistribution/TrustedSignersProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/StreamingDistribution/TrustedSignersProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.StreamingDistribution.TrustedSignersProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TrustedSignersProperty :: Prelude.Type
+instance ToResourceProperties TrustedSignersProperty
+instance Prelude.Eq TrustedSignersProperty
+instance Prelude.Show TrustedSignersProperty
+instance JSON.ToJSON TrustedSignersProperty
diff --git a/gen/Stratosphere/CloudFront/VpcOrigin.hs b/gen/Stratosphere/CloudFront/VpcOrigin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/VpcOrigin.hs
@@ -0,0 +1,47 @@
+module Stratosphere.CloudFront.VpcOrigin (
+        module Exports, VpcOrigin(..), mkVpcOrigin
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudFront.VpcOrigin.VpcOriginEndpointConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+data VpcOrigin
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-vpcorigin.html>
+    VpcOrigin {haddock_workaround_ :: (),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-vpcorigin.html#cfn-cloudfront-vpcorigin-tags>
+               tags :: (Prelude.Maybe [Tag]),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-vpcorigin.html#cfn-cloudfront-vpcorigin-vpcoriginendpointconfig>
+               vpcOriginEndpointConfig :: VpcOriginEndpointConfigProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVpcOrigin :: VpcOriginEndpointConfigProperty -> VpcOrigin
+mkVpcOrigin vpcOriginEndpointConfig
+  = VpcOrigin
+      {haddock_workaround_ = (),
+       vpcOriginEndpointConfig = vpcOriginEndpointConfig,
+       tags = Prelude.Nothing}
+instance ToResourceProperties VpcOrigin where
+  toResourceProperties VpcOrigin {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::VpcOrigin",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["VpcOriginEndpointConfig" JSON..= vpcOriginEndpointConfig]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON VpcOrigin where
+  toJSON VpcOrigin {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["VpcOriginEndpointConfig" JSON..= vpcOriginEndpointConfig]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Tags" VpcOrigin where
+  type PropertyType "Tags" VpcOrigin = [Tag]
+  set newValue VpcOrigin {..}
+    = VpcOrigin {tags = Prelude.pure newValue, ..}
+instance Property "VpcOriginEndpointConfig" VpcOrigin where
+  type PropertyType "VpcOriginEndpointConfig" VpcOrigin = VpcOriginEndpointConfigProperty
+  set newValue VpcOrigin {..}
+    = VpcOrigin {vpcOriginEndpointConfig = newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/VpcOrigin/VpcOriginEndpointConfigProperty.hs b/gen/Stratosphere/CloudFront/VpcOrigin/VpcOriginEndpointConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/VpcOrigin/VpcOriginEndpointConfigProperty.hs
@@ -0,0 +1,86 @@
+module Stratosphere.CloudFront.VpcOrigin.VpcOriginEndpointConfigProperty (
+        VpcOriginEndpointConfigProperty(..),
+        mkVpcOriginEndpointConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VpcOriginEndpointConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-vpcorigin-vpcoriginendpointconfig.html>
+    VpcOriginEndpointConfigProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-vpcorigin-vpcoriginendpointconfig.html#cfn-cloudfront-vpcorigin-vpcoriginendpointconfig-arn>
+                                     arn :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-vpcorigin-vpcoriginendpointconfig.html#cfn-cloudfront-vpcorigin-vpcoriginendpointconfig-httpport>
+                                     hTTPPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-vpcorigin-vpcoriginendpointconfig.html#cfn-cloudfront-vpcorigin-vpcoriginendpointconfig-httpsport>
+                                     hTTPSPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-vpcorigin-vpcoriginendpointconfig.html#cfn-cloudfront-vpcorigin-vpcoriginendpointconfig-name>
+                                     name :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-vpcorigin-vpcoriginendpointconfig.html#cfn-cloudfront-vpcorigin-vpcoriginendpointconfig-originprotocolpolicy>
+                                     originProtocolPolicy :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-vpcorigin-vpcoriginendpointconfig.html#cfn-cloudfront-vpcorigin-vpcoriginendpointconfig-originsslprotocols>
+                                     originSSLProtocols :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVpcOriginEndpointConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> VpcOriginEndpointConfigProperty
+mkVpcOriginEndpointConfigProperty arn name
+  = VpcOriginEndpointConfigProperty
+      {haddock_workaround_ = (), arn = arn, name = name,
+       hTTPPort = Prelude.Nothing, hTTPSPort = Prelude.Nothing,
+       originProtocolPolicy = Prelude.Nothing,
+       originSSLProtocols = Prelude.Nothing}
+instance ToResourceProperties VpcOriginEndpointConfigProperty where
+  toResourceProperties VpcOriginEndpointConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudFront::VpcOrigin.VpcOriginEndpointConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Arn" JSON..= arn, "Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "HTTPPort" Prelude.<$> hTTPPort,
+                               (JSON..=) "HTTPSPort" Prelude.<$> hTTPSPort,
+                               (JSON..=) "OriginProtocolPolicy" Prelude.<$> originProtocolPolicy,
+                               (JSON..=) "OriginSSLProtocols" Prelude.<$> originSSLProtocols]))}
+instance JSON.ToJSON VpcOriginEndpointConfigProperty where
+  toJSON VpcOriginEndpointConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Arn" JSON..= arn, "Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "HTTPPort" Prelude.<$> hTTPPort,
+                  (JSON..=) "HTTPSPort" Prelude.<$> hTTPSPort,
+                  (JSON..=) "OriginProtocolPolicy" Prelude.<$> originProtocolPolicy,
+                  (JSON..=) "OriginSSLProtocols" Prelude.<$> originSSLProtocols])))
+instance Property "Arn" VpcOriginEndpointConfigProperty where
+  type PropertyType "Arn" VpcOriginEndpointConfigProperty = Value Prelude.Text
+  set newValue VpcOriginEndpointConfigProperty {..}
+    = VpcOriginEndpointConfigProperty {arn = newValue, ..}
+instance Property "HTTPPort" VpcOriginEndpointConfigProperty where
+  type PropertyType "HTTPPort" VpcOriginEndpointConfigProperty = Value Prelude.Integer
+  set newValue VpcOriginEndpointConfigProperty {..}
+    = VpcOriginEndpointConfigProperty
+        {hTTPPort = Prelude.pure newValue, ..}
+instance Property "HTTPSPort" VpcOriginEndpointConfigProperty where
+  type PropertyType "HTTPSPort" VpcOriginEndpointConfigProperty = Value Prelude.Integer
+  set newValue VpcOriginEndpointConfigProperty {..}
+    = VpcOriginEndpointConfigProperty
+        {hTTPSPort = Prelude.pure newValue, ..}
+instance Property "Name" VpcOriginEndpointConfigProperty where
+  type PropertyType "Name" VpcOriginEndpointConfigProperty = Value Prelude.Text
+  set newValue VpcOriginEndpointConfigProperty {..}
+    = VpcOriginEndpointConfigProperty {name = newValue, ..}
+instance Property "OriginProtocolPolicy" VpcOriginEndpointConfigProperty where
+  type PropertyType "OriginProtocolPolicy" VpcOriginEndpointConfigProperty = Value Prelude.Text
+  set newValue VpcOriginEndpointConfigProperty {..}
+    = VpcOriginEndpointConfigProperty
+        {originProtocolPolicy = Prelude.pure newValue, ..}
+instance Property "OriginSSLProtocols" VpcOriginEndpointConfigProperty where
+  type PropertyType "OriginSSLProtocols" VpcOriginEndpointConfigProperty = ValueList Prelude.Text
+  set newValue VpcOriginEndpointConfigProperty {..}
+    = VpcOriginEndpointConfigProperty
+        {originSSLProtocols = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudFront/VpcOrigin/VpcOriginEndpointConfigProperty.hs-boot b/gen/Stratosphere/CloudFront/VpcOrigin/VpcOriginEndpointConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudFront/VpcOrigin/VpcOriginEndpointConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudFront.VpcOrigin.VpcOriginEndpointConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VpcOriginEndpointConfigProperty :: Prelude.Type
+instance ToResourceProperties VpcOriginEndpointConfigProperty
+instance Prelude.Eq VpcOriginEndpointConfigProperty
+instance Prelude.Show VpcOriginEndpointConfigProperty
+instance JSON.ToJSON VpcOriginEndpointConfigProperty
diff --git a/stratosphere-cloudfront.cabal b/stratosphere-cloudfront.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-cloudfront.cabal
@@ -0,0 +1,181 @@
+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-cloudfront
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS CloudFront.
+description:    Integration into stratosphere to generate resources and properties for AWS CloudFront
+category:       AWS, Cloud, CloudFront
+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.CloudFront.AnycastIpList
+      Stratosphere.CloudFront.AnycastIpList.AnycastIpListProperty
+      Stratosphere.CloudFront.AnycastIpList.TagsProperty
+      Stratosphere.CloudFront.CachePolicy
+      Stratosphere.CloudFront.CachePolicy.CachePolicyConfigProperty
+      Stratosphere.CloudFront.CachePolicy.CookiesConfigProperty
+      Stratosphere.CloudFront.CachePolicy.HeadersConfigProperty
+      Stratosphere.CloudFront.CachePolicy.ParametersInCacheKeyAndForwardedToOriginProperty
+      Stratosphere.CloudFront.CachePolicy.QueryStringsConfigProperty
+      Stratosphere.CloudFront.CloudFrontOriginAccessIdentity
+      Stratosphere.CloudFront.CloudFrontOriginAccessIdentity.CloudFrontOriginAccessIdentityConfigProperty
+      Stratosphere.CloudFront.ConnectionGroup
+      Stratosphere.CloudFront.ContinuousDeploymentPolicy
+      Stratosphere.CloudFront.ContinuousDeploymentPolicy.ContinuousDeploymentPolicyConfigProperty
+      Stratosphere.CloudFront.ContinuousDeploymentPolicy.SessionStickinessConfigProperty
+      Stratosphere.CloudFront.ContinuousDeploymentPolicy.SingleHeaderConfigProperty
+      Stratosphere.CloudFront.ContinuousDeploymentPolicy.SingleHeaderPolicyConfigProperty
+      Stratosphere.CloudFront.ContinuousDeploymentPolicy.SingleWeightConfigProperty
+      Stratosphere.CloudFront.ContinuousDeploymentPolicy.SingleWeightPolicyConfigProperty
+      Stratosphere.CloudFront.ContinuousDeploymentPolicy.TrafficConfigProperty
+      Stratosphere.CloudFront.Distribution
+      Stratosphere.CloudFront.Distribution.CacheBehaviorProperty
+      Stratosphere.CloudFront.Distribution.CookiesProperty
+      Stratosphere.CloudFront.Distribution.CustomErrorResponseProperty
+      Stratosphere.CloudFront.Distribution.CustomOriginConfigProperty
+      Stratosphere.CloudFront.Distribution.DefaultCacheBehaviorProperty
+      Stratosphere.CloudFront.Distribution.DefinitionProperty
+      Stratosphere.CloudFront.Distribution.DistributionConfigProperty
+      Stratosphere.CloudFront.Distribution.ForwardedValuesProperty
+      Stratosphere.CloudFront.Distribution.FunctionAssociationProperty
+      Stratosphere.CloudFront.Distribution.GeoRestrictionProperty
+      Stratosphere.CloudFront.Distribution.GrpcConfigProperty
+      Stratosphere.CloudFront.Distribution.LambdaFunctionAssociationProperty
+      Stratosphere.CloudFront.Distribution.LegacyCustomOriginProperty
+      Stratosphere.CloudFront.Distribution.LegacyS3OriginProperty
+      Stratosphere.CloudFront.Distribution.LoggingProperty
+      Stratosphere.CloudFront.Distribution.OriginCustomHeaderProperty
+      Stratosphere.CloudFront.Distribution.OriginGroupFailoverCriteriaProperty
+      Stratosphere.CloudFront.Distribution.OriginGroupMemberProperty
+      Stratosphere.CloudFront.Distribution.OriginGroupMembersProperty
+      Stratosphere.CloudFront.Distribution.OriginGroupProperty
+      Stratosphere.CloudFront.Distribution.OriginGroupsProperty
+      Stratosphere.CloudFront.Distribution.OriginProperty
+      Stratosphere.CloudFront.Distribution.OriginShieldProperty
+      Stratosphere.CloudFront.Distribution.ParameterDefinitionProperty
+      Stratosphere.CloudFront.Distribution.RestrictionsProperty
+      Stratosphere.CloudFront.Distribution.S3OriginConfigProperty
+      Stratosphere.CloudFront.Distribution.StatusCodesProperty
+      Stratosphere.CloudFront.Distribution.StringSchemaProperty
+      Stratosphere.CloudFront.Distribution.TenantConfigProperty
+      Stratosphere.CloudFront.Distribution.ViewerCertificateProperty
+      Stratosphere.CloudFront.Distribution.VpcOriginConfigProperty
+      Stratosphere.CloudFront.DistributionTenant
+      Stratosphere.CloudFront.DistributionTenant.CertificateProperty
+      Stratosphere.CloudFront.DistributionTenant.CustomizationsProperty
+      Stratosphere.CloudFront.DistributionTenant.DomainResultProperty
+      Stratosphere.CloudFront.DistributionTenant.GeoRestrictionCustomizationProperty
+      Stratosphere.CloudFront.DistributionTenant.ManagedCertificateRequestProperty
+      Stratosphere.CloudFront.DistributionTenant.ParameterProperty
+      Stratosphere.CloudFront.DistributionTenant.WebAclCustomizationProperty
+      Stratosphere.CloudFront.Function
+      Stratosphere.CloudFront.Function.FunctionConfigProperty
+      Stratosphere.CloudFront.Function.FunctionMetadataProperty
+      Stratosphere.CloudFront.Function.KeyValueStoreAssociationProperty
+      Stratosphere.CloudFront.KeyGroup
+      Stratosphere.CloudFront.KeyGroup.KeyGroupConfigProperty
+      Stratosphere.CloudFront.KeyValueStore
+      Stratosphere.CloudFront.KeyValueStore.ImportSourceProperty
+      Stratosphere.CloudFront.MonitoringSubscription
+      Stratosphere.CloudFront.MonitoringSubscription.MonitoringSubscriptionProperty
+      Stratosphere.CloudFront.MonitoringSubscription.RealtimeMetricsSubscriptionConfigProperty
+      Stratosphere.CloudFront.OriginAccessControl
+      Stratosphere.CloudFront.OriginAccessControl.OriginAccessControlConfigProperty
+      Stratosphere.CloudFront.OriginRequestPolicy
+      Stratosphere.CloudFront.OriginRequestPolicy.CookiesConfigProperty
+      Stratosphere.CloudFront.OriginRequestPolicy.HeadersConfigProperty
+      Stratosphere.CloudFront.OriginRequestPolicy.OriginRequestPolicyConfigProperty
+      Stratosphere.CloudFront.OriginRequestPolicy.QueryStringsConfigProperty
+      Stratosphere.CloudFront.PublicKey
+      Stratosphere.CloudFront.PublicKey.PublicKeyConfigProperty
+      Stratosphere.CloudFront.RealtimeLogConfig
+      Stratosphere.CloudFront.RealtimeLogConfig.EndPointProperty
+      Stratosphere.CloudFront.RealtimeLogConfig.KinesisStreamConfigProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy
+      Stratosphere.CloudFront.ResponseHeadersPolicy.AccessControlAllowHeadersProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.AccessControlAllowMethodsProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.AccessControlAllowOriginsProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.AccessControlExposeHeadersProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.ContentSecurityPolicyProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.ContentTypeOptionsProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.CorsConfigProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.CustomHeaderProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.CustomHeadersConfigProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.FrameOptionsProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.ReferrerPolicyProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.RemoveHeaderProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.RemoveHeadersConfigProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.ResponseHeadersPolicyConfigProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.SecurityHeadersConfigProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.ServerTimingHeadersConfigProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.StrictTransportSecurityProperty
+      Stratosphere.CloudFront.ResponseHeadersPolicy.XSSProtectionProperty
+      Stratosphere.CloudFront.StreamingDistribution
+      Stratosphere.CloudFront.StreamingDistribution.LoggingProperty
+      Stratosphere.CloudFront.StreamingDistribution.S3OriginProperty
+      Stratosphere.CloudFront.StreamingDistribution.StreamingDistributionConfigProperty
+      Stratosphere.CloudFront.StreamingDistribution.TrustedSignersProperty
+      Stratosphere.CloudFront.VpcOrigin
+      Stratosphere.CloudFront.VpcOrigin.VpcOriginEndpointConfigProperty
+  other-modules:
+      Paths_stratosphere_cloudfront
+  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
