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/DynamoDB/GlobalTable.hs b/gen/Stratosphere/DynamoDB/GlobalTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable.hs
@@ -0,0 +1,189 @@
+module Stratosphere.DynamoDB.GlobalTable (
+        module Exports, GlobalTable(..), mkGlobalTable
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.AttributeDefinitionProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.GlobalSecondaryIndexProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.GlobalTableWitnessProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.KeySchemaProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.LocalSecondaryIndexProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ReplicaSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.SSESpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.StreamSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.TimeToLiveSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.WarmThroughputProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.WriteOnDemandThroughputSettingsProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.WriteProvisionedThroughputSettingsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data GlobalTable
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html>
+    GlobalTable {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html#cfn-dynamodb-globaltable-attributedefinitions>
+                 attributeDefinitions :: [AttributeDefinitionProperty],
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html#cfn-dynamodb-globaltable-billingmode>
+                 billingMode :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html#cfn-dynamodb-globaltable-globalsecondaryindexes>
+                 globalSecondaryIndexes :: (Prelude.Maybe [GlobalSecondaryIndexProperty]),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html#cfn-dynamodb-globaltable-globaltablewitnesses>
+                 globalTableWitnesses :: (Prelude.Maybe [GlobalTableWitnessProperty]),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html#cfn-dynamodb-globaltable-keyschema>
+                 keySchema :: [KeySchemaProperty],
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html#cfn-dynamodb-globaltable-localsecondaryindexes>
+                 localSecondaryIndexes :: (Prelude.Maybe [LocalSecondaryIndexProperty]),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html#cfn-dynamodb-globaltable-multiregionconsistency>
+                 multiRegionConsistency :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html#cfn-dynamodb-globaltable-replicas>
+                 replicas :: [ReplicaSpecificationProperty],
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html#cfn-dynamodb-globaltable-ssespecification>
+                 sSESpecification :: (Prelude.Maybe SSESpecificationProperty),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html#cfn-dynamodb-globaltable-streamspecification>
+                 streamSpecification :: (Prelude.Maybe StreamSpecificationProperty),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html#cfn-dynamodb-globaltable-tablename>
+                 tableName :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html#cfn-dynamodb-globaltable-timetolivespecification>
+                 timeToLiveSpecification :: (Prelude.Maybe TimeToLiveSpecificationProperty),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html#cfn-dynamodb-globaltable-warmthroughput>
+                 warmThroughput :: (Prelude.Maybe WarmThroughputProperty),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html#cfn-dynamodb-globaltable-writeondemandthroughputsettings>
+                 writeOnDemandThroughputSettings :: (Prelude.Maybe WriteOnDemandThroughputSettingsProperty),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html#cfn-dynamodb-globaltable-writeprovisionedthroughputsettings>
+                 writeProvisionedThroughputSettings :: (Prelude.Maybe WriteProvisionedThroughputSettingsProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGlobalTable ::
+  [AttributeDefinitionProperty]
+  -> [KeySchemaProperty]
+     -> [ReplicaSpecificationProperty] -> GlobalTable
+mkGlobalTable attributeDefinitions keySchema replicas
+  = GlobalTable
+      {haddock_workaround_ = (),
+       attributeDefinitions = attributeDefinitions, keySchema = keySchema,
+       replicas = replicas, billingMode = Prelude.Nothing,
+       globalSecondaryIndexes = Prelude.Nothing,
+       globalTableWitnesses = Prelude.Nothing,
+       localSecondaryIndexes = Prelude.Nothing,
+       multiRegionConsistency = Prelude.Nothing,
+       sSESpecification = Prelude.Nothing,
+       streamSpecification = Prelude.Nothing, tableName = Prelude.Nothing,
+       timeToLiveSpecification = Prelude.Nothing,
+       warmThroughput = Prelude.Nothing,
+       writeOnDemandThroughputSettings = Prelude.Nothing,
+       writeProvisionedThroughputSettings = Prelude.Nothing}
+instance ToResourceProperties GlobalTable where
+  toResourceProperties GlobalTable {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AttributeDefinitions" JSON..= attributeDefinitions,
+                            "KeySchema" JSON..= keySchema, "Replicas" JSON..= replicas]
+                           (Prelude.catMaybes
+                              [(JSON..=) "BillingMode" Prelude.<$> billingMode,
+                               (JSON..=) "GlobalSecondaryIndexes"
+                                 Prelude.<$> globalSecondaryIndexes,
+                               (JSON..=) "GlobalTableWitnesses" Prelude.<$> globalTableWitnesses,
+                               (JSON..=) "LocalSecondaryIndexes"
+                                 Prelude.<$> localSecondaryIndexes,
+                               (JSON..=) "MultiRegionConsistency"
+                                 Prelude.<$> multiRegionConsistency,
+                               (JSON..=) "SSESpecification" Prelude.<$> sSESpecification,
+                               (JSON..=) "StreamSpecification" Prelude.<$> streamSpecification,
+                               (JSON..=) "TableName" Prelude.<$> tableName,
+                               (JSON..=) "TimeToLiveSpecification"
+                                 Prelude.<$> timeToLiveSpecification,
+                               (JSON..=) "WarmThroughput" Prelude.<$> warmThroughput,
+                               (JSON..=) "WriteOnDemandThroughputSettings"
+                                 Prelude.<$> writeOnDemandThroughputSettings,
+                               (JSON..=) "WriteProvisionedThroughputSettings"
+                                 Prelude.<$> writeProvisionedThroughputSettings]))}
+instance JSON.ToJSON GlobalTable where
+  toJSON GlobalTable {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AttributeDefinitions" JSON..= attributeDefinitions,
+               "KeySchema" JSON..= keySchema, "Replicas" JSON..= replicas]
+              (Prelude.catMaybes
+                 [(JSON..=) "BillingMode" Prelude.<$> billingMode,
+                  (JSON..=) "GlobalSecondaryIndexes"
+                    Prelude.<$> globalSecondaryIndexes,
+                  (JSON..=) "GlobalTableWitnesses" Prelude.<$> globalTableWitnesses,
+                  (JSON..=) "LocalSecondaryIndexes"
+                    Prelude.<$> localSecondaryIndexes,
+                  (JSON..=) "MultiRegionConsistency"
+                    Prelude.<$> multiRegionConsistency,
+                  (JSON..=) "SSESpecification" Prelude.<$> sSESpecification,
+                  (JSON..=) "StreamSpecification" Prelude.<$> streamSpecification,
+                  (JSON..=) "TableName" Prelude.<$> tableName,
+                  (JSON..=) "TimeToLiveSpecification"
+                    Prelude.<$> timeToLiveSpecification,
+                  (JSON..=) "WarmThroughput" Prelude.<$> warmThroughput,
+                  (JSON..=) "WriteOnDemandThroughputSettings"
+                    Prelude.<$> writeOnDemandThroughputSettings,
+                  (JSON..=) "WriteProvisionedThroughputSettings"
+                    Prelude.<$> writeProvisionedThroughputSettings])))
+instance Property "AttributeDefinitions" GlobalTable where
+  type PropertyType "AttributeDefinitions" GlobalTable = [AttributeDefinitionProperty]
+  set newValue GlobalTable {..}
+    = GlobalTable {attributeDefinitions = newValue, ..}
+instance Property "BillingMode" GlobalTable where
+  type PropertyType "BillingMode" GlobalTable = Value Prelude.Text
+  set newValue GlobalTable {..}
+    = GlobalTable {billingMode = Prelude.pure newValue, ..}
+instance Property "GlobalSecondaryIndexes" GlobalTable where
+  type PropertyType "GlobalSecondaryIndexes" GlobalTable = [GlobalSecondaryIndexProperty]
+  set newValue GlobalTable {..}
+    = GlobalTable {globalSecondaryIndexes = Prelude.pure newValue, ..}
+instance Property "GlobalTableWitnesses" GlobalTable where
+  type PropertyType "GlobalTableWitnesses" GlobalTable = [GlobalTableWitnessProperty]
+  set newValue GlobalTable {..}
+    = GlobalTable {globalTableWitnesses = Prelude.pure newValue, ..}
+instance Property "KeySchema" GlobalTable where
+  type PropertyType "KeySchema" GlobalTable = [KeySchemaProperty]
+  set newValue GlobalTable {..}
+    = GlobalTable {keySchema = newValue, ..}
+instance Property "LocalSecondaryIndexes" GlobalTable where
+  type PropertyType "LocalSecondaryIndexes" GlobalTable = [LocalSecondaryIndexProperty]
+  set newValue GlobalTable {..}
+    = GlobalTable {localSecondaryIndexes = Prelude.pure newValue, ..}
+instance Property "MultiRegionConsistency" GlobalTable where
+  type PropertyType "MultiRegionConsistency" GlobalTable = Value Prelude.Text
+  set newValue GlobalTable {..}
+    = GlobalTable {multiRegionConsistency = Prelude.pure newValue, ..}
+instance Property "Replicas" GlobalTable where
+  type PropertyType "Replicas" GlobalTable = [ReplicaSpecificationProperty]
+  set newValue GlobalTable {..}
+    = GlobalTable {replicas = newValue, ..}
+instance Property "SSESpecification" GlobalTable where
+  type PropertyType "SSESpecification" GlobalTable = SSESpecificationProperty
+  set newValue GlobalTable {..}
+    = GlobalTable {sSESpecification = Prelude.pure newValue, ..}
+instance Property "StreamSpecification" GlobalTable where
+  type PropertyType "StreamSpecification" GlobalTable = StreamSpecificationProperty
+  set newValue GlobalTable {..}
+    = GlobalTable {streamSpecification = Prelude.pure newValue, ..}
+instance Property "TableName" GlobalTable where
+  type PropertyType "TableName" GlobalTable = Value Prelude.Text
+  set newValue GlobalTable {..}
+    = GlobalTable {tableName = Prelude.pure newValue, ..}
+instance Property "TimeToLiveSpecification" GlobalTable where
+  type PropertyType "TimeToLiveSpecification" GlobalTable = TimeToLiveSpecificationProperty
+  set newValue GlobalTable {..}
+    = GlobalTable {timeToLiveSpecification = Prelude.pure newValue, ..}
+instance Property "WarmThroughput" GlobalTable where
+  type PropertyType "WarmThroughput" GlobalTable = WarmThroughputProperty
+  set newValue GlobalTable {..}
+    = GlobalTable {warmThroughput = Prelude.pure newValue, ..}
+instance Property "WriteOnDemandThroughputSettings" GlobalTable where
+  type PropertyType "WriteOnDemandThroughputSettings" GlobalTable = WriteOnDemandThroughputSettingsProperty
+  set newValue GlobalTable {..}
+    = GlobalTable
+        {writeOnDemandThroughputSettings = Prelude.pure newValue, ..}
+instance Property "WriteProvisionedThroughputSettings" GlobalTable where
+  type PropertyType "WriteProvisionedThroughputSettings" GlobalTable = WriteProvisionedThroughputSettingsProperty
+  set newValue GlobalTable {..}
+    = GlobalTable
+        {writeProvisionedThroughputSettings = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/AttributeDefinitionProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/AttributeDefinitionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/AttributeDefinitionProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.DynamoDB.GlobalTable.AttributeDefinitionProperty (
+        AttributeDefinitionProperty(..), mkAttributeDefinitionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AttributeDefinitionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-attributedefinition.html>
+    AttributeDefinitionProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-attributedefinition.html#cfn-dynamodb-globaltable-attributedefinition-attributename>
+                                 attributeName :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-attributedefinition.html#cfn-dynamodb-globaltable-attributedefinition-attributetype>
+                                 attributeType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAttributeDefinitionProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> AttributeDefinitionProperty
+mkAttributeDefinitionProperty attributeName attributeType
+  = AttributeDefinitionProperty
+      {haddock_workaround_ = (), attributeName = attributeName,
+       attributeType = attributeType}
+instance ToResourceProperties AttributeDefinitionProperty where
+  toResourceProperties AttributeDefinitionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.AttributeDefinition",
+         supportsTags = Prelude.False,
+         properties = ["AttributeName" JSON..= attributeName,
+                       "AttributeType" JSON..= attributeType]}
+instance JSON.ToJSON AttributeDefinitionProperty where
+  toJSON AttributeDefinitionProperty {..}
+    = JSON.object
+        ["AttributeName" JSON..= attributeName,
+         "AttributeType" JSON..= attributeType]
+instance Property "AttributeName" AttributeDefinitionProperty where
+  type PropertyType "AttributeName" AttributeDefinitionProperty = Value Prelude.Text
+  set newValue AttributeDefinitionProperty {..}
+    = AttributeDefinitionProperty {attributeName = newValue, ..}
+instance Property "AttributeType" AttributeDefinitionProperty where
+  type PropertyType "AttributeType" AttributeDefinitionProperty = Value Prelude.Text
+  set newValue AttributeDefinitionProperty {..}
+    = AttributeDefinitionProperty {attributeType = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/AttributeDefinitionProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/AttributeDefinitionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/AttributeDefinitionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.AttributeDefinitionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AttributeDefinitionProperty :: Prelude.Type
+instance ToResourceProperties AttributeDefinitionProperty
+instance Prelude.Eq AttributeDefinitionProperty
+instance Prelude.Show AttributeDefinitionProperty
+instance JSON.ToJSON AttributeDefinitionProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/CapacityAutoScalingSettingsProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/CapacityAutoScalingSettingsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/CapacityAutoScalingSettingsProperty.hs
@@ -0,0 +1,78 @@
+module Stratosphere.DynamoDB.GlobalTable.CapacityAutoScalingSettingsProperty (
+        module Exports, CapacityAutoScalingSettingsProperty(..),
+        mkCapacityAutoScalingSettingsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.TargetTrackingScalingPolicyConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CapacityAutoScalingSettingsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-capacityautoscalingsettings.html>
+    CapacityAutoScalingSettingsProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-capacityautoscalingsettings.html#cfn-dynamodb-globaltable-capacityautoscalingsettings-maxcapacity>
+                                         maxCapacity :: (Value Prelude.Integer),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-capacityautoscalingsettings.html#cfn-dynamodb-globaltable-capacityautoscalingsettings-mincapacity>
+                                         minCapacity :: (Value Prelude.Integer),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-capacityautoscalingsettings.html#cfn-dynamodb-globaltable-capacityautoscalingsettings-seedcapacity>
+                                         seedCapacity :: (Prelude.Maybe (Value Prelude.Integer)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-capacityautoscalingsettings.html#cfn-dynamodb-globaltable-capacityautoscalingsettings-targettrackingscalingpolicyconfiguration>
+                                         targetTrackingScalingPolicyConfiguration :: TargetTrackingScalingPolicyConfigurationProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityAutoScalingSettingsProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Integer
+     -> TargetTrackingScalingPolicyConfigurationProperty
+        -> CapacityAutoScalingSettingsProperty
+mkCapacityAutoScalingSettingsProperty
+  maxCapacity
+  minCapacity
+  targetTrackingScalingPolicyConfiguration
+  = CapacityAutoScalingSettingsProperty
+      {haddock_workaround_ = (), maxCapacity = maxCapacity,
+       minCapacity = minCapacity,
+       targetTrackingScalingPolicyConfiguration = targetTrackingScalingPolicyConfiguration,
+       seedCapacity = Prelude.Nothing}
+instance ToResourceProperties CapacityAutoScalingSettingsProperty where
+  toResourceProperties CapacityAutoScalingSettingsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.CapacityAutoScalingSettings",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["MaxCapacity" JSON..= maxCapacity,
+                            "MinCapacity" JSON..= minCapacity,
+                            "TargetTrackingScalingPolicyConfiguration"
+                              JSON..= targetTrackingScalingPolicyConfiguration]
+                           (Prelude.catMaybes
+                              [(JSON..=) "SeedCapacity" Prelude.<$> seedCapacity]))}
+instance JSON.ToJSON CapacityAutoScalingSettingsProperty where
+  toJSON CapacityAutoScalingSettingsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["MaxCapacity" JSON..= maxCapacity,
+               "MinCapacity" JSON..= minCapacity,
+               "TargetTrackingScalingPolicyConfiguration"
+                 JSON..= targetTrackingScalingPolicyConfiguration]
+              (Prelude.catMaybes
+                 [(JSON..=) "SeedCapacity" Prelude.<$> seedCapacity])))
+instance Property "MaxCapacity" CapacityAutoScalingSettingsProperty where
+  type PropertyType "MaxCapacity" CapacityAutoScalingSettingsProperty = Value Prelude.Integer
+  set newValue CapacityAutoScalingSettingsProperty {..}
+    = CapacityAutoScalingSettingsProperty {maxCapacity = newValue, ..}
+instance Property "MinCapacity" CapacityAutoScalingSettingsProperty where
+  type PropertyType "MinCapacity" CapacityAutoScalingSettingsProperty = Value Prelude.Integer
+  set newValue CapacityAutoScalingSettingsProperty {..}
+    = CapacityAutoScalingSettingsProperty {minCapacity = newValue, ..}
+instance Property "SeedCapacity" CapacityAutoScalingSettingsProperty where
+  type PropertyType "SeedCapacity" CapacityAutoScalingSettingsProperty = Value Prelude.Integer
+  set newValue CapacityAutoScalingSettingsProperty {..}
+    = CapacityAutoScalingSettingsProperty
+        {seedCapacity = Prelude.pure newValue, ..}
+instance Property "TargetTrackingScalingPolicyConfiguration" CapacityAutoScalingSettingsProperty where
+  type PropertyType "TargetTrackingScalingPolicyConfiguration" CapacityAutoScalingSettingsProperty = TargetTrackingScalingPolicyConfigurationProperty
+  set newValue CapacityAutoScalingSettingsProperty {..}
+    = CapacityAutoScalingSettingsProperty
+        {targetTrackingScalingPolicyConfiguration = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/CapacityAutoScalingSettingsProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/CapacityAutoScalingSettingsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/CapacityAutoScalingSettingsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.CapacityAutoScalingSettingsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CapacityAutoScalingSettingsProperty :: Prelude.Type
+instance ToResourceProperties CapacityAutoScalingSettingsProperty
+instance Prelude.Eq CapacityAutoScalingSettingsProperty
+instance Prelude.Show CapacityAutoScalingSettingsProperty
+instance JSON.ToJSON CapacityAutoScalingSettingsProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ContributorInsightsSpecificationProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/ContributorInsightsSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ContributorInsightsSpecificationProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.DynamoDB.GlobalTable.ContributorInsightsSpecificationProperty (
+        ContributorInsightsSpecificationProperty(..),
+        mkContributorInsightsSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ContributorInsightsSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-contributorinsightsspecification.html>
+    ContributorInsightsSpecificationProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-contributorinsightsspecification.html#cfn-dynamodb-globaltable-contributorinsightsspecification-enabled>
+                                              enabled :: (Value Prelude.Bool),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-contributorinsightsspecification.html#cfn-dynamodb-globaltable-contributorinsightsspecification-mode>
+                                              mode :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkContributorInsightsSpecificationProperty ::
+  Value Prelude.Bool -> ContributorInsightsSpecificationProperty
+mkContributorInsightsSpecificationProperty enabled
+  = ContributorInsightsSpecificationProperty
+      {haddock_workaround_ = (), enabled = enabled,
+       mode = Prelude.Nothing}
+instance ToResourceProperties ContributorInsightsSpecificationProperty where
+  toResourceProperties ContributorInsightsSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.ContributorInsightsSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Enabled" JSON..= enabled]
+                           (Prelude.catMaybes [(JSON..=) "Mode" Prelude.<$> mode]))}
+instance JSON.ToJSON ContributorInsightsSpecificationProperty where
+  toJSON ContributorInsightsSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Enabled" JSON..= enabled]
+              (Prelude.catMaybes [(JSON..=) "Mode" Prelude.<$> mode])))
+instance Property "Enabled" ContributorInsightsSpecificationProperty where
+  type PropertyType "Enabled" ContributorInsightsSpecificationProperty = Value Prelude.Bool
+  set newValue ContributorInsightsSpecificationProperty {..}
+    = ContributorInsightsSpecificationProperty {enabled = newValue, ..}
+instance Property "Mode" ContributorInsightsSpecificationProperty where
+  type PropertyType "Mode" ContributorInsightsSpecificationProperty = Value Prelude.Text
+  set newValue ContributorInsightsSpecificationProperty {..}
+    = ContributorInsightsSpecificationProperty
+        {mode = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ContributorInsightsSpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/ContributorInsightsSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ContributorInsightsSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.ContributorInsightsSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ContributorInsightsSpecificationProperty :: Prelude.Type
+instance ToResourceProperties ContributorInsightsSpecificationProperty
+instance Prelude.Eq ContributorInsightsSpecificationProperty
+instance Prelude.Show ContributorInsightsSpecificationProperty
+instance JSON.ToJSON ContributorInsightsSpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/GlobalSecondaryIndexProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/GlobalSecondaryIndexProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/GlobalSecondaryIndexProperty.hs
@@ -0,0 +1,96 @@
+module Stratosphere.DynamoDB.GlobalTable.GlobalSecondaryIndexProperty (
+        module Exports, GlobalSecondaryIndexProperty(..),
+        mkGlobalSecondaryIndexProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.KeySchemaProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ProjectionProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.WarmThroughputProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.WriteOnDemandThroughputSettingsProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.WriteProvisionedThroughputSettingsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data GlobalSecondaryIndexProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-globalsecondaryindex.html>
+    GlobalSecondaryIndexProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-globalsecondaryindex.html#cfn-dynamodb-globaltable-globalsecondaryindex-indexname>
+                                  indexName :: (Value Prelude.Text),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-globalsecondaryindex.html#cfn-dynamodb-globaltable-globalsecondaryindex-keyschema>
+                                  keySchema :: [KeySchemaProperty],
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-globalsecondaryindex.html#cfn-dynamodb-globaltable-globalsecondaryindex-projection>
+                                  projection :: ProjectionProperty,
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-globalsecondaryindex.html#cfn-dynamodb-globaltable-globalsecondaryindex-warmthroughput>
+                                  warmThroughput :: (Prelude.Maybe WarmThroughputProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-globalsecondaryindex.html#cfn-dynamodb-globaltable-globalsecondaryindex-writeondemandthroughputsettings>
+                                  writeOnDemandThroughputSettings :: (Prelude.Maybe WriteOnDemandThroughputSettingsProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-globalsecondaryindex.html#cfn-dynamodb-globaltable-globalsecondaryindex-writeprovisionedthroughputsettings>
+                                  writeProvisionedThroughputSettings :: (Prelude.Maybe WriteProvisionedThroughputSettingsProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGlobalSecondaryIndexProperty ::
+  Value Prelude.Text
+  -> [KeySchemaProperty]
+     -> ProjectionProperty -> GlobalSecondaryIndexProperty
+mkGlobalSecondaryIndexProperty indexName keySchema projection
+  = GlobalSecondaryIndexProperty
+      {haddock_workaround_ = (), indexName = indexName,
+       keySchema = keySchema, projection = projection,
+       warmThroughput = Prelude.Nothing,
+       writeOnDemandThroughputSettings = Prelude.Nothing,
+       writeProvisionedThroughputSettings = Prelude.Nothing}
+instance ToResourceProperties GlobalSecondaryIndexProperty where
+  toResourceProperties GlobalSecondaryIndexProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.GlobalSecondaryIndex",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IndexName" JSON..= indexName, "KeySchema" JSON..= keySchema,
+                            "Projection" JSON..= projection]
+                           (Prelude.catMaybes
+                              [(JSON..=) "WarmThroughput" Prelude.<$> warmThroughput,
+                               (JSON..=) "WriteOnDemandThroughputSettings"
+                                 Prelude.<$> writeOnDemandThroughputSettings,
+                               (JSON..=) "WriteProvisionedThroughputSettings"
+                                 Prelude.<$> writeProvisionedThroughputSettings]))}
+instance JSON.ToJSON GlobalSecondaryIndexProperty where
+  toJSON GlobalSecondaryIndexProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IndexName" JSON..= indexName, "KeySchema" JSON..= keySchema,
+               "Projection" JSON..= projection]
+              (Prelude.catMaybes
+                 [(JSON..=) "WarmThroughput" Prelude.<$> warmThroughput,
+                  (JSON..=) "WriteOnDemandThroughputSettings"
+                    Prelude.<$> writeOnDemandThroughputSettings,
+                  (JSON..=) "WriteProvisionedThroughputSettings"
+                    Prelude.<$> writeProvisionedThroughputSettings])))
+instance Property "IndexName" GlobalSecondaryIndexProperty where
+  type PropertyType "IndexName" GlobalSecondaryIndexProperty = Value Prelude.Text
+  set newValue GlobalSecondaryIndexProperty {..}
+    = GlobalSecondaryIndexProperty {indexName = newValue, ..}
+instance Property "KeySchema" GlobalSecondaryIndexProperty where
+  type PropertyType "KeySchema" GlobalSecondaryIndexProperty = [KeySchemaProperty]
+  set newValue GlobalSecondaryIndexProperty {..}
+    = GlobalSecondaryIndexProperty {keySchema = newValue, ..}
+instance Property "Projection" GlobalSecondaryIndexProperty where
+  type PropertyType "Projection" GlobalSecondaryIndexProperty = ProjectionProperty
+  set newValue GlobalSecondaryIndexProperty {..}
+    = GlobalSecondaryIndexProperty {projection = newValue, ..}
+instance Property "WarmThroughput" GlobalSecondaryIndexProperty where
+  type PropertyType "WarmThroughput" GlobalSecondaryIndexProperty = WarmThroughputProperty
+  set newValue GlobalSecondaryIndexProperty {..}
+    = GlobalSecondaryIndexProperty
+        {warmThroughput = Prelude.pure newValue, ..}
+instance Property "WriteOnDemandThroughputSettings" GlobalSecondaryIndexProperty where
+  type PropertyType "WriteOnDemandThroughputSettings" GlobalSecondaryIndexProperty = WriteOnDemandThroughputSettingsProperty
+  set newValue GlobalSecondaryIndexProperty {..}
+    = GlobalSecondaryIndexProperty
+        {writeOnDemandThroughputSettings = Prelude.pure newValue, ..}
+instance Property "WriteProvisionedThroughputSettings" GlobalSecondaryIndexProperty where
+  type PropertyType "WriteProvisionedThroughputSettings" GlobalSecondaryIndexProperty = WriteProvisionedThroughputSettingsProperty
+  set newValue GlobalSecondaryIndexProperty {..}
+    = GlobalSecondaryIndexProperty
+        {writeProvisionedThroughputSettings = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/GlobalSecondaryIndexProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/GlobalSecondaryIndexProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/GlobalSecondaryIndexProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.GlobalSecondaryIndexProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data GlobalSecondaryIndexProperty :: Prelude.Type
+instance ToResourceProperties GlobalSecondaryIndexProperty
+instance Prelude.Eq GlobalSecondaryIndexProperty
+instance Prelude.Show GlobalSecondaryIndexProperty
+instance JSON.ToJSON GlobalSecondaryIndexProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/GlobalTableWitnessProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/GlobalTableWitnessProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/GlobalTableWitnessProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.DynamoDB.GlobalTable.GlobalTableWitnessProperty (
+        GlobalTableWitnessProperty(..), mkGlobalTableWitnessProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data GlobalTableWitnessProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-globaltablewitness.html>
+    GlobalTableWitnessProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-globaltablewitness.html#cfn-dynamodb-globaltable-globaltablewitness-region>
+                                region :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGlobalTableWitnessProperty :: GlobalTableWitnessProperty
+mkGlobalTableWitnessProperty
+  = GlobalTableWitnessProperty
+      {haddock_workaround_ = (), region = Prelude.Nothing}
+instance ToResourceProperties GlobalTableWitnessProperty where
+  toResourceProperties GlobalTableWitnessProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.GlobalTableWitness",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Region" Prelude.<$> region])}
+instance JSON.ToJSON GlobalTableWitnessProperty where
+  toJSON GlobalTableWitnessProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Region" Prelude.<$> region]))
+instance Property "Region" GlobalTableWitnessProperty where
+  type PropertyType "Region" GlobalTableWitnessProperty = Value Prelude.Text
+  set newValue GlobalTableWitnessProperty {..}
+    = GlobalTableWitnessProperty {region = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/GlobalTableWitnessProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/GlobalTableWitnessProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/GlobalTableWitnessProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.GlobalTableWitnessProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data GlobalTableWitnessProperty :: Prelude.Type
+instance ToResourceProperties GlobalTableWitnessProperty
+instance Prelude.Eq GlobalTableWitnessProperty
+instance Prelude.Show GlobalTableWitnessProperty
+instance JSON.ToJSON GlobalTableWitnessProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/KeySchemaProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/KeySchemaProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/KeySchemaProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.DynamoDB.GlobalTable.KeySchemaProperty (
+        KeySchemaProperty(..), mkKeySchemaProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KeySchemaProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-keyschema.html>
+    KeySchemaProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-keyschema.html#cfn-dynamodb-globaltable-keyschema-attributename>
+                       attributeName :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-keyschema.html#cfn-dynamodb-globaltable-keyschema-keytype>
+                       keyType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKeySchemaProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> KeySchemaProperty
+mkKeySchemaProperty attributeName keyType
+  = KeySchemaProperty
+      {haddock_workaround_ = (), attributeName = attributeName,
+       keyType = keyType}
+instance ToResourceProperties KeySchemaProperty where
+  toResourceProperties KeySchemaProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.KeySchema",
+         supportsTags = Prelude.False,
+         properties = ["AttributeName" JSON..= attributeName,
+                       "KeyType" JSON..= keyType]}
+instance JSON.ToJSON KeySchemaProperty where
+  toJSON KeySchemaProperty {..}
+    = JSON.object
+        ["AttributeName" JSON..= attributeName, "KeyType" JSON..= keyType]
+instance Property "AttributeName" KeySchemaProperty where
+  type PropertyType "AttributeName" KeySchemaProperty = Value Prelude.Text
+  set newValue KeySchemaProperty {..}
+    = KeySchemaProperty {attributeName = newValue, ..}
+instance Property "KeyType" KeySchemaProperty where
+  type PropertyType "KeyType" KeySchemaProperty = Value Prelude.Text
+  set newValue KeySchemaProperty {..}
+    = KeySchemaProperty {keyType = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/KeySchemaProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/KeySchemaProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/KeySchemaProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.KeySchemaProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data KeySchemaProperty :: Prelude.Type
+instance ToResourceProperties KeySchemaProperty
+instance Prelude.Eq KeySchemaProperty
+instance Prelude.Show KeySchemaProperty
+instance JSON.ToJSON KeySchemaProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/KinesisStreamSpecificationProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/KinesisStreamSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/KinesisStreamSpecificationProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.DynamoDB.GlobalTable.KinesisStreamSpecificationProperty (
+        KinesisStreamSpecificationProperty(..),
+        mkKinesisStreamSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KinesisStreamSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-kinesisstreamspecification.html>
+    KinesisStreamSpecificationProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-kinesisstreamspecification.html#cfn-dynamodb-globaltable-kinesisstreamspecification-approximatecreationdatetimeprecision>
+                                        approximateCreationDateTimePrecision :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-kinesisstreamspecification.html#cfn-dynamodb-globaltable-kinesisstreamspecification-streamarn>
+                                        streamArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKinesisStreamSpecificationProperty ::
+  Value Prelude.Text -> KinesisStreamSpecificationProperty
+mkKinesisStreamSpecificationProperty streamArn
+  = KinesisStreamSpecificationProperty
+      {haddock_workaround_ = (), streamArn = streamArn,
+       approximateCreationDateTimePrecision = Prelude.Nothing}
+instance ToResourceProperties KinesisStreamSpecificationProperty where
+  toResourceProperties KinesisStreamSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.KinesisStreamSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["StreamArn" JSON..= streamArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ApproximateCreationDateTimePrecision"
+                                 Prelude.<$> approximateCreationDateTimePrecision]))}
+instance JSON.ToJSON KinesisStreamSpecificationProperty where
+  toJSON KinesisStreamSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["StreamArn" JSON..= streamArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "ApproximateCreationDateTimePrecision"
+                    Prelude.<$> approximateCreationDateTimePrecision])))
+instance Property "ApproximateCreationDateTimePrecision" KinesisStreamSpecificationProperty where
+  type PropertyType "ApproximateCreationDateTimePrecision" KinesisStreamSpecificationProperty = Value Prelude.Text
+  set newValue KinesisStreamSpecificationProperty {..}
+    = KinesisStreamSpecificationProperty
+        {approximateCreationDateTimePrecision = Prelude.pure newValue, ..}
+instance Property "StreamArn" KinesisStreamSpecificationProperty where
+  type PropertyType "StreamArn" KinesisStreamSpecificationProperty = Value Prelude.Text
+  set newValue KinesisStreamSpecificationProperty {..}
+    = KinesisStreamSpecificationProperty {streamArn = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/KinesisStreamSpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/KinesisStreamSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/KinesisStreamSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.KinesisStreamSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data KinesisStreamSpecificationProperty :: Prelude.Type
+instance ToResourceProperties KinesisStreamSpecificationProperty
+instance Prelude.Eq KinesisStreamSpecificationProperty
+instance Prelude.Show KinesisStreamSpecificationProperty
+instance JSON.ToJSON KinesisStreamSpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/LocalSecondaryIndexProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/LocalSecondaryIndexProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/LocalSecondaryIndexProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.DynamoDB.GlobalTable.LocalSecondaryIndexProperty (
+        module Exports, LocalSecondaryIndexProperty(..),
+        mkLocalSecondaryIndexProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.KeySchemaProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ProjectionProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LocalSecondaryIndexProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-localsecondaryindex.html>
+    LocalSecondaryIndexProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-localsecondaryindex.html#cfn-dynamodb-globaltable-localsecondaryindex-indexname>
+                                 indexName :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-localsecondaryindex.html#cfn-dynamodb-globaltable-localsecondaryindex-keyschema>
+                                 keySchema :: [KeySchemaProperty],
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-localsecondaryindex.html#cfn-dynamodb-globaltable-localsecondaryindex-projection>
+                                 projection :: ProjectionProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocalSecondaryIndexProperty ::
+  Value Prelude.Text
+  -> [KeySchemaProperty]
+     -> ProjectionProperty -> LocalSecondaryIndexProperty
+mkLocalSecondaryIndexProperty indexName keySchema projection
+  = LocalSecondaryIndexProperty
+      {haddock_workaround_ = (), indexName = indexName,
+       keySchema = keySchema, projection = projection}
+instance ToResourceProperties LocalSecondaryIndexProperty where
+  toResourceProperties LocalSecondaryIndexProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.LocalSecondaryIndex",
+         supportsTags = Prelude.False,
+         properties = ["IndexName" JSON..= indexName,
+                       "KeySchema" JSON..= keySchema, "Projection" JSON..= projection]}
+instance JSON.ToJSON LocalSecondaryIndexProperty where
+  toJSON LocalSecondaryIndexProperty {..}
+    = JSON.object
+        ["IndexName" JSON..= indexName, "KeySchema" JSON..= keySchema,
+         "Projection" JSON..= projection]
+instance Property "IndexName" LocalSecondaryIndexProperty where
+  type PropertyType "IndexName" LocalSecondaryIndexProperty = Value Prelude.Text
+  set newValue LocalSecondaryIndexProperty {..}
+    = LocalSecondaryIndexProperty {indexName = newValue, ..}
+instance Property "KeySchema" LocalSecondaryIndexProperty where
+  type PropertyType "KeySchema" LocalSecondaryIndexProperty = [KeySchemaProperty]
+  set newValue LocalSecondaryIndexProperty {..}
+    = LocalSecondaryIndexProperty {keySchema = newValue, ..}
+instance Property "Projection" LocalSecondaryIndexProperty where
+  type PropertyType "Projection" LocalSecondaryIndexProperty = ProjectionProperty
+  set newValue LocalSecondaryIndexProperty {..}
+    = LocalSecondaryIndexProperty {projection = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/LocalSecondaryIndexProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/LocalSecondaryIndexProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/LocalSecondaryIndexProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.LocalSecondaryIndexProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LocalSecondaryIndexProperty :: Prelude.Type
+instance ToResourceProperties LocalSecondaryIndexProperty
+instance Prelude.Eq LocalSecondaryIndexProperty
+instance Prelude.Show LocalSecondaryIndexProperty
+instance JSON.ToJSON LocalSecondaryIndexProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/PointInTimeRecoverySpecificationProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/PointInTimeRecoverySpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/PointInTimeRecoverySpecificationProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.DynamoDB.GlobalTable.PointInTimeRecoverySpecificationProperty (
+        PointInTimeRecoverySpecificationProperty(..),
+        mkPointInTimeRecoverySpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PointInTimeRecoverySpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-pointintimerecoveryspecification.html>
+    PointInTimeRecoverySpecificationProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-pointintimerecoveryspecification.html#cfn-dynamodb-globaltable-pointintimerecoveryspecification-pointintimerecoveryenabled>
+                                              pointInTimeRecoveryEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-pointintimerecoveryspecification.html#cfn-dynamodb-globaltable-pointintimerecoveryspecification-recoveryperiodindays>
+                                              recoveryPeriodInDays :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPointInTimeRecoverySpecificationProperty ::
+  PointInTimeRecoverySpecificationProperty
+mkPointInTimeRecoverySpecificationProperty
+  = PointInTimeRecoverySpecificationProperty
+      {haddock_workaround_ = (),
+       pointInTimeRecoveryEnabled = Prelude.Nothing,
+       recoveryPeriodInDays = Prelude.Nothing}
+instance ToResourceProperties PointInTimeRecoverySpecificationProperty where
+  toResourceProperties PointInTimeRecoverySpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.PointInTimeRecoverySpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "PointInTimeRecoveryEnabled"
+                              Prelude.<$> pointInTimeRecoveryEnabled,
+                            (JSON..=) "RecoveryPeriodInDays"
+                              Prelude.<$> recoveryPeriodInDays])}
+instance JSON.ToJSON PointInTimeRecoverySpecificationProperty where
+  toJSON PointInTimeRecoverySpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "PointInTimeRecoveryEnabled"
+                 Prelude.<$> pointInTimeRecoveryEnabled,
+               (JSON..=) "RecoveryPeriodInDays"
+                 Prelude.<$> recoveryPeriodInDays]))
+instance Property "PointInTimeRecoveryEnabled" PointInTimeRecoverySpecificationProperty where
+  type PropertyType "PointInTimeRecoveryEnabled" PointInTimeRecoverySpecificationProperty = Value Prelude.Bool
+  set newValue PointInTimeRecoverySpecificationProperty {..}
+    = PointInTimeRecoverySpecificationProperty
+        {pointInTimeRecoveryEnabled = Prelude.pure newValue, ..}
+instance Property "RecoveryPeriodInDays" PointInTimeRecoverySpecificationProperty where
+  type PropertyType "RecoveryPeriodInDays" PointInTimeRecoverySpecificationProperty = Value Prelude.Integer
+  set newValue PointInTimeRecoverySpecificationProperty {..}
+    = PointInTimeRecoverySpecificationProperty
+        {recoveryPeriodInDays = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/PointInTimeRecoverySpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/PointInTimeRecoverySpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/PointInTimeRecoverySpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.PointInTimeRecoverySpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PointInTimeRecoverySpecificationProperty :: Prelude.Type
+instance ToResourceProperties PointInTimeRecoverySpecificationProperty
+instance Prelude.Eq PointInTimeRecoverySpecificationProperty
+instance Prelude.Show PointInTimeRecoverySpecificationProperty
+instance JSON.ToJSON PointInTimeRecoverySpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ProjectionProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/ProjectionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ProjectionProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.DynamoDB.GlobalTable.ProjectionProperty (
+        ProjectionProperty(..), mkProjectionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ProjectionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-projection.html>
+    ProjectionProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-projection.html#cfn-dynamodb-globaltable-projection-nonkeyattributes>
+                        nonKeyAttributes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-projection.html#cfn-dynamodb-globaltable-projection-projectiontype>
+                        projectionType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkProjectionProperty :: ProjectionProperty
+mkProjectionProperty
+  = ProjectionProperty
+      {haddock_workaround_ = (), nonKeyAttributes = Prelude.Nothing,
+       projectionType = Prelude.Nothing}
+instance ToResourceProperties ProjectionProperty where
+  toResourceProperties ProjectionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.Projection",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "NonKeyAttributes" Prelude.<$> nonKeyAttributes,
+                            (JSON..=) "ProjectionType" Prelude.<$> projectionType])}
+instance JSON.ToJSON ProjectionProperty where
+  toJSON ProjectionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "NonKeyAttributes" Prelude.<$> nonKeyAttributes,
+               (JSON..=) "ProjectionType" Prelude.<$> projectionType]))
+instance Property "NonKeyAttributes" ProjectionProperty where
+  type PropertyType "NonKeyAttributes" ProjectionProperty = ValueList Prelude.Text
+  set newValue ProjectionProperty {..}
+    = ProjectionProperty {nonKeyAttributes = Prelude.pure newValue, ..}
+instance Property "ProjectionType" ProjectionProperty where
+  type PropertyType "ProjectionType" ProjectionProperty = Value Prelude.Text
+  set newValue ProjectionProperty {..}
+    = ProjectionProperty {projectionType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ProjectionProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/ProjectionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ProjectionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.ProjectionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ProjectionProperty :: Prelude.Type
+instance ToResourceProperties ProjectionProperty
+instance Prelude.Eq ProjectionProperty
+instance Prelude.Show ProjectionProperty
+instance JSON.ToJSON ProjectionProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ReadOnDemandThroughputSettingsProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/ReadOnDemandThroughputSettingsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ReadOnDemandThroughputSettingsProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.DynamoDB.GlobalTable.ReadOnDemandThroughputSettingsProperty (
+        ReadOnDemandThroughputSettingsProperty(..),
+        mkReadOnDemandThroughputSettingsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ReadOnDemandThroughputSettingsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-readondemandthroughputsettings.html>
+    ReadOnDemandThroughputSettingsProperty {haddock_workaround_ :: (),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-readondemandthroughputsettings.html#cfn-dynamodb-globaltable-readondemandthroughputsettings-maxreadrequestunits>
+                                            maxReadRequestUnits :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReadOnDemandThroughputSettingsProperty ::
+  ReadOnDemandThroughputSettingsProperty
+mkReadOnDemandThroughputSettingsProperty
+  = ReadOnDemandThroughputSettingsProperty
+      {haddock_workaround_ = (), maxReadRequestUnits = Prelude.Nothing}
+instance ToResourceProperties ReadOnDemandThroughputSettingsProperty where
+  toResourceProperties ReadOnDemandThroughputSettingsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.ReadOnDemandThroughputSettings",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "MaxReadRequestUnits" Prelude.<$> maxReadRequestUnits])}
+instance JSON.ToJSON ReadOnDemandThroughputSettingsProperty where
+  toJSON ReadOnDemandThroughputSettingsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "MaxReadRequestUnits" Prelude.<$> maxReadRequestUnits]))
+instance Property "MaxReadRequestUnits" ReadOnDemandThroughputSettingsProperty where
+  type PropertyType "MaxReadRequestUnits" ReadOnDemandThroughputSettingsProperty = Value Prelude.Integer
+  set newValue ReadOnDemandThroughputSettingsProperty {..}
+    = ReadOnDemandThroughputSettingsProperty
+        {maxReadRequestUnits = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ReadOnDemandThroughputSettingsProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/ReadOnDemandThroughputSettingsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ReadOnDemandThroughputSettingsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.ReadOnDemandThroughputSettingsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ReadOnDemandThroughputSettingsProperty :: Prelude.Type
+instance ToResourceProperties ReadOnDemandThroughputSettingsProperty
+instance Prelude.Eq ReadOnDemandThroughputSettingsProperty
+instance Prelude.Show ReadOnDemandThroughputSettingsProperty
+instance JSON.ToJSON ReadOnDemandThroughputSettingsProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ReadProvisionedThroughputSettingsProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/ReadProvisionedThroughputSettingsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ReadProvisionedThroughputSettingsProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.DynamoDB.GlobalTable.ReadProvisionedThroughputSettingsProperty (
+        module Exports, ReadProvisionedThroughputSettingsProperty(..),
+        mkReadProvisionedThroughputSettingsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.CapacityAutoScalingSettingsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ReadProvisionedThroughputSettingsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-readprovisionedthroughputsettings.html>
+    ReadProvisionedThroughputSettingsProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-readprovisionedthroughputsettings.html#cfn-dynamodb-globaltable-readprovisionedthroughputsettings-readcapacityautoscalingsettings>
+                                               readCapacityAutoScalingSettings :: (Prelude.Maybe CapacityAutoScalingSettingsProperty),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-readprovisionedthroughputsettings.html#cfn-dynamodb-globaltable-readprovisionedthroughputsettings-readcapacityunits>
+                                               readCapacityUnits :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReadProvisionedThroughputSettingsProperty ::
+  ReadProvisionedThroughputSettingsProperty
+mkReadProvisionedThroughputSettingsProperty
+  = ReadProvisionedThroughputSettingsProperty
+      {haddock_workaround_ = (),
+       readCapacityAutoScalingSettings = Prelude.Nothing,
+       readCapacityUnits = Prelude.Nothing}
+instance ToResourceProperties ReadProvisionedThroughputSettingsProperty where
+  toResourceProperties ReadProvisionedThroughputSettingsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.ReadProvisionedThroughputSettings",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ReadCapacityAutoScalingSettings"
+                              Prelude.<$> readCapacityAutoScalingSettings,
+                            (JSON..=) "ReadCapacityUnits" Prelude.<$> readCapacityUnits])}
+instance JSON.ToJSON ReadProvisionedThroughputSettingsProperty where
+  toJSON ReadProvisionedThroughputSettingsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ReadCapacityAutoScalingSettings"
+                 Prelude.<$> readCapacityAutoScalingSettings,
+               (JSON..=) "ReadCapacityUnits" Prelude.<$> readCapacityUnits]))
+instance Property "ReadCapacityAutoScalingSettings" ReadProvisionedThroughputSettingsProperty where
+  type PropertyType "ReadCapacityAutoScalingSettings" ReadProvisionedThroughputSettingsProperty = CapacityAutoScalingSettingsProperty
+  set newValue ReadProvisionedThroughputSettingsProperty {..}
+    = ReadProvisionedThroughputSettingsProperty
+        {readCapacityAutoScalingSettings = Prelude.pure newValue, ..}
+instance Property "ReadCapacityUnits" ReadProvisionedThroughputSettingsProperty where
+  type PropertyType "ReadCapacityUnits" ReadProvisionedThroughputSettingsProperty = Value Prelude.Integer
+  set newValue ReadProvisionedThroughputSettingsProperty {..}
+    = ReadProvisionedThroughputSettingsProperty
+        {readCapacityUnits = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ReadProvisionedThroughputSettingsProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/ReadProvisionedThroughputSettingsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ReadProvisionedThroughputSettingsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.ReadProvisionedThroughputSettingsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ReadProvisionedThroughputSettingsProperty :: Prelude.Type
+instance ToResourceProperties ReadProvisionedThroughputSettingsProperty
+instance Prelude.Eq ReadProvisionedThroughputSettingsProperty
+instance Prelude.Show ReadProvisionedThroughputSettingsProperty
+instance JSON.ToJSON ReadProvisionedThroughputSettingsProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaGlobalSecondaryIndexSpecificationProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaGlobalSecondaryIndexSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaGlobalSecondaryIndexSpecificationProperty.hs
@@ -0,0 +1,83 @@
+module Stratosphere.DynamoDB.GlobalTable.ReplicaGlobalSecondaryIndexSpecificationProperty (
+        module Exports,
+        ReplicaGlobalSecondaryIndexSpecificationProperty(..),
+        mkReplicaGlobalSecondaryIndexSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ContributorInsightsSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ReadOnDemandThroughputSettingsProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ReadProvisionedThroughputSettingsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ReplicaGlobalSecondaryIndexSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaglobalsecondaryindexspecification.html>
+    ReplicaGlobalSecondaryIndexSpecificationProperty {haddock_workaround_ :: (),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaglobalsecondaryindexspecification.html#cfn-dynamodb-globaltable-replicaglobalsecondaryindexspecification-contributorinsightsspecification>
+                                                      contributorInsightsSpecification :: (Prelude.Maybe ContributorInsightsSpecificationProperty),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaglobalsecondaryindexspecification.html#cfn-dynamodb-globaltable-replicaglobalsecondaryindexspecification-indexname>
+                                                      indexName :: (Value Prelude.Text),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaglobalsecondaryindexspecification.html#cfn-dynamodb-globaltable-replicaglobalsecondaryindexspecification-readondemandthroughputsettings>
+                                                      readOnDemandThroughputSettings :: (Prelude.Maybe ReadOnDemandThroughputSettingsProperty),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaglobalsecondaryindexspecification.html#cfn-dynamodb-globaltable-replicaglobalsecondaryindexspecification-readprovisionedthroughputsettings>
+                                                      readProvisionedThroughputSettings :: (Prelude.Maybe ReadProvisionedThroughputSettingsProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReplicaGlobalSecondaryIndexSpecificationProperty ::
+  Value Prelude.Text
+  -> ReplicaGlobalSecondaryIndexSpecificationProperty
+mkReplicaGlobalSecondaryIndexSpecificationProperty indexName
+  = ReplicaGlobalSecondaryIndexSpecificationProperty
+      {haddock_workaround_ = (), indexName = indexName,
+       contributorInsightsSpecification = Prelude.Nothing,
+       readOnDemandThroughputSettings = Prelude.Nothing,
+       readProvisionedThroughputSettings = Prelude.Nothing}
+instance ToResourceProperties ReplicaGlobalSecondaryIndexSpecificationProperty where
+  toResourceProperties
+    ReplicaGlobalSecondaryIndexSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.ReplicaGlobalSecondaryIndexSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IndexName" JSON..= indexName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ContributorInsightsSpecification"
+                                 Prelude.<$> contributorInsightsSpecification,
+                               (JSON..=) "ReadOnDemandThroughputSettings"
+                                 Prelude.<$> readOnDemandThroughputSettings,
+                               (JSON..=) "ReadProvisionedThroughputSettings"
+                                 Prelude.<$> readProvisionedThroughputSettings]))}
+instance JSON.ToJSON ReplicaGlobalSecondaryIndexSpecificationProperty where
+  toJSON ReplicaGlobalSecondaryIndexSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IndexName" JSON..= indexName]
+              (Prelude.catMaybes
+                 [(JSON..=) "ContributorInsightsSpecification"
+                    Prelude.<$> contributorInsightsSpecification,
+                  (JSON..=) "ReadOnDemandThroughputSettings"
+                    Prelude.<$> readOnDemandThroughputSettings,
+                  (JSON..=) "ReadProvisionedThroughputSettings"
+                    Prelude.<$> readProvisionedThroughputSettings])))
+instance Property "ContributorInsightsSpecification" ReplicaGlobalSecondaryIndexSpecificationProperty where
+  type PropertyType "ContributorInsightsSpecification" ReplicaGlobalSecondaryIndexSpecificationProperty = ContributorInsightsSpecificationProperty
+  set newValue ReplicaGlobalSecondaryIndexSpecificationProperty {..}
+    = ReplicaGlobalSecondaryIndexSpecificationProperty
+        {contributorInsightsSpecification = Prelude.pure newValue, ..}
+instance Property "IndexName" ReplicaGlobalSecondaryIndexSpecificationProperty where
+  type PropertyType "IndexName" ReplicaGlobalSecondaryIndexSpecificationProperty = Value Prelude.Text
+  set newValue ReplicaGlobalSecondaryIndexSpecificationProperty {..}
+    = ReplicaGlobalSecondaryIndexSpecificationProperty
+        {indexName = newValue, ..}
+instance Property "ReadOnDemandThroughputSettings" ReplicaGlobalSecondaryIndexSpecificationProperty where
+  type PropertyType "ReadOnDemandThroughputSettings" ReplicaGlobalSecondaryIndexSpecificationProperty = ReadOnDemandThroughputSettingsProperty
+  set newValue ReplicaGlobalSecondaryIndexSpecificationProperty {..}
+    = ReplicaGlobalSecondaryIndexSpecificationProperty
+        {readOnDemandThroughputSettings = Prelude.pure newValue, ..}
+instance Property "ReadProvisionedThroughputSettings" ReplicaGlobalSecondaryIndexSpecificationProperty where
+  type PropertyType "ReadProvisionedThroughputSettings" ReplicaGlobalSecondaryIndexSpecificationProperty = ReadProvisionedThroughputSettingsProperty
+  set newValue ReplicaGlobalSecondaryIndexSpecificationProperty {..}
+    = ReplicaGlobalSecondaryIndexSpecificationProperty
+        {readProvisionedThroughputSettings = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaGlobalSecondaryIndexSpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaGlobalSecondaryIndexSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaGlobalSecondaryIndexSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.ReplicaGlobalSecondaryIndexSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ReplicaGlobalSecondaryIndexSpecificationProperty :: Prelude.Type
+instance ToResourceProperties ReplicaGlobalSecondaryIndexSpecificationProperty
+instance Prelude.Eq ReplicaGlobalSecondaryIndexSpecificationProperty
+instance Prelude.Show ReplicaGlobalSecondaryIndexSpecificationProperty
+instance JSON.ToJSON ReplicaGlobalSecondaryIndexSpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaSSESpecificationProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaSSESpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaSSESpecificationProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.DynamoDB.GlobalTable.ReplicaSSESpecificationProperty (
+        ReplicaSSESpecificationProperty(..),
+        mkReplicaSSESpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ReplicaSSESpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicassespecification.html>
+    ReplicaSSESpecificationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicassespecification.html#cfn-dynamodb-globaltable-replicassespecification-kmsmasterkeyid>
+                                     kMSMasterKeyId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReplicaSSESpecificationProperty ::
+  Value Prelude.Text -> ReplicaSSESpecificationProperty
+mkReplicaSSESpecificationProperty kMSMasterKeyId
+  = ReplicaSSESpecificationProperty
+      {haddock_workaround_ = (), kMSMasterKeyId = kMSMasterKeyId}
+instance ToResourceProperties ReplicaSSESpecificationProperty where
+  toResourceProperties ReplicaSSESpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.ReplicaSSESpecification",
+         supportsTags = Prelude.False,
+         properties = ["KMSMasterKeyId" JSON..= kMSMasterKeyId]}
+instance JSON.ToJSON ReplicaSSESpecificationProperty where
+  toJSON ReplicaSSESpecificationProperty {..}
+    = JSON.object ["KMSMasterKeyId" JSON..= kMSMasterKeyId]
+instance Property "KMSMasterKeyId" ReplicaSSESpecificationProperty where
+  type PropertyType "KMSMasterKeyId" ReplicaSSESpecificationProperty = Value Prelude.Text
+  set newValue ReplicaSSESpecificationProperty {..}
+    = ReplicaSSESpecificationProperty {kMSMasterKeyId = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaSSESpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaSSESpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaSSESpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.ReplicaSSESpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ReplicaSSESpecificationProperty :: Prelude.Type
+instance ToResourceProperties ReplicaSSESpecificationProperty
+instance Prelude.Eq ReplicaSSESpecificationProperty
+instance Prelude.Show ReplicaSSESpecificationProperty
+instance JSON.ToJSON ReplicaSSESpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaSpecificationProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaSpecificationProperty.hs
@@ -0,0 +1,184 @@
+module Stratosphere.DynamoDB.GlobalTable.ReplicaSpecificationProperty (
+        module Exports, ReplicaSpecificationProperty(..),
+        mkReplicaSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ContributorInsightsSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.KinesisStreamSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.PointInTimeRecoverySpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ReadOnDemandThroughputSettingsProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ReadProvisionedThroughputSettingsProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ReplicaGlobalSecondaryIndexSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ReplicaSSESpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ReplicaStreamSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ResourcePolicyProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data ReplicaSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaspecification.html>
+    ReplicaSpecificationProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaspecification.html#cfn-dynamodb-globaltable-replicaspecification-contributorinsightsspecification>
+                                  contributorInsightsSpecification :: (Prelude.Maybe ContributorInsightsSpecificationProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaspecification.html#cfn-dynamodb-globaltable-replicaspecification-deletionprotectionenabled>
+                                  deletionProtectionEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaspecification.html#cfn-dynamodb-globaltable-replicaspecification-globalsecondaryindexes>
+                                  globalSecondaryIndexes :: (Prelude.Maybe [ReplicaGlobalSecondaryIndexSpecificationProperty]),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaspecification.html#cfn-dynamodb-globaltable-replicaspecification-kinesisstreamspecification>
+                                  kinesisStreamSpecification :: (Prelude.Maybe KinesisStreamSpecificationProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaspecification.html#cfn-dynamodb-globaltable-replicaspecification-pointintimerecoveryspecification>
+                                  pointInTimeRecoverySpecification :: (Prelude.Maybe PointInTimeRecoverySpecificationProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaspecification.html#cfn-dynamodb-globaltable-replicaspecification-readondemandthroughputsettings>
+                                  readOnDemandThroughputSettings :: (Prelude.Maybe ReadOnDemandThroughputSettingsProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaspecification.html#cfn-dynamodb-globaltable-replicaspecification-readprovisionedthroughputsettings>
+                                  readProvisionedThroughputSettings :: (Prelude.Maybe ReadProvisionedThroughputSettingsProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaspecification.html#cfn-dynamodb-globaltable-replicaspecification-region>
+                                  region :: (Value Prelude.Text),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaspecification.html#cfn-dynamodb-globaltable-replicaspecification-replicastreamspecification>
+                                  replicaStreamSpecification :: (Prelude.Maybe ReplicaStreamSpecificationProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaspecification.html#cfn-dynamodb-globaltable-replicaspecification-resourcepolicy>
+                                  resourcePolicy :: (Prelude.Maybe ResourcePolicyProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaspecification.html#cfn-dynamodb-globaltable-replicaspecification-ssespecification>
+                                  sSESpecification :: (Prelude.Maybe ReplicaSSESpecificationProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaspecification.html#cfn-dynamodb-globaltable-replicaspecification-tableclass>
+                                  tableClass :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicaspecification.html#cfn-dynamodb-globaltable-replicaspecification-tags>
+                                  tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReplicaSpecificationProperty ::
+  Value Prelude.Text -> ReplicaSpecificationProperty
+mkReplicaSpecificationProperty region
+  = ReplicaSpecificationProperty
+      {haddock_workaround_ = (), region = region,
+       contributorInsightsSpecification = Prelude.Nothing,
+       deletionProtectionEnabled = Prelude.Nothing,
+       globalSecondaryIndexes = Prelude.Nothing,
+       kinesisStreamSpecification = Prelude.Nothing,
+       pointInTimeRecoverySpecification = Prelude.Nothing,
+       readOnDemandThroughputSettings = Prelude.Nothing,
+       readProvisionedThroughputSettings = Prelude.Nothing,
+       replicaStreamSpecification = Prelude.Nothing,
+       resourcePolicy = Prelude.Nothing,
+       sSESpecification = Prelude.Nothing, tableClass = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties ReplicaSpecificationProperty where
+  toResourceProperties ReplicaSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.ReplicaSpecification",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Region" JSON..= region]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ContributorInsightsSpecification"
+                                 Prelude.<$> contributorInsightsSpecification,
+                               (JSON..=) "DeletionProtectionEnabled"
+                                 Prelude.<$> deletionProtectionEnabled,
+                               (JSON..=) "GlobalSecondaryIndexes"
+                                 Prelude.<$> globalSecondaryIndexes,
+                               (JSON..=) "KinesisStreamSpecification"
+                                 Prelude.<$> kinesisStreamSpecification,
+                               (JSON..=) "PointInTimeRecoverySpecification"
+                                 Prelude.<$> pointInTimeRecoverySpecification,
+                               (JSON..=) "ReadOnDemandThroughputSettings"
+                                 Prelude.<$> readOnDemandThroughputSettings,
+                               (JSON..=) "ReadProvisionedThroughputSettings"
+                                 Prelude.<$> readProvisionedThroughputSettings,
+                               (JSON..=) "ReplicaStreamSpecification"
+                                 Prelude.<$> replicaStreamSpecification,
+                               (JSON..=) "ResourcePolicy" Prelude.<$> resourcePolicy,
+                               (JSON..=) "SSESpecification" Prelude.<$> sSESpecification,
+                               (JSON..=) "TableClass" Prelude.<$> tableClass,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON ReplicaSpecificationProperty where
+  toJSON ReplicaSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Region" JSON..= region]
+              (Prelude.catMaybes
+                 [(JSON..=) "ContributorInsightsSpecification"
+                    Prelude.<$> contributorInsightsSpecification,
+                  (JSON..=) "DeletionProtectionEnabled"
+                    Prelude.<$> deletionProtectionEnabled,
+                  (JSON..=) "GlobalSecondaryIndexes"
+                    Prelude.<$> globalSecondaryIndexes,
+                  (JSON..=) "KinesisStreamSpecification"
+                    Prelude.<$> kinesisStreamSpecification,
+                  (JSON..=) "PointInTimeRecoverySpecification"
+                    Prelude.<$> pointInTimeRecoverySpecification,
+                  (JSON..=) "ReadOnDemandThroughputSettings"
+                    Prelude.<$> readOnDemandThroughputSettings,
+                  (JSON..=) "ReadProvisionedThroughputSettings"
+                    Prelude.<$> readProvisionedThroughputSettings,
+                  (JSON..=) "ReplicaStreamSpecification"
+                    Prelude.<$> replicaStreamSpecification,
+                  (JSON..=) "ResourcePolicy" Prelude.<$> resourcePolicy,
+                  (JSON..=) "SSESpecification" Prelude.<$> sSESpecification,
+                  (JSON..=) "TableClass" Prelude.<$> tableClass,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "ContributorInsightsSpecification" ReplicaSpecificationProperty where
+  type PropertyType "ContributorInsightsSpecification" ReplicaSpecificationProperty = ContributorInsightsSpecificationProperty
+  set newValue ReplicaSpecificationProperty {..}
+    = ReplicaSpecificationProperty
+        {contributorInsightsSpecification = Prelude.pure newValue, ..}
+instance Property "DeletionProtectionEnabled" ReplicaSpecificationProperty where
+  type PropertyType "DeletionProtectionEnabled" ReplicaSpecificationProperty = Value Prelude.Bool
+  set newValue ReplicaSpecificationProperty {..}
+    = ReplicaSpecificationProperty
+        {deletionProtectionEnabled = Prelude.pure newValue, ..}
+instance Property "GlobalSecondaryIndexes" ReplicaSpecificationProperty where
+  type PropertyType "GlobalSecondaryIndexes" ReplicaSpecificationProperty = [ReplicaGlobalSecondaryIndexSpecificationProperty]
+  set newValue ReplicaSpecificationProperty {..}
+    = ReplicaSpecificationProperty
+        {globalSecondaryIndexes = Prelude.pure newValue, ..}
+instance Property "KinesisStreamSpecification" ReplicaSpecificationProperty where
+  type PropertyType "KinesisStreamSpecification" ReplicaSpecificationProperty = KinesisStreamSpecificationProperty
+  set newValue ReplicaSpecificationProperty {..}
+    = ReplicaSpecificationProperty
+        {kinesisStreamSpecification = Prelude.pure newValue, ..}
+instance Property "PointInTimeRecoverySpecification" ReplicaSpecificationProperty where
+  type PropertyType "PointInTimeRecoverySpecification" ReplicaSpecificationProperty = PointInTimeRecoverySpecificationProperty
+  set newValue ReplicaSpecificationProperty {..}
+    = ReplicaSpecificationProperty
+        {pointInTimeRecoverySpecification = Prelude.pure newValue, ..}
+instance Property "ReadOnDemandThroughputSettings" ReplicaSpecificationProperty where
+  type PropertyType "ReadOnDemandThroughputSettings" ReplicaSpecificationProperty = ReadOnDemandThroughputSettingsProperty
+  set newValue ReplicaSpecificationProperty {..}
+    = ReplicaSpecificationProperty
+        {readOnDemandThroughputSettings = Prelude.pure newValue, ..}
+instance Property "ReadProvisionedThroughputSettings" ReplicaSpecificationProperty where
+  type PropertyType "ReadProvisionedThroughputSettings" ReplicaSpecificationProperty = ReadProvisionedThroughputSettingsProperty
+  set newValue ReplicaSpecificationProperty {..}
+    = ReplicaSpecificationProperty
+        {readProvisionedThroughputSettings = Prelude.pure newValue, ..}
+instance Property "Region" ReplicaSpecificationProperty where
+  type PropertyType "Region" ReplicaSpecificationProperty = Value Prelude.Text
+  set newValue ReplicaSpecificationProperty {..}
+    = ReplicaSpecificationProperty {region = newValue, ..}
+instance Property "ReplicaStreamSpecification" ReplicaSpecificationProperty where
+  type PropertyType "ReplicaStreamSpecification" ReplicaSpecificationProperty = ReplicaStreamSpecificationProperty
+  set newValue ReplicaSpecificationProperty {..}
+    = ReplicaSpecificationProperty
+        {replicaStreamSpecification = Prelude.pure newValue, ..}
+instance Property "ResourcePolicy" ReplicaSpecificationProperty where
+  type PropertyType "ResourcePolicy" ReplicaSpecificationProperty = ResourcePolicyProperty
+  set newValue ReplicaSpecificationProperty {..}
+    = ReplicaSpecificationProperty
+        {resourcePolicy = Prelude.pure newValue, ..}
+instance Property "SSESpecification" ReplicaSpecificationProperty where
+  type PropertyType "SSESpecification" ReplicaSpecificationProperty = ReplicaSSESpecificationProperty
+  set newValue ReplicaSpecificationProperty {..}
+    = ReplicaSpecificationProperty
+        {sSESpecification = Prelude.pure newValue, ..}
+instance Property "TableClass" ReplicaSpecificationProperty where
+  type PropertyType "TableClass" ReplicaSpecificationProperty = Value Prelude.Text
+  set newValue ReplicaSpecificationProperty {..}
+    = ReplicaSpecificationProperty
+        {tableClass = Prelude.pure newValue, ..}
+instance Property "Tags" ReplicaSpecificationProperty where
+  type PropertyType "Tags" ReplicaSpecificationProperty = [Tag]
+  set newValue ReplicaSpecificationProperty {..}
+    = ReplicaSpecificationProperty {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaSpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.ReplicaSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ReplicaSpecificationProperty :: Prelude.Type
+instance ToResourceProperties ReplicaSpecificationProperty
+instance Prelude.Eq ReplicaSpecificationProperty
+instance Prelude.Show ReplicaSpecificationProperty
+instance JSON.ToJSON ReplicaSpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaStreamSpecificationProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaStreamSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaStreamSpecificationProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.DynamoDB.GlobalTable.ReplicaStreamSpecificationProperty (
+        module Exports, ReplicaStreamSpecificationProperty(..),
+        mkReplicaStreamSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ResourcePolicyProperty as Exports
+import Stratosphere.ResourceProperties
+data ReplicaStreamSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicastreamspecification.html>
+    ReplicaStreamSpecificationProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-replicastreamspecification.html#cfn-dynamodb-globaltable-replicastreamspecification-resourcepolicy>
+                                        resourcePolicy :: ResourcePolicyProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReplicaStreamSpecificationProperty ::
+  ResourcePolicyProperty -> ReplicaStreamSpecificationProperty
+mkReplicaStreamSpecificationProperty resourcePolicy
+  = ReplicaStreamSpecificationProperty
+      {haddock_workaround_ = (), resourcePolicy = resourcePolicy}
+instance ToResourceProperties ReplicaStreamSpecificationProperty where
+  toResourceProperties ReplicaStreamSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.ReplicaStreamSpecification",
+         supportsTags = Prelude.False,
+         properties = ["ResourcePolicy" JSON..= resourcePolicy]}
+instance JSON.ToJSON ReplicaStreamSpecificationProperty where
+  toJSON ReplicaStreamSpecificationProperty {..}
+    = JSON.object ["ResourcePolicy" JSON..= resourcePolicy]
+instance Property "ResourcePolicy" ReplicaStreamSpecificationProperty where
+  type PropertyType "ResourcePolicy" ReplicaStreamSpecificationProperty = ResourcePolicyProperty
+  set newValue ReplicaStreamSpecificationProperty {..}
+    = ReplicaStreamSpecificationProperty
+        {resourcePolicy = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaStreamSpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaStreamSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ReplicaStreamSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.ReplicaStreamSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ReplicaStreamSpecificationProperty :: Prelude.Type
+instance ToResourceProperties ReplicaStreamSpecificationProperty
+instance Prelude.Eq ReplicaStreamSpecificationProperty
+instance Prelude.Show ReplicaStreamSpecificationProperty
+instance JSON.ToJSON ReplicaStreamSpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ResourcePolicyProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/ResourcePolicyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ResourcePolicyProperty.hs
@@ -0,0 +1,30 @@
+module Stratosphere.DynamoDB.GlobalTable.ResourcePolicyProperty (
+        ResourcePolicyProperty(..), mkResourcePolicyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+data ResourcePolicyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-resourcepolicy.html>
+    ResourcePolicyProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-resourcepolicy.html#cfn-dynamodb-globaltable-resourcepolicy-policydocument>
+                            policyDocument :: JSON.Object}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResourcePolicyProperty :: JSON.Object -> ResourcePolicyProperty
+mkResourcePolicyProperty policyDocument
+  = ResourcePolicyProperty
+      {haddock_workaround_ = (), policyDocument = policyDocument}
+instance ToResourceProperties ResourcePolicyProperty where
+  toResourceProperties ResourcePolicyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.ResourcePolicy",
+         supportsTags = Prelude.False,
+         properties = ["PolicyDocument" JSON..= policyDocument]}
+instance JSON.ToJSON ResourcePolicyProperty where
+  toJSON ResourcePolicyProperty {..}
+    = JSON.object ["PolicyDocument" JSON..= policyDocument]
+instance Property "PolicyDocument" ResourcePolicyProperty where
+  type PropertyType "PolicyDocument" ResourcePolicyProperty = JSON.Object
+  set newValue ResourcePolicyProperty {..}
+    = ResourcePolicyProperty {policyDocument = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/ResourcePolicyProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/ResourcePolicyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/ResourcePolicyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.ResourcePolicyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ResourcePolicyProperty :: Prelude.Type
+instance ToResourceProperties ResourcePolicyProperty
+instance Prelude.Eq ResourcePolicyProperty
+instance Prelude.Show ResourcePolicyProperty
+instance JSON.ToJSON ResourcePolicyProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/SSESpecificationProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/SSESpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/SSESpecificationProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.DynamoDB.GlobalTable.SSESpecificationProperty (
+        SSESpecificationProperty(..), mkSSESpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SSESpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-ssespecification.html>
+    SSESpecificationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-ssespecification.html#cfn-dynamodb-globaltable-ssespecification-sseenabled>
+                              sSEEnabled :: (Value Prelude.Bool),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-ssespecification.html#cfn-dynamodb-globaltable-ssespecification-ssetype>
+                              sSEType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSSESpecificationProperty ::
+  Value Prelude.Bool -> SSESpecificationProperty
+mkSSESpecificationProperty sSEEnabled
+  = SSESpecificationProperty
+      {haddock_workaround_ = (), sSEEnabled = sSEEnabled,
+       sSEType = Prelude.Nothing}
+instance ToResourceProperties SSESpecificationProperty where
+  toResourceProperties SSESpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.SSESpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SSEEnabled" JSON..= sSEEnabled]
+                           (Prelude.catMaybes [(JSON..=) "SSEType" Prelude.<$> sSEType]))}
+instance JSON.ToJSON SSESpecificationProperty where
+  toJSON SSESpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SSEEnabled" JSON..= sSEEnabled]
+              (Prelude.catMaybes [(JSON..=) "SSEType" Prelude.<$> sSEType])))
+instance Property "SSEEnabled" SSESpecificationProperty where
+  type PropertyType "SSEEnabled" SSESpecificationProperty = Value Prelude.Bool
+  set newValue SSESpecificationProperty {..}
+    = SSESpecificationProperty {sSEEnabled = newValue, ..}
+instance Property "SSEType" SSESpecificationProperty where
+  type PropertyType "SSEType" SSESpecificationProperty = Value Prelude.Text
+  set newValue SSESpecificationProperty {..}
+    = SSESpecificationProperty {sSEType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/SSESpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/SSESpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/SSESpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.SSESpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SSESpecificationProperty :: Prelude.Type
+instance ToResourceProperties SSESpecificationProperty
+instance Prelude.Eq SSESpecificationProperty
+instance Prelude.Show SSESpecificationProperty
+instance JSON.ToJSON SSESpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/StreamSpecificationProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/StreamSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/StreamSpecificationProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.DynamoDB.GlobalTable.StreamSpecificationProperty (
+        StreamSpecificationProperty(..), mkStreamSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data StreamSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-streamspecification.html>
+    StreamSpecificationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-streamspecification.html#cfn-dynamodb-globaltable-streamspecification-streamviewtype>
+                                 streamViewType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStreamSpecificationProperty ::
+  Value Prelude.Text -> StreamSpecificationProperty
+mkStreamSpecificationProperty streamViewType
+  = StreamSpecificationProperty
+      {haddock_workaround_ = (), streamViewType = streamViewType}
+instance ToResourceProperties StreamSpecificationProperty where
+  toResourceProperties StreamSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.StreamSpecification",
+         supportsTags = Prelude.False,
+         properties = ["StreamViewType" JSON..= streamViewType]}
+instance JSON.ToJSON StreamSpecificationProperty where
+  toJSON StreamSpecificationProperty {..}
+    = JSON.object ["StreamViewType" JSON..= streamViewType]
+instance Property "StreamViewType" StreamSpecificationProperty where
+  type PropertyType "StreamViewType" StreamSpecificationProperty = Value Prelude.Text
+  set newValue StreamSpecificationProperty {..}
+    = StreamSpecificationProperty {streamViewType = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/StreamSpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/StreamSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/StreamSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.StreamSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data StreamSpecificationProperty :: Prelude.Type
+instance ToResourceProperties StreamSpecificationProperty
+instance Prelude.Eq StreamSpecificationProperty
+instance Prelude.Show StreamSpecificationProperty
+instance JSON.ToJSON StreamSpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/TargetTrackingScalingPolicyConfigurationProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/TargetTrackingScalingPolicyConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/TargetTrackingScalingPolicyConfigurationProperty.hs
@@ -0,0 +1,73 @@
+module Stratosphere.DynamoDB.GlobalTable.TargetTrackingScalingPolicyConfigurationProperty (
+        TargetTrackingScalingPolicyConfigurationProperty(..),
+        mkTargetTrackingScalingPolicyConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TargetTrackingScalingPolicyConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-targettrackingscalingpolicyconfiguration.html>
+    TargetTrackingScalingPolicyConfigurationProperty {haddock_workaround_ :: (),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-targettrackingscalingpolicyconfiguration.html#cfn-dynamodb-globaltable-targettrackingscalingpolicyconfiguration-disablescalein>
+                                                      disableScaleIn :: (Prelude.Maybe (Value Prelude.Bool)),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-targettrackingscalingpolicyconfiguration.html#cfn-dynamodb-globaltable-targettrackingscalingpolicyconfiguration-scaleincooldown>
+                                                      scaleInCooldown :: (Prelude.Maybe (Value Prelude.Integer)),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-targettrackingscalingpolicyconfiguration.html#cfn-dynamodb-globaltable-targettrackingscalingpolicyconfiguration-scaleoutcooldown>
+                                                      scaleOutCooldown :: (Prelude.Maybe (Value Prelude.Integer)),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-targettrackingscalingpolicyconfiguration.html#cfn-dynamodb-globaltable-targettrackingscalingpolicyconfiguration-targetvalue>
+                                                      targetValue :: (Value Prelude.Double)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTargetTrackingScalingPolicyConfigurationProperty ::
+  Value Prelude.Double
+  -> TargetTrackingScalingPolicyConfigurationProperty
+mkTargetTrackingScalingPolicyConfigurationProperty targetValue
+  = TargetTrackingScalingPolicyConfigurationProperty
+      {haddock_workaround_ = (), targetValue = targetValue,
+       disableScaleIn = Prelude.Nothing,
+       scaleInCooldown = Prelude.Nothing,
+       scaleOutCooldown = Prelude.Nothing}
+instance ToResourceProperties TargetTrackingScalingPolicyConfigurationProperty where
+  toResourceProperties
+    TargetTrackingScalingPolicyConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.TargetTrackingScalingPolicyConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["TargetValue" JSON..= targetValue]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DisableScaleIn" Prelude.<$> disableScaleIn,
+                               (JSON..=) "ScaleInCooldown" Prelude.<$> scaleInCooldown,
+                               (JSON..=) "ScaleOutCooldown" Prelude.<$> scaleOutCooldown]))}
+instance JSON.ToJSON TargetTrackingScalingPolicyConfigurationProperty where
+  toJSON TargetTrackingScalingPolicyConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["TargetValue" JSON..= targetValue]
+              (Prelude.catMaybes
+                 [(JSON..=) "DisableScaleIn" Prelude.<$> disableScaleIn,
+                  (JSON..=) "ScaleInCooldown" Prelude.<$> scaleInCooldown,
+                  (JSON..=) "ScaleOutCooldown" Prelude.<$> scaleOutCooldown])))
+instance Property "DisableScaleIn" TargetTrackingScalingPolicyConfigurationProperty where
+  type PropertyType "DisableScaleIn" TargetTrackingScalingPolicyConfigurationProperty = Value Prelude.Bool
+  set newValue TargetTrackingScalingPolicyConfigurationProperty {..}
+    = TargetTrackingScalingPolicyConfigurationProperty
+        {disableScaleIn = Prelude.pure newValue, ..}
+instance Property "ScaleInCooldown" TargetTrackingScalingPolicyConfigurationProperty where
+  type PropertyType "ScaleInCooldown" TargetTrackingScalingPolicyConfigurationProperty = Value Prelude.Integer
+  set newValue TargetTrackingScalingPolicyConfigurationProperty {..}
+    = TargetTrackingScalingPolicyConfigurationProperty
+        {scaleInCooldown = Prelude.pure newValue, ..}
+instance Property "ScaleOutCooldown" TargetTrackingScalingPolicyConfigurationProperty where
+  type PropertyType "ScaleOutCooldown" TargetTrackingScalingPolicyConfigurationProperty = Value Prelude.Integer
+  set newValue TargetTrackingScalingPolicyConfigurationProperty {..}
+    = TargetTrackingScalingPolicyConfigurationProperty
+        {scaleOutCooldown = Prelude.pure newValue, ..}
+instance Property "TargetValue" TargetTrackingScalingPolicyConfigurationProperty where
+  type PropertyType "TargetValue" TargetTrackingScalingPolicyConfigurationProperty = Value Prelude.Double
+  set newValue TargetTrackingScalingPolicyConfigurationProperty {..}
+    = TargetTrackingScalingPolicyConfigurationProperty
+        {targetValue = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/TargetTrackingScalingPolicyConfigurationProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/TargetTrackingScalingPolicyConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/TargetTrackingScalingPolicyConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.TargetTrackingScalingPolicyConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TargetTrackingScalingPolicyConfigurationProperty :: Prelude.Type
+instance ToResourceProperties TargetTrackingScalingPolicyConfigurationProperty
+instance Prelude.Eq TargetTrackingScalingPolicyConfigurationProperty
+instance Prelude.Show TargetTrackingScalingPolicyConfigurationProperty
+instance JSON.ToJSON TargetTrackingScalingPolicyConfigurationProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/TimeToLiveSpecificationProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/TimeToLiveSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/TimeToLiveSpecificationProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.DynamoDB.GlobalTable.TimeToLiveSpecificationProperty (
+        TimeToLiveSpecificationProperty(..),
+        mkTimeToLiveSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TimeToLiveSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-timetolivespecification.html>
+    TimeToLiveSpecificationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-timetolivespecification.html#cfn-dynamodb-globaltable-timetolivespecification-attributename>
+                                     attributeName :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-timetolivespecification.html#cfn-dynamodb-globaltable-timetolivespecification-enabled>
+                                     enabled :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTimeToLiveSpecificationProperty ::
+  Value Prelude.Bool -> TimeToLiveSpecificationProperty
+mkTimeToLiveSpecificationProperty enabled
+  = TimeToLiveSpecificationProperty
+      {haddock_workaround_ = (), enabled = enabled,
+       attributeName = Prelude.Nothing}
+instance ToResourceProperties TimeToLiveSpecificationProperty where
+  toResourceProperties TimeToLiveSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.TimeToLiveSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Enabled" JSON..= enabled]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AttributeName" Prelude.<$> attributeName]))}
+instance JSON.ToJSON TimeToLiveSpecificationProperty where
+  toJSON TimeToLiveSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Enabled" JSON..= enabled]
+              (Prelude.catMaybes
+                 [(JSON..=) "AttributeName" Prelude.<$> attributeName])))
+instance Property "AttributeName" TimeToLiveSpecificationProperty where
+  type PropertyType "AttributeName" TimeToLiveSpecificationProperty = Value Prelude.Text
+  set newValue TimeToLiveSpecificationProperty {..}
+    = TimeToLiveSpecificationProperty
+        {attributeName = Prelude.pure newValue, ..}
+instance Property "Enabled" TimeToLiveSpecificationProperty where
+  type PropertyType "Enabled" TimeToLiveSpecificationProperty = Value Prelude.Bool
+  set newValue TimeToLiveSpecificationProperty {..}
+    = TimeToLiveSpecificationProperty {enabled = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/TimeToLiveSpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/TimeToLiveSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/TimeToLiveSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.TimeToLiveSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TimeToLiveSpecificationProperty :: Prelude.Type
+instance ToResourceProperties TimeToLiveSpecificationProperty
+instance Prelude.Eq TimeToLiveSpecificationProperty
+instance Prelude.Show TimeToLiveSpecificationProperty
+instance JSON.ToJSON TimeToLiveSpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/WarmThroughputProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/WarmThroughputProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/WarmThroughputProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.DynamoDB.GlobalTable.WarmThroughputProperty (
+        WarmThroughputProperty(..), mkWarmThroughputProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data WarmThroughputProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-warmthroughput.html>
+    WarmThroughputProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-warmthroughput.html#cfn-dynamodb-globaltable-warmthroughput-readunitspersecond>
+                            readUnitsPerSecond :: (Prelude.Maybe (Value Prelude.Integer)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-warmthroughput.html#cfn-dynamodb-globaltable-warmthroughput-writeunitspersecond>
+                            writeUnitsPerSecond :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkWarmThroughputProperty :: WarmThroughputProperty
+mkWarmThroughputProperty
+  = WarmThroughputProperty
+      {haddock_workaround_ = (), readUnitsPerSecond = Prelude.Nothing,
+       writeUnitsPerSecond = Prelude.Nothing}
+instance ToResourceProperties WarmThroughputProperty where
+  toResourceProperties WarmThroughputProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.WarmThroughput",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ReadUnitsPerSecond" Prelude.<$> readUnitsPerSecond,
+                            (JSON..=) "WriteUnitsPerSecond" Prelude.<$> writeUnitsPerSecond])}
+instance JSON.ToJSON WarmThroughputProperty where
+  toJSON WarmThroughputProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ReadUnitsPerSecond" Prelude.<$> readUnitsPerSecond,
+               (JSON..=) "WriteUnitsPerSecond" Prelude.<$> writeUnitsPerSecond]))
+instance Property "ReadUnitsPerSecond" WarmThroughputProperty where
+  type PropertyType "ReadUnitsPerSecond" WarmThroughputProperty = Value Prelude.Integer
+  set newValue WarmThroughputProperty {..}
+    = WarmThroughputProperty
+        {readUnitsPerSecond = Prelude.pure newValue, ..}
+instance Property "WriteUnitsPerSecond" WarmThroughputProperty where
+  type PropertyType "WriteUnitsPerSecond" WarmThroughputProperty = Value Prelude.Integer
+  set newValue WarmThroughputProperty {..}
+    = WarmThroughputProperty
+        {writeUnitsPerSecond = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/WarmThroughputProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/WarmThroughputProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/WarmThroughputProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.WarmThroughputProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data WarmThroughputProperty :: Prelude.Type
+instance ToResourceProperties WarmThroughputProperty
+instance Prelude.Eq WarmThroughputProperty
+instance Prelude.Show WarmThroughputProperty
+instance JSON.ToJSON WarmThroughputProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/WriteOnDemandThroughputSettingsProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/WriteOnDemandThroughputSettingsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/WriteOnDemandThroughputSettingsProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.DynamoDB.GlobalTable.WriteOnDemandThroughputSettingsProperty (
+        WriteOnDemandThroughputSettingsProperty(..),
+        mkWriteOnDemandThroughputSettingsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data WriteOnDemandThroughputSettingsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-writeondemandthroughputsettings.html>
+    WriteOnDemandThroughputSettingsProperty {haddock_workaround_ :: (),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-writeondemandthroughputsettings.html#cfn-dynamodb-globaltable-writeondemandthroughputsettings-maxwriterequestunits>
+                                             maxWriteRequestUnits :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkWriteOnDemandThroughputSettingsProperty ::
+  WriteOnDemandThroughputSettingsProperty
+mkWriteOnDemandThroughputSettingsProperty
+  = WriteOnDemandThroughputSettingsProperty
+      {haddock_workaround_ = (), maxWriteRequestUnits = Prelude.Nothing}
+instance ToResourceProperties WriteOnDemandThroughputSettingsProperty where
+  toResourceProperties WriteOnDemandThroughputSettingsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.WriteOnDemandThroughputSettings",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "MaxWriteRequestUnits"
+                              Prelude.<$> maxWriteRequestUnits])}
+instance JSON.ToJSON WriteOnDemandThroughputSettingsProperty where
+  toJSON WriteOnDemandThroughputSettingsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "MaxWriteRequestUnits"
+                 Prelude.<$> maxWriteRequestUnits]))
+instance Property "MaxWriteRequestUnits" WriteOnDemandThroughputSettingsProperty where
+  type PropertyType "MaxWriteRequestUnits" WriteOnDemandThroughputSettingsProperty = Value Prelude.Integer
+  set newValue WriteOnDemandThroughputSettingsProperty {..}
+    = WriteOnDemandThroughputSettingsProperty
+        {maxWriteRequestUnits = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/WriteOnDemandThroughputSettingsProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/WriteOnDemandThroughputSettingsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/WriteOnDemandThroughputSettingsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.WriteOnDemandThroughputSettingsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data WriteOnDemandThroughputSettingsProperty :: Prelude.Type
+instance ToResourceProperties WriteOnDemandThroughputSettingsProperty
+instance Prelude.Eq WriteOnDemandThroughputSettingsProperty
+instance Prelude.Show WriteOnDemandThroughputSettingsProperty
+instance JSON.ToJSON WriteOnDemandThroughputSettingsProperty
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/WriteProvisionedThroughputSettingsProperty.hs b/gen/Stratosphere/DynamoDB/GlobalTable/WriteProvisionedThroughputSettingsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/WriteProvisionedThroughputSettingsProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.DynamoDB.GlobalTable.WriteProvisionedThroughputSettingsProperty (
+        module Exports, WriteProvisionedThroughputSettingsProperty(..),
+        mkWriteProvisionedThroughputSettingsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.CapacityAutoScalingSettingsProperty as Exports
+import Stratosphere.ResourceProperties
+data WriteProvisionedThroughputSettingsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-writeprovisionedthroughputsettings.html>
+    WriteProvisionedThroughputSettingsProperty {haddock_workaround_ :: (),
+                                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-writeprovisionedthroughputsettings.html#cfn-dynamodb-globaltable-writeprovisionedthroughputsettings-writecapacityautoscalingsettings>
+                                                writeCapacityAutoScalingSettings :: (Prelude.Maybe CapacityAutoScalingSettingsProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkWriteProvisionedThroughputSettingsProperty ::
+  WriteProvisionedThroughputSettingsProperty
+mkWriteProvisionedThroughputSettingsProperty
+  = WriteProvisionedThroughputSettingsProperty
+      {haddock_workaround_ = (),
+       writeCapacityAutoScalingSettings = Prelude.Nothing}
+instance ToResourceProperties WriteProvisionedThroughputSettingsProperty where
+  toResourceProperties
+    WriteProvisionedThroughputSettingsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::GlobalTable.WriteProvisionedThroughputSettings",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "WriteCapacityAutoScalingSettings"
+                              Prelude.<$> writeCapacityAutoScalingSettings])}
+instance JSON.ToJSON WriteProvisionedThroughputSettingsProperty where
+  toJSON WriteProvisionedThroughputSettingsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "WriteCapacityAutoScalingSettings"
+                 Prelude.<$> writeCapacityAutoScalingSettings]))
+instance Property "WriteCapacityAutoScalingSettings" WriteProvisionedThroughputSettingsProperty where
+  type PropertyType "WriteCapacityAutoScalingSettings" WriteProvisionedThroughputSettingsProperty = CapacityAutoScalingSettingsProperty
+  set newValue WriteProvisionedThroughputSettingsProperty {..}
+    = WriteProvisionedThroughputSettingsProperty
+        {writeCapacityAutoScalingSettings = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/GlobalTable/WriteProvisionedThroughputSettingsProperty.hs-boot b/gen/Stratosphere/DynamoDB/GlobalTable/WriteProvisionedThroughputSettingsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/GlobalTable/WriteProvisionedThroughputSettingsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.GlobalTable.WriteProvisionedThroughputSettingsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data WriteProvisionedThroughputSettingsProperty :: Prelude.Type
+instance ToResourceProperties WriteProvisionedThroughputSettingsProperty
+instance Prelude.Eq WriteProvisionedThroughputSettingsProperty
+instance Prelude.Show WriteProvisionedThroughputSettingsProperty
+instance JSON.ToJSON WriteProvisionedThroughputSettingsProperty
diff --git a/gen/Stratosphere/DynamoDB/Table.hs b/gen/Stratosphere/DynamoDB/Table.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table.hs
@@ -0,0 +1,240 @@
+module Stratosphere.DynamoDB.Table (
+        module Exports, Table(..), mkTable
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.AttributeDefinitionProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.ContributorInsightsSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.GlobalSecondaryIndexProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.ImportSourceSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.KeySchemaProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.KinesisStreamSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.LocalSecondaryIndexProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.OnDemandThroughputProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.PointInTimeRecoverySpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.ProvisionedThroughputProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.ResourcePolicyProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.SSESpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.StreamSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.TimeToLiveSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.WarmThroughputProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Table
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html>
+    Table {haddock_workaround_ :: (),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-attributedefinitions>
+           attributeDefinitions :: (Prelude.Maybe [AttributeDefinitionProperty]),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-billingmode>
+           billingMode :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-contributorinsightsspecification>
+           contributorInsightsSpecification :: (Prelude.Maybe ContributorInsightsSpecificationProperty),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-deletionprotectionenabled>
+           deletionProtectionEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-globalsecondaryindexes>
+           globalSecondaryIndexes :: (Prelude.Maybe [GlobalSecondaryIndexProperty]),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-importsourcespecification>
+           importSourceSpecification :: (Prelude.Maybe ImportSourceSpecificationProperty),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-keyschema>
+           keySchema :: [KeySchemaProperty],
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-kinesisstreamspecification>
+           kinesisStreamSpecification :: (Prelude.Maybe KinesisStreamSpecificationProperty),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-localsecondaryindexes>
+           localSecondaryIndexes :: (Prelude.Maybe [LocalSecondaryIndexProperty]),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-ondemandthroughput>
+           onDemandThroughput :: (Prelude.Maybe OnDemandThroughputProperty),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-pointintimerecoveryspecification>
+           pointInTimeRecoverySpecification :: (Prelude.Maybe PointInTimeRecoverySpecificationProperty),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-provisionedthroughput>
+           provisionedThroughput :: (Prelude.Maybe ProvisionedThroughputProperty),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-resourcepolicy>
+           resourcePolicy :: (Prelude.Maybe ResourcePolicyProperty),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-ssespecification>
+           sSESpecification :: (Prelude.Maybe SSESpecificationProperty),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-streamspecification>
+           streamSpecification :: (Prelude.Maybe StreamSpecificationProperty),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-tableclass>
+           tableClass :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-tablename>
+           tableName :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-tags>
+           tags :: (Prelude.Maybe [Tag]),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-timetolivespecification>
+           timeToLiveSpecification :: (Prelude.Maybe TimeToLiveSpecificationProperty),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-warmthroughput>
+           warmThroughput :: (Prelude.Maybe WarmThroughputProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTable :: [KeySchemaProperty] -> Table
+mkTable keySchema
+  = Table
+      {haddock_workaround_ = (), keySchema = keySchema,
+       attributeDefinitions = Prelude.Nothing,
+       billingMode = Prelude.Nothing,
+       contributorInsightsSpecification = Prelude.Nothing,
+       deletionProtectionEnabled = Prelude.Nothing,
+       globalSecondaryIndexes = Prelude.Nothing,
+       importSourceSpecification = Prelude.Nothing,
+       kinesisStreamSpecification = Prelude.Nothing,
+       localSecondaryIndexes = Prelude.Nothing,
+       onDemandThroughput = Prelude.Nothing,
+       pointInTimeRecoverySpecification = Prelude.Nothing,
+       provisionedThroughput = Prelude.Nothing,
+       resourcePolicy = Prelude.Nothing,
+       sSESpecification = Prelude.Nothing,
+       streamSpecification = Prelude.Nothing,
+       tableClass = Prelude.Nothing, tableName = Prelude.Nothing,
+       tags = Prelude.Nothing, timeToLiveSpecification = Prelude.Nothing,
+       warmThroughput = Prelude.Nothing}
+instance ToResourceProperties Table where
+  toResourceProperties Table {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["KeySchema" JSON..= keySchema]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AttributeDefinitions" Prelude.<$> attributeDefinitions,
+                               (JSON..=) "BillingMode" Prelude.<$> billingMode,
+                               (JSON..=) "ContributorInsightsSpecification"
+                                 Prelude.<$> contributorInsightsSpecification,
+                               (JSON..=) "DeletionProtectionEnabled"
+                                 Prelude.<$> deletionProtectionEnabled,
+                               (JSON..=) "GlobalSecondaryIndexes"
+                                 Prelude.<$> globalSecondaryIndexes,
+                               (JSON..=) "ImportSourceSpecification"
+                                 Prelude.<$> importSourceSpecification,
+                               (JSON..=) "KinesisStreamSpecification"
+                                 Prelude.<$> kinesisStreamSpecification,
+                               (JSON..=) "LocalSecondaryIndexes"
+                                 Prelude.<$> localSecondaryIndexes,
+                               (JSON..=) "OnDemandThroughput" Prelude.<$> onDemandThroughput,
+                               (JSON..=) "PointInTimeRecoverySpecification"
+                                 Prelude.<$> pointInTimeRecoverySpecification,
+                               (JSON..=) "ProvisionedThroughput"
+                                 Prelude.<$> provisionedThroughput,
+                               (JSON..=) "ResourcePolicy" Prelude.<$> resourcePolicy,
+                               (JSON..=) "SSESpecification" Prelude.<$> sSESpecification,
+                               (JSON..=) "StreamSpecification" Prelude.<$> streamSpecification,
+                               (JSON..=) "TableClass" Prelude.<$> tableClass,
+                               (JSON..=) "TableName" Prelude.<$> tableName,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "TimeToLiveSpecification"
+                                 Prelude.<$> timeToLiveSpecification,
+                               (JSON..=) "WarmThroughput" Prelude.<$> warmThroughput]))}
+instance JSON.ToJSON Table where
+  toJSON Table {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["KeySchema" JSON..= keySchema]
+              (Prelude.catMaybes
+                 [(JSON..=) "AttributeDefinitions" Prelude.<$> attributeDefinitions,
+                  (JSON..=) "BillingMode" Prelude.<$> billingMode,
+                  (JSON..=) "ContributorInsightsSpecification"
+                    Prelude.<$> contributorInsightsSpecification,
+                  (JSON..=) "DeletionProtectionEnabled"
+                    Prelude.<$> deletionProtectionEnabled,
+                  (JSON..=) "GlobalSecondaryIndexes"
+                    Prelude.<$> globalSecondaryIndexes,
+                  (JSON..=) "ImportSourceSpecification"
+                    Prelude.<$> importSourceSpecification,
+                  (JSON..=) "KinesisStreamSpecification"
+                    Prelude.<$> kinesisStreamSpecification,
+                  (JSON..=) "LocalSecondaryIndexes"
+                    Prelude.<$> localSecondaryIndexes,
+                  (JSON..=) "OnDemandThroughput" Prelude.<$> onDemandThroughput,
+                  (JSON..=) "PointInTimeRecoverySpecification"
+                    Prelude.<$> pointInTimeRecoverySpecification,
+                  (JSON..=) "ProvisionedThroughput"
+                    Prelude.<$> provisionedThroughput,
+                  (JSON..=) "ResourcePolicy" Prelude.<$> resourcePolicy,
+                  (JSON..=) "SSESpecification" Prelude.<$> sSESpecification,
+                  (JSON..=) "StreamSpecification" Prelude.<$> streamSpecification,
+                  (JSON..=) "TableClass" Prelude.<$> tableClass,
+                  (JSON..=) "TableName" Prelude.<$> tableName,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "TimeToLiveSpecification"
+                    Prelude.<$> timeToLiveSpecification,
+                  (JSON..=) "WarmThroughput" Prelude.<$> warmThroughput])))
+instance Property "AttributeDefinitions" Table where
+  type PropertyType "AttributeDefinitions" Table = [AttributeDefinitionProperty]
+  set newValue Table {..}
+    = Table {attributeDefinitions = Prelude.pure newValue, ..}
+instance Property "BillingMode" Table where
+  type PropertyType "BillingMode" Table = Value Prelude.Text
+  set newValue Table {..}
+    = Table {billingMode = Prelude.pure newValue, ..}
+instance Property "ContributorInsightsSpecification" Table where
+  type PropertyType "ContributorInsightsSpecification" Table = ContributorInsightsSpecificationProperty
+  set newValue Table {..}
+    = Table
+        {contributorInsightsSpecification = Prelude.pure newValue, ..}
+instance Property "DeletionProtectionEnabled" Table where
+  type PropertyType "DeletionProtectionEnabled" Table = Value Prelude.Bool
+  set newValue Table {..}
+    = Table {deletionProtectionEnabled = Prelude.pure newValue, ..}
+instance Property "GlobalSecondaryIndexes" Table where
+  type PropertyType "GlobalSecondaryIndexes" Table = [GlobalSecondaryIndexProperty]
+  set newValue Table {..}
+    = Table {globalSecondaryIndexes = Prelude.pure newValue, ..}
+instance Property "ImportSourceSpecification" Table where
+  type PropertyType "ImportSourceSpecification" Table = ImportSourceSpecificationProperty
+  set newValue Table {..}
+    = Table {importSourceSpecification = Prelude.pure newValue, ..}
+instance Property "KeySchema" Table where
+  type PropertyType "KeySchema" Table = [KeySchemaProperty]
+  set newValue Table {..} = Table {keySchema = newValue, ..}
+instance Property "KinesisStreamSpecification" Table where
+  type PropertyType "KinesisStreamSpecification" Table = KinesisStreamSpecificationProperty
+  set newValue Table {..}
+    = Table {kinesisStreamSpecification = Prelude.pure newValue, ..}
+instance Property "LocalSecondaryIndexes" Table where
+  type PropertyType "LocalSecondaryIndexes" Table = [LocalSecondaryIndexProperty]
+  set newValue Table {..}
+    = Table {localSecondaryIndexes = Prelude.pure newValue, ..}
+instance Property "OnDemandThroughput" Table where
+  type PropertyType "OnDemandThroughput" Table = OnDemandThroughputProperty
+  set newValue Table {..}
+    = Table {onDemandThroughput = Prelude.pure newValue, ..}
+instance Property "PointInTimeRecoverySpecification" Table where
+  type PropertyType "PointInTimeRecoverySpecification" Table = PointInTimeRecoverySpecificationProperty
+  set newValue Table {..}
+    = Table
+        {pointInTimeRecoverySpecification = Prelude.pure newValue, ..}
+instance Property "ProvisionedThroughput" Table where
+  type PropertyType "ProvisionedThroughput" Table = ProvisionedThroughputProperty
+  set newValue Table {..}
+    = Table {provisionedThroughput = Prelude.pure newValue, ..}
+instance Property "ResourcePolicy" Table where
+  type PropertyType "ResourcePolicy" Table = ResourcePolicyProperty
+  set newValue Table {..}
+    = Table {resourcePolicy = Prelude.pure newValue, ..}
+instance Property "SSESpecification" Table where
+  type PropertyType "SSESpecification" Table = SSESpecificationProperty
+  set newValue Table {..}
+    = Table {sSESpecification = Prelude.pure newValue, ..}
+instance Property "StreamSpecification" Table where
+  type PropertyType "StreamSpecification" Table = StreamSpecificationProperty
+  set newValue Table {..}
+    = Table {streamSpecification = Prelude.pure newValue, ..}
+instance Property "TableClass" Table where
+  type PropertyType "TableClass" Table = Value Prelude.Text
+  set newValue Table {..}
+    = Table {tableClass = Prelude.pure newValue, ..}
+instance Property "TableName" Table where
+  type PropertyType "TableName" Table = Value Prelude.Text
+  set newValue Table {..}
+    = Table {tableName = Prelude.pure newValue, ..}
+instance Property "Tags" Table where
+  type PropertyType "Tags" Table = [Tag]
+  set newValue Table {..} = Table {tags = Prelude.pure newValue, ..}
+instance Property "TimeToLiveSpecification" Table where
+  type PropertyType "TimeToLiveSpecification" Table = TimeToLiveSpecificationProperty
+  set newValue Table {..}
+    = Table {timeToLiveSpecification = Prelude.pure newValue, ..}
+instance Property "WarmThroughput" Table where
+  type PropertyType "WarmThroughput" Table = WarmThroughputProperty
+  set newValue Table {..}
+    = Table {warmThroughput = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/AttributeDefinitionProperty.hs b/gen/Stratosphere/DynamoDB/Table/AttributeDefinitionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/AttributeDefinitionProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.DynamoDB.Table.AttributeDefinitionProperty (
+        AttributeDefinitionProperty(..), mkAttributeDefinitionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AttributeDefinitionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-attributedefinition.html>
+    AttributeDefinitionProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-attributedefinition.html#cfn-dynamodb-table-attributedefinition-attributename>
+                                 attributeName :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-attributedefinition.html#cfn-dynamodb-table-attributedefinition-attributetype>
+                                 attributeType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAttributeDefinitionProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> AttributeDefinitionProperty
+mkAttributeDefinitionProperty attributeName attributeType
+  = AttributeDefinitionProperty
+      {haddock_workaround_ = (), attributeName = attributeName,
+       attributeType = attributeType}
+instance ToResourceProperties AttributeDefinitionProperty where
+  toResourceProperties AttributeDefinitionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.AttributeDefinition",
+         supportsTags = Prelude.False,
+         properties = ["AttributeName" JSON..= attributeName,
+                       "AttributeType" JSON..= attributeType]}
+instance JSON.ToJSON AttributeDefinitionProperty where
+  toJSON AttributeDefinitionProperty {..}
+    = JSON.object
+        ["AttributeName" JSON..= attributeName,
+         "AttributeType" JSON..= attributeType]
+instance Property "AttributeName" AttributeDefinitionProperty where
+  type PropertyType "AttributeName" AttributeDefinitionProperty = Value Prelude.Text
+  set newValue AttributeDefinitionProperty {..}
+    = AttributeDefinitionProperty {attributeName = newValue, ..}
+instance Property "AttributeType" AttributeDefinitionProperty where
+  type PropertyType "AttributeType" AttributeDefinitionProperty = Value Prelude.Text
+  set newValue AttributeDefinitionProperty {..}
+    = AttributeDefinitionProperty {attributeType = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/AttributeDefinitionProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/AttributeDefinitionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/AttributeDefinitionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.AttributeDefinitionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AttributeDefinitionProperty :: Prelude.Type
+instance ToResourceProperties AttributeDefinitionProperty
+instance Prelude.Eq AttributeDefinitionProperty
+instance Prelude.Show AttributeDefinitionProperty
+instance JSON.ToJSON AttributeDefinitionProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/ContributorInsightsSpecificationProperty.hs b/gen/Stratosphere/DynamoDB/Table/ContributorInsightsSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/ContributorInsightsSpecificationProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.DynamoDB.Table.ContributorInsightsSpecificationProperty (
+        ContributorInsightsSpecificationProperty(..),
+        mkContributorInsightsSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ContributorInsightsSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-contributorinsightsspecification.html>
+    ContributorInsightsSpecificationProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-contributorinsightsspecification.html#cfn-dynamodb-table-contributorinsightsspecification-enabled>
+                                              enabled :: (Value Prelude.Bool),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-contributorinsightsspecification.html#cfn-dynamodb-table-contributorinsightsspecification-mode>
+                                              mode :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkContributorInsightsSpecificationProperty ::
+  Value Prelude.Bool -> ContributorInsightsSpecificationProperty
+mkContributorInsightsSpecificationProperty enabled
+  = ContributorInsightsSpecificationProperty
+      {haddock_workaround_ = (), enabled = enabled,
+       mode = Prelude.Nothing}
+instance ToResourceProperties ContributorInsightsSpecificationProperty where
+  toResourceProperties ContributorInsightsSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.ContributorInsightsSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Enabled" JSON..= enabled]
+                           (Prelude.catMaybes [(JSON..=) "Mode" Prelude.<$> mode]))}
+instance JSON.ToJSON ContributorInsightsSpecificationProperty where
+  toJSON ContributorInsightsSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Enabled" JSON..= enabled]
+              (Prelude.catMaybes [(JSON..=) "Mode" Prelude.<$> mode])))
+instance Property "Enabled" ContributorInsightsSpecificationProperty where
+  type PropertyType "Enabled" ContributorInsightsSpecificationProperty = Value Prelude.Bool
+  set newValue ContributorInsightsSpecificationProperty {..}
+    = ContributorInsightsSpecificationProperty {enabled = newValue, ..}
+instance Property "Mode" ContributorInsightsSpecificationProperty where
+  type PropertyType "Mode" ContributorInsightsSpecificationProperty = Value Prelude.Text
+  set newValue ContributorInsightsSpecificationProperty {..}
+    = ContributorInsightsSpecificationProperty
+        {mode = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/ContributorInsightsSpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/ContributorInsightsSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/ContributorInsightsSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.ContributorInsightsSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ContributorInsightsSpecificationProperty :: Prelude.Type
+instance ToResourceProperties ContributorInsightsSpecificationProperty
+instance Prelude.Eq ContributorInsightsSpecificationProperty
+instance Prelude.Show ContributorInsightsSpecificationProperty
+instance JSON.ToJSON ContributorInsightsSpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/CsvProperty.hs b/gen/Stratosphere/DynamoDB/Table/CsvProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/CsvProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.DynamoDB.Table.CsvProperty (
+        CsvProperty(..), mkCsvProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CsvProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-csv.html>
+    CsvProperty {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-csv.html#cfn-dynamodb-table-csv-delimiter>
+                 delimiter :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-csv.html#cfn-dynamodb-table-csv-headerlist>
+                 headerList :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCsvProperty :: CsvProperty
+mkCsvProperty
+  = CsvProperty
+      {haddock_workaround_ = (), delimiter = Prelude.Nothing,
+       headerList = Prelude.Nothing}
+instance ToResourceProperties CsvProperty where
+  toResourceProperties CsvProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.Csv",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Delimiter" Prelude.<$> delimiter,
+                            (JSON..=) "HeaderList" Prelude.<$> headerList])}
+instance JSON.ToJSON CsvProperty where
+  toJSON CsvProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Delimiter" Prelude.<$> delimiter,
+               (JSON..=) "HeaderList" Prelude.<$> headerList]))
+instance Property "Delimiter" CsvProperty where
+  type PropertyType "Delimiter" CsvProperty = Value Prelude.Text
+  set newValue CsvProperty {..}
+    = CsvProperty {delimiter = Prelude.pure newValue, ..}
+instance Property "HeaderList" CsvProperty where
+  type PropertyType "HeaderList" CsvProperty = ValueList Prelude.Text
+  set newValue CsvProperty {..}
+    = CsvProperty {headerList = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/CsvProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/CsvProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/CsvProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.CsvProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CsvProperty :: Prelude.Type
+instance ToResourceProperties CsvProperty
+instance Prelude.Eq CsvProperty
+instance Prelude.Show CsvProperty
+instance JSON.ToJSON CsvProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/GlobalSecondaryIndexProperty.hs b/gen/Stratosphere/DynamoDB/Table/GlobalSecondaryIndexProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/GlobalSecondaryIndexProperty.hs
@@ -0,0 +1,107 @@
+module Stratosphere.DynamoDB.Table.GlobalSecondaryIndexProperty (
+        module Exports, GlobalSecondaryIndexProperty(..),
+        mkGlobalSecondaryIndexProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.ContributorInsightsSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.KeySchemaProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.OnDemandThroughputProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.ProjectionProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.ProvisionedThroughputProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.WarmThroughputProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data GlobalSecondaryIndexProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-globalsecondaryindex.html>
+    GlobalSecondaryIndexProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-globalsecondaryindex.html#cfn-dynamodb-table-globalsecondaryindex-contributorinsightsspecification>
+                                  contributorInsightsSpecification :: (Prelude.Maybe ContributorInsightsSpecificationProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-globalsecondaryindex.html#cfn-dynamodb-table-globalsecondaryindex-indexname>
+                                  indexName :: (Value Prelude.Text),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-globalsecondaryindex.html#cfn-dynamodb-table-globalsecondaryindex-keyschema>
+                                  keySchema :: [KeySchemaProperty],
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-globalsecondaryindex.html#cfn-dynamodb-table-globalsecondaryindex-ondemandthroughput>
+                                  onDemandThroughput :: (Prelude.Maybe OnDemandThroughputProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-globalsecondaryindex.html#cfn-dynamodb-table-globalsecondaryindex-projection>
+                                  projection :: ProjectionProperty,
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-globalsecondaryindex.html#cfn-dynamodb-table-globalsecondaryindex-provisionedthroughput>
+                                  provisionedThroughput :: (Prelude.Maybe ProvisionedThroughputProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-globalsecondaryindex.html#cfn-dynamodb-table-globalsecondaryindex-warmthroughput>
+                                  warmThroughput :: (Prelude.Maybe WarmThroughputProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGlobalSecondaryIndexProperty ::
+  Value Prelude.Text
+  -> [KeySchemaProperty]
+     -> ProjectionProperty -> GlobalSecondaryIndexProperty
+mkGlobalSecondaryIndexProperty indexName keySchema projection
+  = GlobalSecondaryIndexProperty
+      {haddock_workaround_ = (), indexName = indexName,
+       keySchema = keySchema, projection = projection,
+       contributorInsightsSpecification = Prelude.Nothing,
+       onDemandThroughput = Prelude.Nothing,
+       provisionedThroughput = Prelude.Nothing,
+       warmThroughput = Prelude.Nothing}
+instance ToResourceProperties GlobalSecondaryIndexProperty where
+  toResourceProperties GlobalSecondaryIndexProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.GlobalSecondaryIndex",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IndexName" JSON..= indexName, "KeySchema" JSON..= keySchema,
+                            "Projection" JSON..= projection]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ContributorInsightsSpecification"
+                                 Prelude.<$> contributorInsightsSpecification,
+                               (JSON..=) "OnDemandThroughput" Prelude.<$> onDemandThroughput,
+                               (JSON..=) "ProvisionedThroughput"
+                                 Prelude.<$> provisionedThroughput,
+                               (JSON..=) "WarmThroughput" Prelude.<$> warmThroughput]))}
+instance JSON.ToJSON GlobalSecondaryIndexProperty where
+  toJSON GlobalSecondaryIndexProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IndexName" JSON..= indexName, "KeySchema" JSON..= keySchema,
+               "Projection" JSON..= projection]
+              (Prelude.catMaybes
+                 [(JSON..=) "ContributorInsightsSpecification"
+                    Prelude.<$> contributorInsightsSpecification,
+                  (JSON..=) "OnDemandThroughput" Prelude.<$> onDemandThroughput,
+                  (JSON..=) "ProvisionedThroughput"
+                    Prelude.<$> provisionedThroughput,
+                  (JSON..=) "WarmThroughput" Prelude.<$> warmThroughput])))
+instance Property "ContributorInsightsSpecification" GlobalSecondaryIndexProperty where
+  type PropertyType "ContributorInsightsSpecification" GlobalSecondaryIndexProperty = ContributorInsightsSpecificationProperty
+  set newValue GlobalSecondaryIndexProperty {..}
+    = GlobalSecondaryIndexProperty
+        {contributorInsightsSpecification = Prelude.pure newValue, ..}
+instance Property "IndexName" GlobalSecondaryIndexProperty where
+  type PropertyType "IndexName" GlobalSecondaryIndexProperty = Value Prelude.Text
+  set newValue GlobalSecondaryIndexProperty {..}
+    = GlobalSecondaryIndexProperty {indexName = newValue, ..}
+instance Property "KeySchema" GlobalSecondaryIndexProperty where
+  type PropertyType "KeySchema" GlobalSecondaryIndexProperty = [KeySchemaProperty]
+  set newValue GlobalSecondaryIndexProperty {..}
+    = GlobalSecondaryIndexProperty {keySchema = newValue, ..}
+instance Property "OnDemandThroughput" GlobalSecondaryIndexProperty where
+  type PropertyType "OnDemandThroughput" GlobalSecondaryIndexProperty = OnDemandThroughputProperty
+  set newValue GlobalSecondaryIndexProperty {..}
+    = GlobalSecondaryIndexProperty
+        {onDemandThroughput = Prelude.pure newValue, ..}
+instance Property "Projection" GlobalSecondaryIndexProperty where
+  type PropertyType "Projection" GlobalSecondaryIndexProperty = ProjectionProperty
+  set newValue GlobalSecondaryIndexProperty {..}
+    = GlobalSecondaryIndexProperty {projection = newValue, ..}
+instance Property "ProvisionedThroughput" GlobalSecondaryIndexProperty where
+  type PropertyType "ProvisionedThroughput" GlobalSecondaryIndexProperty = ProvisionedThroughputProperty
+  set newValue GlobalSecondaryIndexProperty {..}
+    = GlobalSecondaryIndexProperty
+        {provisionedThroughput = Prelude.pure newValue, ..}
+instance Property "WarmThroughput" GlobalSecondaryIndexProperty where
+  type PropertyType "WarmThroughput" GlobalSecondaryIndexProperty = WarmThroughputProperty
+  set newValue GlobalSecondaryIndexProperty {..}
+    = GlobalSecondaryIndexProperty
+        {warmThroughput = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/GlobalSecondaryIndexProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/GlobalSecondaryIndexProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/GlobalSecondaryIndexProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.GlobalSecondaryIndexProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data GlobalSecondaryIndexProperty :: Prelude.Type
+instance ToResourceProperties GlobalSecondaryIndexProperty
+instance Prelude.Eq GlobalSecondaryIndexProperty
+instance Prelude.Show GlobalSecondaryIndexProperty
+instance JSON.ToJSON GlobalSecondaryIndexProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/ImportSourceSpecificationProperty.hs b/gen/Stratosphere/DynamoDB/Table/ImportSourceSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/ImportSourceSpecificationProperty.hs
@@ -0,0 +1,72 @@
+module Stratosphere.DynamoDB.Table.ImportSourceSpecificationProperty (
+        module Exports, ImportSourceSpecificationProperty(..),
+        mkImportSourceSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.InputFormatOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.S3BucketSourceProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ImportSourceSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-importsourcespecification.html>
+    ImportSourceSpecificationProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-importsourcespecification.html#cfn-dynamodb-table-importsourcespecification-inputcompressiontype>
+                                       inputCompressionType :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-importsourcespecification.html#cfn-dynamodb-table-importsourcespecification-inputformat>
+                                       inputFormat :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-importsourcespecification.html#cfn-dynamodb-table-importsourcespecification-inputformatoptions>
+                                       inputFormatOptions :: (Prelude.Maybe InputFormatOptionsProperty),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-importsourcespecification.html#cfn-dynamodb-table-importsourcespecification-s3bucketsource>
+                                       s3BucketSource :: S3BucketSourceProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkImportSourceSpecificationProperty ::
+  Value Prelude.Text
+  -> S3BucketSourceProperty -> ImportSourceSpecificationProperty
+mkImportSourceSpecificationProperty inputFormat s3BucketSource
+  = ImportSourceSpecificationProperty
+      {haddock_workaround_ = (), inputFormat = inputFormat,
+       s3BucketSource = s3BucketSource,
+       inputCompressionType = Prelude.Nothing,
+       inputFormatOptions = Prelude.Nothing}
+instance ToResourceProperties ImportSourceSpecificationProperty where
+  toResourceProperties ImportSourceSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.ImportSourceSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["InputFormat" JSON..= inputFormat,
+                            "S3BucketSource" JSON..= s3BucketSource]
+                           (Prelude.catMaybes
+                              [(JSON..=) "InputCompressionType" Prelude.<$> inputCompressionType,
+                               (JSON..=) "InputFormatOptions" Prelude.<$> inputFormatOptions]))}
+instance JSON.ToJSON ImportSourceSpecificationProperty where
+  toJSON ImportSourceSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["InputFormat" JSON..= inputFormat,
+               "S3BucketSource" JSON..= s3BucketSource]
+              (Prelude.catMaybes
+                 [(JSON..=) "InputCompressionType" Prelude.<$> inputCompressionType,
+                  (JSON..=) "InputFormatOptions" Prelude.<$> inputFormatOptions])))
+instance Property "InputCompressionType" ImportSourceSpecificationProperty where
+  type PropertyType "InputCompressionType" ImportSourceSpecificationProperty = Value Prelude.Text
+  set newValue ImportSourceSpecificationProperty {..}
+    = ImportSourceSpecificationProperty
+        {inputCompressionType = Prelude.pure newValue, ..}
+instance Property "InputFormat" ImportSourceSpecificationProperty where
+  type PropertyType "InputFormat" ImportSourceSpecificationProperty = Value Prelude.Text
+  set newValue ImportSourceSpecificationProperty {..}
+    = ImportSourceSpecificationProperty {inputFormat = newValue, ..}
+instance Property "InputFormatOptions" ImportSourceSpecificationProperty where
+  type PropertyType "InputFormatOptions" ImportSourceSpecificationProperty = InputFormatOptionsProperty
+  set newValue ImportSourceSpecificationProperty {..}
+    = ImportSourceSpecificationProperty
+        {inputFormatOptions = Prelude.pure newValue, ..}
+instance Property "S3BucketSource" ImportSourceSpecificationProperty where
+  type PropertyType "S3BucketSource" ImportSourceSpecificationProperty = S3BucketSourceProperty
+  set newValue ImportSourceSpecificationProperty {..}
+    = ImportSourceSpecificationProperty {s3BucketSource = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/ImportSourceSpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/ImportSourceSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/ImportSourceSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.ImportSourceSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ImportSourceSpecificationProperty :: Prelude.Type
+instance ToResourceProperties ImportSourceSpecificationProperty
+instance Prelude.Eq ImportSourceSpecificationProperty
+instance Prelude.Show ImportSourceSpecificationProperty
+instance JSON.ToJSON ImportSourceSpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/InputFormatOptionsProperty.hs b/gen/Stratosphere/DynamoDB/Table/InputFormatOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/InputFormatOptionsProperty.hs
@@ -0,0 +1,35 @@
+module Stratosphere.DynamoDB.Table.InputFormatOptionsProperty (
+        module Exports, InputFormatOptionsProperty(..),
+        mkInputFormatOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.CsvProperty as Exports
+import Stratosphere.ResourceProperties
+data InputFormatOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-inputformatoptions.html>
+    InputFormatOptionsProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-inputformatoptions.html#cfn-dynamodb-table-inputformatoptions-csv>
+                                csv :: (Prelude.Maybe CsvProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInputFormatOptionsProperty :: InputFormatOptionsProperty
+mkInputFormatOptionsProperty
+  = InputFormatOptionsProperty
+      {haddock_workaround_ = (), csv = Prelude.Nothing}
+instance ToResourceProperties InputFormatOptionsProperty where
+  toResourceProperties InputFormatOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.InputFormatOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Csv" Prelude.<$> csv])}
+instance JSON.ToJSON InputFormatOptionsProperty where
+  toJSON InputFormatOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Csv" Prelude.<$> csv]))
+instance Property "Csv" InputFormatOptionsProperty where
+  type PropertyType "Csv" InputFormatOptionsProperty = CsvProperty
+  set newValue InputFormatOptionsProperty {..}
+    = InputFormatOptionsProperty {csv = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/InputFormatOptionsProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/InputFormatOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/InputFormatOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.InputFormatOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InputFormatOptionsProperty :: Prelude.Type
+instance ToResourceProperties InputFormatOptionsProperty
+instance Prelude.Eq InputFormatOptionsProperty
+instance Prelude.Show InputFormatOptionsProperty
+instance JSON.ToJSON InputFormatOptionsProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/KeySchemaProperty.hs b/gen/Stratosphere/DynamoDB/Table/KeySchemaProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/KeySchemaProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.DynamoDB.Table.KeySchemaProperty (
+        KeySchemaProperty(..), mkKeySchemaProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KeySchemaProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-keyschema.html>
+    KeySchemaProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-keyschema.html#cfn-dynamodb-table-keyschema-attributename>
+                       attributeName :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-keyschema.html#cfn-dynamodb-table-keyschema-keytype>
+                       keyType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKeySchemaProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> KeySchemaProperty
+mkKeySchemaProperty attributeName keyType
+  = KeySchemaProperty
+      {haddock_workaround_ = (), attributeName = attributeName,
+       keyType = keyType}
+instance ToResourceProperties KeySchemaProperty where
+  toResourceProperties KeySchemaProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.KeySchema",
+         supportsTags = Prelude.False,
+         properties = ["AttributeName" JSON..= attributeName,
+                       "KeyType" JSON..= keyType]}
+instance JSON.ToJSON KeySchemaProperty where
+  toJSON KeySchemaProperty {..}
+    = JSON.object
+        ["AttributeName" JSON..= attributeName, "KeyType" JSON..= keyType]
+instance Property "AttributeName" KeySchemaProperty where
+  type PropertyType "AttributeName" KeySchemaProperty = Value Prelude.Text
+  set newValue KeySchemaProperty {..}
+    = KeySchemaProperty {attributeName = newValue, ..}
+instance Property "KeyType" KeySchemaProperty where
+  type PropertyType "KeyType" KeySchemaProperty = Value Prelude.Text
+  set newValue KeySchemaProperty {..}
+    = KeySchemaProperty {keyType = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/KeySchemaProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/KeySchemaProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/KeySchemaProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.KeySchemaProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data KeySchemaProperty :: Prelude.Type
+instance ToResourceProperties KeySchemaProperty
+instance Prelude.Eq KeySchemaProperty
+instance Prelude.Show KeySchemaProperty
+instance JSON.ToJSON KeySchemaProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/KinesisStreamSpecificationProperty.hs b/gen/Stratosphere/DynamoDB/Table/KinesisStreamSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/KinesisStreamSpecificationProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.DynamoDB.Table.KinesisStreamSpecificationProperty (
+        KinesisStreamSpecificationProperty(..),
+        mkKinesisStreamSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KinesisStreamSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-kinesisstreamspecification.html>
+    KinesisStreamSpecificationProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-kinesisstreamspecification.html#cfn-dynamodb-table-kinesisstreamspecification-approximatecreationdatetimeprecision>
+                                        approximateCreationDateTimePrecision :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-kinesisstreamspecification.html#cfn-dynamodb-table-kinesisstreamspecification-streamarn>
+                                        streamArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKinesisStreamSpecificationProperty ::
+  Value Prelude.Text -> KinesisStreamSpecificationProperty
+mkKinesisStreamSpecificationProperty streamArn
+  = KinesisStreamSpecificationProperty
+      {haddock_workaround_ = (), streamArn = streamArn,
+       approximateCreationDateTimePrecision = Prelude.Nothing}
+instance ToResourceProperties KinesisStreamSpecificationProperty where
+  toResourceProperties KinesisStreamSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.KinesisStreamSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["StreamArn" JSON..= streamArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ApproximateCreationDateTimePrecision"
+                                 Prelude.<$> approximateCreationDateTimePrecision]))}
+instance JSON.ToJSON KinesisStreamSpecificationProperty where
+  toJSON KinesisStreamSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["StreamArn" JSON..= streamArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "ApproximateCreationDateTimePrecision"
+                    Prelude.<$> approximateCreationDateTimePrecision])))
+instance Property "ApproximateCreationDateTimePrecision" KinesisStreamSpecificationProperty where
+  type PropertyType "ApproximateCreationDateTimePrecision" KinesisStreamSpecificationProperty = Value Prelude.Text
+  set newValue KinesisStreamSpecificationProperty {..}
+    = KinesisStreamSpecificationProperty
+        {approximateCreationDateTimePrecision = Prelude.pure newValue, ..}
+instance Property "StreamArn" KinesisStreamSpecificationProperty where
+  type PropertyType "StreamArn" KinesisStreamSpecificationProperty = Value Prelude.Text
+  set newValue KinesisStreamSpecificationProperty {..}
+    = KinesisStreamSpecificationProperty {streamArn = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/KinesisStreamSpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/KinesisStreamSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/KinesisStreamSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.KinesisStreamSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data KinesisStreamSpecificationProperty :: Prelude.Type
+instance ToResourceProperties KinesisStreamSpecificationProperty
+instance Prelude.Eq KinesisStreamSpecificationProperty
+instance Prelude.Show KinesisStreamSpecificationProperty
+instance JSON.ToJSON KinesisStreamSpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/LocalSecondaryIndexProperty.hs b/gen/Stratosphere/DynamoDB/Table/LocalSecondaryIndexProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/LocalSecondaryIndexProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.DynamoDB.Table.LocalSecondaryIndexProperty (
+        module Exports, LocalSecondaryIndexProperty(..),
+        mkLocalSecondaryIndexProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.KeySchemaProperty as Exports
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.ProjectionProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LocalSecondaryIndexProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-localsecondaryindex.html>
+    LocalSecondaryIndexProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-localsecondaryindex.html#cfn-dynamodb-table-localsecondaryindex-indexname>
+                                 indexName :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-localsecondaryindex.html#cfn-dynamodb-table-localsecondaryindex-keyschema>
+                                 keySchema :: [KeySchemaProperty],
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-localsecondaryindex.html#cfn-dynamodb-table-localsecondaryindex-projection>
+                                 projection :: ProjectionProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocalSecondaryIndexProperty ::
+  Value Prelude.Text
+  -> [KeySchemaProperty]
+     -> ProjectionProperty -> LocalSecondaryIndexProperty
+mkLocalSecondaryIndexProperty indexName keySchema projection
+  = LocalSecondaryIndexProperty
+      {haddock_workaround_ = (), indexName = indexName,
+       keySchema = keySchema, projection = projection}
+instance ToResourceProperties LocalSecondaryIndexProperty where
+  toResourceProperties LocalSecondaryIndexProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.LocalSecondaryIndex",
+         supportsTags = Prelude.False,
+         properties = ["IndexName" JSON..= indexName,
+                       "KeySchema" JSON..= keySchema, "Projection" JSON..= projection]}
+instance JSON.ToJSON LocalSecondaryIndexProperty where
+  toJSON LocalSecondaryIndexProperty {..}
+    = JSON.object
+        ["IndexName" JSON..= indexName, "KeySchema" JSON..= keySchema,
+         "Projection" JSON..= projection]
+instance Property "IndexName" LocalSecondaryIndexProperty where
+  type PropertyType "IndexName" LocalSecondaryIndexProperty = Value Prelude.Text
+  set newValue LocalSecondaryIndexProperty {..}
+    = LocalSecondaryIndexProperty {indexName = newValue, ..}
+instance Property "KeySchema" LocalSecondaryIndexProperty where
+  type PropertyType "KeySchema" LocalSecondaryIndexProperty = [KeySchemaProperty]
+  set newValue LocalSecondaryIndexProperty {..}
+    = LocalSecondaryIndexProperty {keySchema = newValue, ..}
+instance Property "Projection" LocalSecondaryIndexProperty where
+  type PropertyType "Projection" LocalSecondaryIndexProperty = ProjectionProperty
+  set newValue LocalSecondaryIndexProperty {..}
+    = LocalSecondaryIndexProperty {projection = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/LocalSecondaryIndexProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/LocalSecondaryIndexProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/LocalSecondaryIndexProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.LocalSecondaryIndexProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LocalSecondaryIndexProperty :: Prelude.Type
+instance ToResourceProperties LocalSecondaryIndexProperty
+instance Prelude.Eq LocalSecondaryIndexProperty
+instance Prelude.Show LocalSecondaryIndexProperty
+instance JSON.ToJSON LocalSecondaryIndexProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/OnDemandThroughputProperty.hs b/gen/Stratosphere/DynamoDB/Table/OnDemandThroughputProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/OnDemandThroughputProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.DynamoDB.Table.OnDemandThroughputProperty (
+        OnDemandThroughputProperty(..), mkOnDemandThroughputProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OnDemandThroughputProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-ondemandthroughput.html>
+    OnDemandThroughputProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-ondemandthroughput.html#cfn-dynamodb-table-ondemandthroughput-maxreadrequestunits>
+                                maxReadRequestUnits :: (Prelude.Maybe (Value Prelude.Integer)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-ondemandthroughput.html#cfn-dynamodb-table-ondemandthroughput-maxwriterequestunits>
+                                maxWriteRequestUnits :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOnDemandThroughputProperty :: OnDemandThroughputProperty
+mkOnDemandThroughputProperty
+  = OnDemandThroughputProperty
+      {haddock_workaround_ = (), maxReadRequestUnits = Prelude.Nothing,
+       maxWriteRequestUnits = Prelude.Nothing}
+instance ToResourceProperties OnDemandThroughputProperty where
+  toResourceProperties OnDemandThroughputProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.OnDemandThroughput",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "MaxReadRequestUnits" Prelude.<$> maxReadRequestUnits,
+                            (JSON..=) "MaxWriteRequestUnits"
+                              Prelude.<$> maxWriteRequestUnits])}
+instance JSON.ToJSON OnDemandThroughputProperty where
+  toJSON OnDemandThroughputProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "MaxReadRequestUnits" Prelude.<$> maxReadRequestUnits,
+               (JSON..=) "MaxWriteRequestUnits"
+                 Prelude.<$> maxWriteRequestUnits]))
+instance Property "MaxReadRequestUnits" OnDemandThroughputProperty where
+  type PropertyType "MaxReadRequestUnits" OnDemandThroughputProperty = Value Prelude.Integer
+  set newValue OnDemandThroughputProperty {..}
+    = OnDemandThroughputProperty
+        {maxReadRequestUnits = Prelude.pure newValue, ..}
+instance Property "MaxWriteRequestUnits" OnDemandThroughputProperty where
+  type PropertyType "MaxWriteRequestUnits" OnDemandThroughputProperty = Value Prelude.Integer
+  set newValue OnDemandThroughputProperty {..}
+    = OnDemandThroughputProperty
+        {maxWriteRequestUnits = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/OnDemandThroughputProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/OnDemandThroughputProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/OnDemandThroughputProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.OnDemandThroughputProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OnDemandThroughputProperty :: Prelude.Type
+instance ToResourceProperties OnDemandThroughputProperty
+instance Prelude.Eq OnDemandThroughputProperty
+instance Prelude.Show OnDemandThroughputProperty
+instance JSON.ToJSON OnDemandThroughputProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/PointInTimeRecoverySpecificationProperty.hs b/gen/Stratosphere/DynamoDB/Table/PointInTimeRecoverySpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/PointInTimeRecoverySpecificationProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.DynamoDB.Table.PointInTimeRecoverySpecificationProperty (
+        PointInTimeRecoverySpecificationProperty(..),
+        mkPointInTimeRecoverySpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PointInTimeRecoverySpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-pointintimerecoveryspecification.html>
+    PointInTimeRecoverySpecificationProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-pointintimerecoveryspecification.html#cfn-dynamodb-table-pointintimerecoveryspecification-pointintimerecoveryenabled>
+                                              pointInTimeRecoveryEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-pointintimerecoveryspecification.html#cfn-dynamodb-table-pointintimerecoveryspecification-recoveryperiodindays>
+                                              recoveryPeriodInDays :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPointInTimeRecoverySpecificationProperty ::
+  PointInTimeRecoverySpecificationProperty
+mkPointInTimeRecoverySpecificationProperty
+  = PointInTimeRecoverySpecificationProperty
+      {haddock_workaround_ = (),
+       pointInTimeRecoveryEnabled = Prelude.Nothing,
+       recoveryPeriodInDays = Prelude.Nothing}
+instance ToResourceProperties PointInTimeRecoverySpecificationProperty where
+  toResourceProperties PointInTimeRecoverySpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.PointInTimeRecoverySpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "PointInTimeRecoveryEnabled"
+                              Prelude.<$> pointInTimeRecoveryEnabled,
+                            (JSON..=) "RecoveryPeriodInDays"
+                              Prelude.<$> recoveryPeriodInDays])}
+instance JSON.ToJSON PointInTimeRecoverySpecificationProperty where
+  toJSON PointInTimeRecoverySpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "PointInTimeRecoveryEnabled"
+                 Prelude.<$> pointInTimeRecoveryEnabled,
+               (JSON..=) "RecoveryPeriodInDays"
+                 Prelude.<$> recoveryPeriodInDays]))
+instance Property "PointInTimeRecoveryEnabled" PointInTimeRecoverySpecificationProperty where
+  type PropertyType "PointInTimeRecoveryEnabled" PointInTimeRecoverySpecificationProperty = Value Prelude.Bool
+  set newValue PointInTimeRecoverySpecificationProperty {..}
+    = PointInTimeRecoverySpecificationProperty
+        {pointInTimeRecoveryEnabled = Prelude.pure newValue, ..}
+instance Property "RecoveryPeriodInDays" PointInTimeRecoverySpecificationProperty where
+  type PropertyType "RecoveryPeriodInDays" PointInTimeRecoverySpecificationProperty = Value Prelude.Integer
+  set newValue PointInTimeRecoverySpecificationProperty {..}
+    = PointInTimeRecoverySpecificationProperty
+        {recoveryPeriodInDays = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/PointInTimeRecoverySpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/PointInTimeRecoverySpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/PointInTimeRecoverySpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.PointInTimeRecoverySpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PointInTimeRecoverySpecificationProperty :: Prelude.Type
+instance ToResourceProperties PointInTimeRecoverySpecificationProperty
+instance Prelude.Eq PointInTimeRecoverySpecificationProperty
+instance Prelude.Show PointInTimeRecoverySpecificationProperty
+instance JSON.ToJSON PointInTimeRecoverySpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/ProjectionProperty.hs b/gen/Stratosphere/DynamoDB/Table/ProjectionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/ProjectionProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.DynamoDB.Table.ProjectionProperty (
+        ProjectionProperty(..), mkProjectionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ProjectionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-projection.html>
+    ProjectionProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-projection.html#cfn-dynamodb-table-projection-nonkeyattributes>
+                        nonKeyAttributes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-projection.html#cfn-dynamodb-table-projection-projectiontype>
+                        projectionType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkProjectionProperty :: ProjectionProperty
+mkProjectionProperty
+  = ProjectionProperty
+      {haddock_workaround_ = (), nonKeyAttributes = Prelude.Nothing,
+       projectionType = Prelude.Nothing}
+instance ToResourceProperties ProjectionProperty where
+  toResourceProperties ProjectionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.Projection",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "NonKeyAttributes" Prelude.<$> nonKeyAttributes,
+                            (JSON..=) "ProjectionType" Prelude.<$> projectionType])}
+instance JSON.ToJSON ProjectionProperty where
+  toJSON ProjectionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "NonKeyAttributes" Prelude.<$> nonKeyAttributes,
+               (JSON..=) "ProjectionType" Prelude.<$> projectionType]))
+instance Property "NonKeyAttributes" ProjectionProperty where
+  type PropertyType "NonKeyAttributes" ProjectionProperty = ValueList Prelude.Text
+  set newValue ProjectionProperty {..}
+    = ProjectionProperty {nonKeyAttributes = Prelude.pure newValue, ..}
+instance Property "ProjectionType" ProjectionProperty where
+  type PropertyType "ProjectionType" ProjectionProperty = Value Prelude.Text
+  set newValue ProjectionProperty {..}
+    = ProjectionProperty {projectionType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/ProjectionProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/ProjectionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/ProjectionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.ProjectionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ProjectionProperty :: Prelude.Type
+instance ToResourceProperties ProjectionProperty
+instance Prelude.Eq ProjectionProperty
+instance Prelude.Show ProjectionProperty
+instance JSON.ToJSON ProjectionProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/ProvisionedThroughputProperty.hs b/gen/Stratosphere/DynamoDB/Table/ProvisionedThroughputProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/ProvisionedThroughputProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.DynamoDB.Table.ProvisionedThroughputProperty (
+        ProvisionedThroughputProperty(..), mkProvisionedThroughputProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ProvisionedThroughputProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-provisionedthroughput.html>
+    ProvisionedThroughputProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-provisionedthroughput.html#cfn-dynamodb-table-provisionedthroughput-readcapacityunits>
+                                   readCapacityUnits :: (Value Prelude.Integer),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-provisionedthroughput.html#cfn-dynamodb-table-provisionedthroughput-writecapacityunits>
+                                   writeCapacityUnits :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkProvisionedThroughputProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Integer -> ProvisionedThroughputProperty
+mkProvisionedThroughputProperty
+  readCapacityUnits
+  writeCapacityUnits
+  = ProvisionedThroughputProperty
+      {haddock_workaround_ = (), readCapacityUnits = readCapacityUnits,
+       writeCapacityUnits = writeCapacityUnits}
+instance ToResourceProperties ProvisionedThroughputProperty where
+  toResourceProperties ProvisionedThroughputProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.ProvisionedThroughput",
+         supportsTags = Prelude.False,
+         properties = ["ReadCapacityUnits" JSON..= readCapacityUnits,
+                       "WriteCapacityUnits" JSON..= writeCapacityUnits]}
+instance JSON.ToJSON ProvisionedThroughputProperty where
+  toJSON ProvisionedThroughputProperty {..}
+    = JSON.object
+        ["ReadCapacityUnits" JSON..= readCapacityUnits,
+         "WriteCapacityUnits" JSON..= writeCapacityUnits]
+instance Property "ReadCapacityUnits" ProvisionedThroughputProperty where
+  type PropertyType "ReadCapacityUnits" ProvisionedThroughputProperty = Value Prelude.Integer
+  set newValue ProvisionedThroughputProperty {..}
+    = ProvisionedThroughputProperty {readCapacityUnits = newValue, ..}
+instance Property "WriteCapacityUnits" ProvisionedThroughputProperty where
+  type PropertyType "WriteCapacityUnits" ProvisionedThroughputProperty = Value Prelude.Integer
+  set newValue ProvisionedThroughputProperty {..}
+    = ProvisionedThroughputProperty {writeCapacityUnits = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/ProvisionedThroughputProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/ProvisionedThroughputProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/ProvisionedThroughputProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.ProvisionedThroughputProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ProvisionedThroughputProperty :: Prelude.Type
+instance ToResourceProperties ProvisionedThroughputProperty
+instance Prelude.Eq ProvisionedThroughputProperty
+instance Prelude.Show ProvisionedThroughputProperty
+instance JSON.ToJSON ProvisionedThroughputProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/ResourcePolicyProperty.hs b/gen/Stratosphere/DynamoDB/Table/ResourcePolicyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/ResourcePolicyProperty.hs
@@ -0,0 +1,30 @@
+module Stratosphere.DynamoDB.Table.ResourcePolicyProperty (
+        ResourcePolicyProperty(..), mkResourcePolicyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+data ResourcePolicyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-resourcepolicy.html>
+    ResourcePolicyProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-resourcepolicy.html#cfn-dynamodb-table-resourcepolicy-policydocument>
+                            policyDocument :: JSON.Object}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResourcePolicyProperty :: JSON.Object -> ResourcePolicyProperty
+mkResourcePolicyProperty policyDocument
+  = ResourcePolicyProperty
+      {haddock_workaround_ = (), policyDocument = policyDocument}
+instance ToResourceProperties ResourcePolicyProperty where
+  toResourceProperties ResourcePolicyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.ResourcePolicy",
+         supportsTags = Prelude.False,
+         properties = ["PolicyDocument" JSON..= policyDocument]}
+instance JSON.ToJSON ResourcePolicyProperty where
+  toJSON ResourcePolicyProperty {..}
+    = JSON.object ["PolicyDocument" JSON..= policyDocument]
+instance Property "PolicyDocument" ResourcePolicyProperty where
+  type PropertyType "PolicyDocument" ResourcePolicyProperty = JSON.Object
+  set newValue ResourcePolicyProperty {..}
+    = ResourcePolicyProperty {policyDocument = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/ResourcePolicyProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/ResourcePolicyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/ResourcePolicyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.ResourcePolicyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ResourcePolicyProperty :: Prelude.Type
+instance ToResourceProperties ResourcePolicyProperty
+instance Prelude.Eq ResourcePolicyProperty
+instance Prelude.Show ResourcePolicyProperty
+instance JSON.ToJSON ResourcePolicyProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/S3BucketSourceProperty.hs b/gen/Stratosphere/DynamoDB/Table/S3BucketSourceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/S3BucketSourceProperty.hs
@@ -0,0 +1,57 @@
+module Stratosphere.DynamoDB.Table.S3BucketSourceProperty (
+        S3BucketSourceProperty(..), mkS3BucketSourceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data S3BucketSourceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-s3bucketsource.html>
+    S3BucketSourceProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-s3bucketsource.html#cfn-dynamodb-table-s3bucketsource-s3bucket>
+                            s3Bucket :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-s3bucketsource.html#cfn-dynamodb-table-s3bucketsource-s3bucketowner>
+                            s3BucketOwner :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-s3bucketsource.html#cfn-dynamodb-table-s3bucketsource-s3keyprefix>
+                            s3KeyPrefix :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkS3BucketSourceProperty ::
+  Value Prelude.Text -> S3BucketSourceProperty
+mkS3BucketSourceProperty s3Bucket
+  = S3BucketSourceProperty
+      {haddock_workaround_ = (), s3Bucket = s3Bucket,
+       s3BucketOwner = Prelude.Nothing, s3KeyPrefix = Prelude.Nothing}
+instance ToResourceProperties S3BucketSourceProperty where
+  toResourceProperties S3BucketSourceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.S3BucketSource",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["S3Bucket" JSON..= s3Bucket]
+                           (Prelude.catMaybes
+                              [(JSON..=) "S3BucketOwner" Prelude.<$> s3BucketOwner,
+                               (JSON..=) "S3KeyPrefix" Prelude.<$> s3KeyPrefix]))}
+instance JSON.ToJSON S3BucketSourceProperty where
+  toJSON S3BucketSourceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["S3Bucket" JSON..= s3Bucket]
+              (Prelude.catMaybes
+                 [(JSON..=) "S3BucketOwner" Prelude.<$> s3BucketOwner,
+                  (JSON..=) "S3KeyPrefix" Prelude.<$> s3KeyPrefix])))
+instance Property "S3Bucket" S3BucketSourceProperty where
+  type PropertyType "S3Bucket" S3BucketSourceProperty = Value Prelude.Text
+  set newValue S3BucketSourceProperty {..}
+    = S3BucketSourceProperty {s3Bucket = newValue, ..}
+instance Property "S3BucketOwner" S3BucketSourceProperty where
+  type PropertyType "S3BucketOwner" S3BucketSourceProperty = Value Prelude.Text
+  set newValue S3BucketSourceProperty {..}
+    = S3BucketSourceProperty
+        {s3BucketOwner = Prelude.pure newValue, ..}
+instance Property "S3KeyPrefix" S3BucketSourceProperty where
+  type PropertyType "S3KeyPrefix" S3BucketSourceProperty = Value Prelude.Text
+  set newValue S3BucketSourceProperty {..}
+    = S3BucketSourceProperty {s3KeyPrefix = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/S3BucketSourceProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/S3BucketSourceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/S3BucketSourceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.S3BucketSourceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data S3BucketSourceProperty :: Prelude.Type
+instance ToResourceProperties S3BucketSourceProperty
+instance Prelude.Eq S3BucketSourceProperty
+instance Prelude.Show S3BucketSourceProperty
+instance JSON.ToJSON S3BucketSourceProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/SSESpecificationProperty.hs b/gen/Stratosphere/DynamoDB/Table/SSESpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/SSESpecificationProperty.hs
@@ -0,0 +1,57 @@
+module Stratosphere.DynamoDB.Table.SSESpecificationProperty (
+        SSESpecificationProperty(..), mkSSESpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SSESpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-ssespecification.html>
+    SSESpecificationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-ssespecification.html#cfn-dynamodb-table-ssespecification-kmsmasterkeyid>
+                              kMSMasterKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-ssespecification.html#cfn-dynamodb-table-ssespecification-sseenabled>
+                              sSEEnabled :: (Value Prelude.Bool),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-ssespecification.html#cfn-dynamodb-table-ssespecification-ssetype>
+                              sSEType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSSESpecificationProperty ::
+  Value Prelude.Bool -> SSESpecificationProperty
+mkSSESpecificationProperty sSEEnabled
+  = SSESpecificationProperty
+      {haddock_workaround_ = (), sSEEnabled = sSEEnabled,
+       kMSMasterKeyId = Prelude.Nothing, sSEType = Prelude.Nothing}
+instance ToResourceProperties SSESpecificationProperty where
+  toResourceProperties SSESpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.SSESpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SSEEnabled" JSON..= sSEEnabled]
+                           (Prelude.catMaybes
+                              [(JSON..=) "KMSMasterKeyId" Prelude.<$> kMSMasterKeyId,
+                               (JSON..=) "SSEType" Prelude.<$> sSEType]))}
+instance JSON.ToJSON SSESpecificationProperty where
+  toJSON SSESpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SSEEnabled" JSON..= sSEEnabled]
+              (Prelude.catMaybes
+                 [(JSON..=) "KMSMasterKeyId" Prelude.<$> kMSMasterKeyId,
+                  (JSON..=) "SSEType" Prelude.<$> sSEType])))
+instance Property "KMSMasterKeyId" SSESpecificationProperty where
+  type PropertyType "KMSMasterKeyId" SSESpecificationProperty = Value Prelude.Text
+  set newValue SSESpecificationProperty {..}
+    = SSESpecificationProperty
+        {kMSMasterKeyId = Prelude.pure newValue, ..}
+instance Property "SSEEnabled" SSESpecificationProperty where
+  type PropertyType "SSEEnabled" SSESpecificationProperty = Value Prelude.Bool
+  set newValue SSESpecificationProperty {..}
+    = SSESpecificationProperty {sSEEnabled = newValue, ..}
+instance Property "SSEType" SSESpecificationProperty where
+  type PropertyType "SSEType" SSESpecificationProperty = Value Prelude.Text
+  set newValue SSESpecificationProperty {..}
+    = SSESpecificationProperty {sSEType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/SSESpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/SSESpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/SSESpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.SSESpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SSESpecificationProperty :: Prelude.Type
+instance ToResourceProperties SSESpecificationProperty
+instance Prelude.Eq SSESpecificationProperty
+instance Prelude.Show SSESpecificationProperty
+instance JSON.ToJSON SSESpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/StreamSpecificationProperty.hs b/gen/Stratosphere/DynamoDB/Table/StreamSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/StreamSpecificationProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.DynamoDB.Table.StreamSpecificationProperty (
+        module Exports, StreamSpecificationProperty(..),
+        mkStreamSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DynamoDB.Table.ResourcePolicyProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data StreamSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-streamspecification.html>
+    StreamSpecificationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-streamspecification.html#cfn-dynamodb-table-streamspecification-resourcepolicy>
+                                 resourcePolicy :: (Prelude.Maybe ResourcePolicyProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-streamspecification.html#cfn-dynamodb-table-streamspecification-streamviewtype>
+                                 streamViewType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStreamSpecificationProperty ::
+  Value Prelude.Text -> StreamSpecificationProperty
+mkStreamSpecificationProperty streamViewType
+  = StreamSpecificationProperty
+      {haddock_workaround_ = (), streamViewType = streamViewType,
+       resourcePolicy = Prelude.Nothing}
+instance ToResourceProperties StreamSpecificationProperty where
+  toResourceProperties StreamSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.StreamSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["StreamViewType" JSON..= streamViewType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ResourcePolicy" Prelude.<$> resourcePolicy]))}
+instance JSON.ToJSON StreamSpecificationProperty where
+  toJSON StreamSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["StreamViewType" JSON..= streamViewType]
+              (Prelude.catMaybes
+                 [(JSON..=) "ResourcePolicy" Prelude.<$> resourcePolicy])))
+instance Property "ResourcePolicy" StreamSpecificationProperty where
+  type PropertyType "ResourcePolicy" StreamSpecificationProperty = ResourcePolicyProperty
+  set newValue StreamSpecificationProperty {..}
+    = StreamSpecificationProperty
+        {resourcePolicy = Prelude.pure newValue, ..}
+instance Property "StreamViewType" StreamSpecificationProperty where
+  type PropertyType "StreamViewType" StreamSpecificationProperty = Value Prelude.Text
+  set newValue StreamSpecificationProperty {..}
+    = StreamSpecificationProperty {streamViewType = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/StreamSpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/StreamSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/StreamSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.StreamSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data StreamSpecificationProperty :: Prelude.Type
+instance ToResourceProperties StreamSpecificationProperty
+instance Prelude.Eq StreamSpecificationProperty
+instance Prelude.Show StreamSpecificationProperty
+instance JSON.ToJSON StreamSpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/TimeToLiveSpecificationProperty.hs b/gen/Stratosphere/DynamoDB/Table/TimeToLiveSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/TimeToLiveSpecificationProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.DynamoDB.Table.TimeToLiveSpecificationProperty (
+        TimeToLiveSpecificationProperty(..),
+        mkTimeToLiveSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TimeToLiveSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-timetolivespecification.html>
+    TimeToLiveSpecificationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-timetolivespecification.html#cfn-dynamodb-table-timetolivespecification-attributename>
+                                     attributeName :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-timetolivespecification.html#cfn-dynamodb-table-timetolivespecification-enabled>
+                                     enabled :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTimeToLiveSpecificationProperty ::
+  Value Prelude.Bool -> TimeToLiveSpecificationProperty
+mkTimeToLiveSpecificationProperty enabled
+  = TimeToLiveSpecificationProperty
+      {haddock_workaround_ = (), enabled = enabled,
+       attributeName = Prelude.Nothing}
+instance ToResourceProperties TimeToLiveSpecificationProperty where
+  toResourceProperties TimeToLiveSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.TimeToLiveSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Enabled" JSON..= enabled]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AttributeName" Prelude.<$> attributeName]))}
+instance JSON.ToJSON TimeToLiveSpecificationProperty where
+  toJSON TimeToLiveSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Enabled" JSON..= enabled]
+              (Prelude.catMaybes
+                 [(JSON..=) "AttributeName" Prelude.<$> attributeName])))
+instance Property "AttributeName" TimeToLiveSpecificationProperty where
+  type PropertyType "AttributeName" TimeToLiveSpecificationProperty = Value Prelude.Text
+  set newValue TimeToLiveSpecificationProperty {..}
+    = TimeToLiveSpecificationProperty
+        {attributeName = Prelude.pure newValue, ..}
+instance Property "Enabled" TimeToLiveSpecificationProperty where
+  type PropertyType "Enabled" TimeToLiveSpecificationProperty = Value Prelude.Bool
+  set newValue TimeToLiveSpecificationProperty {..}
+    = TimeToLiveSpecificationProperty {enabled = newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/TimeToLiveSpecificationProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/TimeToLiveSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/TimeToLiveSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.TimeToLiveSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TimeToLiveSpecificationProperty :: Prelude.Type
+instance ToResourceProperties TimeToLiveSpecificationProperty
+instance Prelude.Eq TimeToLiveSpecificationProperty
+instance Prelude.Show TimeToLiveSpecificationProperty
+instance JSON.ToJSON TimeToLiveSpecificationProperty
diff --git a/gen/Stratosphere/DynamoDB/Table/WarmThroughputProperty.hs b/gen/Stratosphere/DynamoDB/Table/WarmThroughputProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/WarmThroughputProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.DynamoDB.Table.WarmThroughputProperty (
+        WarmThroughputProperty(..), mkWarmThroughputProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data WarmThroughputProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-warmthroughput.html>
+    WarmThroughputProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-warmthroughput.html#cfn-dynamodb-table-warmthroughput-readunitspersecond>
+                            readUnitsPerSecond :: (Prelude.Maybe (Value Prelude.Integer)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-warmthroughput.html#cfn-dynamodb-table-warmthroughput-writeunitspersecond>
+                            writeUnitsPerSecond :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkWarmThroughputProperty :: WarmThroughputProperty
+mkWarmThroughputProperty
+  = WarmThroughputProperty
+      {haddock_workaround_ = (), readUnitsPerSecond = Prelude.Nothing,
+       writeUnitsPerSecond = Prelude.Nothing}
+instance ToResourceProperties WarmThroughputProperty where
+  toResourceProperties WarmThroughputProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DynamoDB::Table.WarmThroughput",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ReadUnitsPerSecond" Prelude.<$> readUnitsPerSecond,
+                            (JSON..=) "WriteUnitsPerSecond" Prelude.<$> writeUnitsPerSecond])}
+instance JSON.ToJSON WarmThroughputProperty where
+  toJSON WarmThroughputProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ReadUnitsPerSecond" Prelude.<$> readUnitsPerSecond,
+               (JSON..=) "WriteUnitsPerSecond" Prelude.<$> writeUnitsPerSecond]))
+instance Property "ReadUnitsPerSecond" WarmThroughputProperty where
+  type PropertyType "ReadUnitsPerSecond" WarmThroughputProperty = Value Prelude.Integer
+  set newValue WarmThroughputProperty {..}
+    = WarmThroughputProperty
+        {readUnitsPerSecond = Prelude.pure newValue, ..}
+instance Property "WriteUnitsPerSecond" WarmThroughputProperty where
+  type PropertyType "WriteUnitsPerSecond" WarmThroughputProperty = Value Prelude.Integer
+  set newValue WarmThroughputProperty {..}
+    = WarmThroughputProperty
+        {writeUnitsPerSecond = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DynamoDB/Table/WarmThroughputProperty.hs-boot b/gen/Stratosphere/DynamoDB/Table/WarmThroughputProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DynamoDB/Table/WarmThroughputProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DynamoDB.Table.WarmThroughputProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data WarmThroughputProperty :: Prelude.Type
+instance ToResourceProperties WarmThroughputProperty
+instance Prelude.Eq WarmThroughputProperty
+instance Prelude.Show WarmThroughputProperty
+instance JSON.ToJSON WarmThroughputProperty
diff --git a/stratosphere-dynamodb.cabal b/stratosphere-dynamodb.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-dynamodb.cabal
@@ -0,0 +1,117 @@
+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-dynamodb
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS DynamoDB.
+description:    Integration into stratosphere to generate resources and properties for AWS DynamoDB
+category:       AWS, Cloud, DynamoDB
+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.DynamoDB.GlobalTable
+      Stratosphere.DynamoDB.GlobalTable.AttributeDefinitionProperty
+      Stratosphere.DynamoDB.GlobalTable.CapacityAutoScalingSettingsProperty
+      Stratosphere.DynamoDB.GlobalTable.ContributorInsightsSpecificationProperty
+      Stratosphere.DynamoDB.GlobalTable.GlobalSecondaryIndexProperty
+      Stratosphere.DynamoDB.GlobalTable.GlobalTableWitnessProperty
+      Stratosphere.DynamoDB.GlobalTable.KeySchemaProperty
+      Stratosphere.DynamoDB.GlobalTable.KinesisStreamSpecificationProperty
+      Stratosphere.DynamoDB.GlobalTable.LocalSecondaryIndexProperty
+      Stratosphere.DynamoDB.GlobalTable.PointInTimeRecoverySpecificationProperty
+      Stratosphere.DynamoDB.GlobalTable.ProjectionProperty
+      Stratosphere.DynamoDB.GlobalTable.ReadOnDemandThroughputSettingsProperty
+      Stratosphere.DynamoDB.GlobalTable.ReadProvisionedThroughputSettingsProperty
+      Stratosphere.DynamoDB.GlobalTable.ReplicaGlobalSecondaryIndexSpecificationProperty
+      Stratosphere.DynamoDB.GlobalTable.ReplicaSpecificationProperty
+      Stratosphere.DynamoDB.GlobalTable.ReplicaSSESpecificationProperty
+      Stratosphere.DynamoDB.GlobalTable.ReplicaStreamSpecificationProperty
+      Stratosphere.DynamoDB.GlobalTable.ResourcePolicyProperty
+      Stratosphere.DynamoDB.GlobalTable.SSESpecificationProperty
+      Stratosphere.DynamoDB.GlobalTable.StreamSpecificationProperty
+      Stratosphere.DynamoDB.GlobalTable.TargetTrackingScalingPolicyConfigurationProperty
+      Stratosphere.DynamoDB.GlobalTable.TimeToLiveSpecificationProperty
+      Stratosphere.DynamoDB.GlobalTable.WarmThroughputProperty
+      Stratosphere.DynamoDB.GlobalTable.WriteOnDemandThroughputSettingsProperty
+      Stratosphere.DynamoDB.GlobalTable.WriteProvisionedThroughputSettingsProperty
+      Stratosphere.DynamoDB.Table
+      Stratosphere.DynamoDB.Table.AttributeDefinitionProperty
+      Stratosphere.DynamoDB.Table.ContributorInsightsSpecificationProperty
+      Stratosphere.DynamoDB.Table.CsvProperty
+      Stratosphere.DynamoDB.Table.GlobalSecondaryIndexProperty
+      Stratosphere.DynamoDB.Table.ImportSourceSpecificationProperty
+      Stratosphere.DynamoDB.Table.InputFormatOptionsProperty
+      Stratosphere.DynamoDB.Table.KeySchemaProperty
+      Stratosphere.DynamoDB.Table.KinesisStreamSpecificationProperty
+      Stratosphere.DynamoDB.Table.LocalSecondaryIndexProperty
+      Stratosphere.DynamoDB.Table.OnDemandThroughputProperty
+      Stratosphere.DynamoDB.Table.PointInTimeRecoverySpecificationProperty
+      Stratosphere.DynamoDB.Table.ProjectionProperty
+      Stratosphere.DynamoDB.Table.ProvisionedThroughputProperty
+      Stratosphere.DynamoDB.Table.ResourcePolicyProperty
+      Stratosphere.DynamoDB.Table.S3BucketSourceProperty
+      Stratosphere.DynamoDB.Table.SSESpecificationProperty
+      Stratosphere.DynamoDB.Table.StreamSpecificationProperty
+      Stratosphere.DynamoDB.Table.TimeToLiveSpecificationProperty
+      Stratosphere.DynamoDB.Table.WarmThroughputProperty
+  other-modules:
+      Paths_stratosphere_dynamodb
+  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
