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/Athena/CapacityReservation.hs b/gen/Stratosphere/Athena/CapacityReservation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/CapacityReservation.hs
@@ -0,0 +1,68 @@
+module Stratosphere.Athena.CapacityReservation (
+        module Exports, CapacityReservation(..), mkCapacityReservation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Athena.CapacityReservation.CapacityAssignmentConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data CapacityReservation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-capacityreservation.html>
+    CapacityReservation {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-capacityreservation.html#cfn-athena-capacityreservation-capacityassignmentconfiguration>
+                         capacityAssignmentConfiguration :: (Prelude.Maybe CapacityAssignmentConfigurationProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-capacityreservation.html#cfn-athena-capacityreservation-name>
+                         name :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-capacityreservation.html#cfn-athena-capacityreservation-tags>
+                         tags :: (Prelude.Maybe [Tag]),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-capacityreservation.html#cfn-athena-capacityreservation-targetdpus>
+                         targetDpus :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityReservation ::
+  Value Prelude.Text -> Value Prelude.Integer -> CapacityReservation
+mkCapacityReservation name targetDpus
+  = CapacityReservation
+      {haddock_workaround_ = (), name = name, targetDpus = targetDpus,
+       capacityAssignmentConfiguration = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties CapacityReservation where
+  toResourceProperties CapacityReservation {..}
+    = ResourceProperties
+        {awsType = "AWS::Athena::CapacityReservation",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Name" JSON..= name, "TargetDpus" JSON..= targetDpus]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CapacityAssignmentConfiguration"
+                                 Prelude.<$> capacityAssignmentConfiguration,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON CapacityReservation where
+  toJSON CapacityReservation {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Name" JSON..= name, "TargetDpus" JSON..= targetDpus]
+              (Prelude.catMaybes
+                 [(JSON..=) "CapacityAssignmentConfiguration"
+                    Prelude.<$> capacityAssignmentConfiguration,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "CapacityAssignmentConfiguration" CapacityReservation where
+  type PropertyType "CapacityAssignmentConfiguration" CapacityReservation = CapacityAssignmentConfigurationProperty
+  set newValue CapacityReservation {..}
+    = CapacityReservation
+        {capacityAssignmentConfiguration = Prelude.pure newValue, ..}
+instance Property "Name" CapacityReservation where
+  type PropertyType "Name" CapacityReservation = Value Prelude.Text
+  set newValue CapacityReservation {..}
+    = CapacityReservation {name = newValue, ..}
+instance Property "Tags" CapacityReservation where
+  type PropertyType "Tags" CapacityReservation = [Tag]
+  set newValue CapacityReservation {..}
+    = CapacityReservation {tags = Prelude.pure newValue, ..}
+instance Property "TargetDpus" CapacityReservation where
+  type PropertyType "TargetDpus" CapacityReservation = Value Prelude.Integer
+  set newValue CapacityReservation {..}
+    = CapacityReservation {targetDpus = newValue, ..}
diff --git a/gen/Stratosphere/Athena/CapacityReservation/CapacityAssignmentConfigurationProperty.hs b/gen/Stratosphere/Athena/CapacityReservation/CapacityAssignmentConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/CapacityReservation/CapacityAssignmentConfigurationProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.Athena.CapacityReservation.CapacityAssignmentConfigurationProperty (
+        module Exports, CapacityAssignmentConfigurationProperty(..),
+        mkCapacityAssignmentConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Athena.CapacityReservation.CapacityAssignmentProperty as Exports
+import Stratosphere.ResourceProperties
+data CapacityAssignmentConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-capacityreservation-capacityassignmentconfiguration.html>
+    CapacityAssignmentConfigurationProperty {haddock_workaround_ :: (),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-capacityreservation-capacityassignmentconfiguration.html#cfn-athena-capacityreservation-capacityassignmentconfiguration-capacityassignments>
+                                             capacityAssignments :: [CapacityAssignmentProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityAssignmentConfigurationProperty ::
+  [CapacityAssignmentProperty]
+  -> CapacityAssignmentConfigurationProperty
+mkCapacityAssignmentConfigurationProperty capacityAssignments
+  = CapacityAssignmentConfigurationProperty
+      {haddock_workaround_ = (),
+       capacityAssignments = capacityAssignments}
+instance ToResourceProperties CapacityAssignmentConfigurationProperty where
+  toResourceProperties CapacityAssignmentConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Athena::CapacityReservation.CapacityAssignmentConfiguration",
+         supportsTags = Prelude.False,
+         properties = ["CapacityAssignments" JSON..= capacityAssignments]}
+instance JSON.ToJSON CapacityAssignmentConfigurationProperty where
+  toJSON CapacityAssignmentConfigurationProperty {..}
+    = JSON.object ["CapacityAssignments" JSON..= capacityAssignments]
+instance Property "CapacityAssignments" CapacityAssignmentConfigurationProperty where
+  type PropertyType "CapacityAssignments" CapacityAssignmentConfigurationProperty = [CapacityAssignmentProperty]
+  set newValue CapacityAssignmentConfigurationProperty {..}
+    = CapacityAssignmentConfigurationProperty
+        {capacityAssignments = newValue, ..}
diff --git a/gen/Stratosphere/Athena/CapacityReservation/CapacityAssignmentConfigurationProperty.hs-boot b/gen/Stratosphere/Athena/CapacityReservation/CapacityAssignmentConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/CapacityReservation/CapacityAssignmentConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Athena.CapacityReservation.CapacityAssignmentConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CapacityAssignmentConfigurationProperty :: Prelude.Type
+instance ToResourceProperties CapacityAssignmentConfigurationProperty
+instance Prelude.Eq CapacityAssignmentConfigurationProperty
+instance Prelude.Show CapacityAssignmentConfigurationProperty
+instance JSON.ToJSON CapacityAssignmentConfigurationProperty
diff --git a/gen/Stratosphere/Athena/CapacityReservation/CapacityAssignmentProperty.hs b/gen/Stratosphere/Athena/CapacityReservation/CapacityAssignmentProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/CapacityReservation/CapacityAssignmentProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.Athena.CapacityReservation.CapacityAssignmentProperty (
+        CapacityAssignmentProperty(..), mkCapacityAssignmentProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CapacityAssignmentProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-capacityreservation-capacityassignment.html>
+    CapacityAssignmentProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-capacityreservation-capacityassignment.html#cfn-athena-capacityreservation-capacityassignment-workgroupnames>
+                                workgroupNames :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityAssignmentProperty ::
+  ValueList Prelude.Text -> CapacityAssignmentProperty
+mkCapacityAssignmentProperty workgroupNames
+  = CapacityAssignmentProperty
+      {haddock_workaround_ = (), workgroupNames = workgroupNames}
+instance ToResourceProperties CapacityAssignmentProperty where
+  toResourceProperties CapacityAssignmentProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Athena::CapacityReservation.CapacityAssignment",
+         supportsTags = Prelude.False,
+         properties = ["WorkgroupNames" JSON..= workgroupNames]}
+instance JSON.ToJSON CapacityAssignmentProperty where
+  toJSON CapacityAssignmentProperty {..}
+    = JSON.object ["WorkgroupNames" JSON..= workgroupNames]
+instance Property "WorkgroupNames" CapacityAssignmentProperty where
+  type PropertyType "WorkgroupNames" CapacityAssignmentProperty = ValueList Prelude.Text
+  set newValue CapacityAssignmentProperty {..}
+    = CapacityAssignmentProperty {workgroupNames = newValue, ..}
diff --git a/gen/Stratosphere/Athena/CapacityReservation/CapacityAssignmentProperty.hs-boot b/gen/Stratosphere/Athena/CapacityReservation/CapacityAssignmentProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/CapacityReservation/CapacityAssignmentProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Athena.CapacityReservation.CapacityAssignmentProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CapacityAssignmentProperty :: Prelude.Type
+instance ToResourceProperties CapacityAssignmentProperty
+instance Prelude.Eq CapacityAssignmentProperty
+instance Prelude.Show CapacityAssignmentProperty
+instance JSON.ToJSON CapacityAssignmentProperty
diff --git a/gen/Stratosphere/Athena/DataCatalog.hs b/gen/Stratosphere/Athena/DataCatalog.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/DataCatalog.hs
@@ -0,0 +1,94 @@
+module Stratosphere.Athena.DataCatalog (
+        DataCatalog(..), mkDataCatalog
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data DataCatalog
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-datacatalog.html>
+    DataCatalog {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-datacatalog.html#cfn-athena-datacatalog-connectiontype>
+                 connectionType :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-datacatalog.html#cfn-athena-datacatalog-description>
+                 description :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-datacatalog.html#cfn-athena-datacatalog-error>
+                 error :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-datacatalog.html#cfn-athena-datacatalog-name>
+                 name :: (Value Prelude.Text),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-datacatalog.html#cfn-athena-datacatalog-parameters>
+                 parameters :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-datacatalog.html#cfn-athena-datacatalog-status>
+                 status :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-datacatalog.html#cfn-athena-datacatalog-tags>
+                 tags :: (Prelude.Maybe [Tag]),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-datacatalog.html#cfn-athena-datacatalog-type>
+                 type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDataCatalog ::
+  Value Prelude.Text -> Value Prelude.Text -> DataCatalog
+mkDataCatalog name type'
+  = DataCatalog
+      {haddock_workaround_ = (), name = name, type' = type',
+       connectionType = Prelude.Nothing, description = Prelude.Nothing,
+       error = Prelude.Nothing, parameters = Prelude.Nothing,
+       status = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties DataCatalog where
+  toResourceProperties DataCatalog {..}
+    = ResourceProperties
+        {awsType = "AWS::Athena::DataCatalog", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Name" JSON..= name, "Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "ConnectionType" Prelude.<$> connectionType,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "Error" Prelude.<$> error,
+                               (JSON..=) "Parameters" Prelude.<$> parameters,
+                               (JSON..=) "Status" Prelude.<$> status,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON DataCatalog where
+  toJSON DataCatalog {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Name" JSON..= name, "Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "ConnectionType" Prelude.<$> connectionType,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "Error" Prelude.<$> error,
+                  (JSON..=) "Parameters" Prelude.<$> parameters,
+                  (JSON..=) "Status" Prelude.<$> status,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "ConnectionType" DataCatalog where
+  type PropertyType "ConnectionType" DataCatalog = Value Prelude.Text
+  set newValue DataCatalog {..}
+    = DataCatalog {connectionType = Prelude.pure newValue, ..}
+instance Property "Description" DataCatalog where
+  type PropertyType "Description" DataCatalog = Value Prelude.Text
+  set newValue DataCatalog {..}
+    = DataCatalog {description = Prelude.pure newValue, ..}
+instance Property "Error" DataCatalog where
+  type PropertyType "Error" DataCatalog = Value Prelude.Text
+  set newValue DataCatalog {..}
+    = DataCatalog {error = Prelude.pure newValue, ..}
+instance Property "Name" DataCatalog where
+  type PropertyType "Name" DataCatalog = Value Prelude.Text
+  set newValue DataCatalog {..} = DataCatalog {name = newValue, ..}
+instance Property "Parameters" DataCatalog where
+  type PropertyType "Parameters" DataCatalog = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue DataCatalog {..}
+    = DataCatalog {parameters = Prelude.pure newValue, ..}
+instance Property "Status" DataCatalog where
+  type PropertyType "Status" DataCatalog = Value Prelude.Text
+  set newValue DataCatalog {..}
+    = DataCatalog {status = Prelude.pure newValue, ..}
+instance Property "Tags" DataCatalog where
+  type PropertyType "Tags" DataCatalog = [Tag]
+  set newValue DataCatalog {..}
+    = DataCatalog {tags = Prelude.pure newValue, ..}
+instance Property "Type" DataCatalog where
+  type PropertyType "Type" DataCatalog = Value Prelude.Text
+  set newValue DataCatalog {..} = DataCatalog {type' = newValue, ..}
diff --git a/gen/Stratosphere/Athena/NamedQuery.hs b/gen/Stratosphere/Athena/NamedQuery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/NamedQuery.hs
@@ -0,0 +1,69 @@
+module Stratosphere.Athena.NamedQuery (
+        NamedQuery(..), mkNamedQuery
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NamedQuery
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-namedquery.html>
+    NamedQuery {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-namedquery.html#cfn-athena-namedquery-database>
+                database :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-namedquery.html#cfn-athena-namedquery-description>
+                description :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-namedquery.html#cfn-athena-namedquery-name>
+                name :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-namedquery.html#cfn-athena-namedquery-querystring>
+                queryString :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-namedquery.html#cfn-athena-namedquery-workgroup>
+                workGroup :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNamedQuery ::
+  Value Prelude.Text -> Value Prelude.Text -> NamedQuery
+mkNamedQuery database queryString
+  = NamedQuery
+      {haddock_workaround_ = (), database = database,
+       queryString = queryString, description = Prelude.Nothing,
+       name = Prelude.Nothing, workGroup = Prelude.Nothing}
+instance ToResourceProperties NamedQuery where
+  toResourceProperties NamedQuery {..}
+    = ResourceProperties
+        {awsType = "AWS::Athena::NamedQuery", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Database" JSON..= database, "QueryString" JSON..= queryString]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "Name" Prelude.<$> name,
+                               (JSON..=) "WorkGroup" Prelude.<$> workGroup]))}
+instance JSON.ToJSON NamedQuery where
+  toJSON NamedQuery {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Database" JSON..= database, "QueryString" JSON..= queryString]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "Name" Prelude.<$> name,
+                  (JSON..=) "WorkGroup" Prelude.<$> workGroup])))
+instance Property "Database" NamedQuery where
+  type PropertyType "Database" NamedQuery = Value Prelude.Text
+  set newValue NamedQuery {..} = NamedQuery {database = newValue, ..}
+instance Property "Description" NamedQuery where
+  type PropertyType "Description" NamedQuery = Value Prelude.Text
+  set newValue NamedQuery {..}
+    = NamedQuery {description = Prelude.pure newValue, ..}
+instance Property "Name" NamedQuery where
+  type PropertyType "Name" NamedQuery = Value Prelude.Text
+  set newValue NamedQuery {..}
+    = NamedQuery {name = Prelude.pure newValue, ..}
+instance Property "QueryString" NamedQuery where
+  type PropertyType "QueryString" NamedQuery = Value Prelude.Text
+  set newValue NamedQuery {..}
+    = NamedQuery {queryString = newValue, ..}
+instance Property "WorkGroup" NamedQuery where
+  type PropertyType "WorkGroup" NamedQuery = Value Prelude.Text
+  set newValue NamedQuery {..}
+    = NamedQuery {workGroup = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Athena/PreparedStatement.hs b/gen/Stratosphere/Athena/PreparedStatement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/PreparedStatement.hs
@@ -0,0 +1,66 @@
+module Stratosphere.Athena.PreparedStatement (
+        PreparedStatement(..), mkPreparedStatement
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PreparedStatement
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-preparedstatement.html>
+    PreparedStatement {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-preparedstatement.html#cfn-athena-preparedstatement-description>
+                       description :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-preparedstatement.html#cfn-athena-preparedstatement-querystatement>
+                       queryStatement :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-preparedstatement.html#cfn-athena-preparedstatement-statementname>
+                       statementName :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-preparedstatement.html#cfn-athena-preparedstatement-workgroup>
+                       workGroup :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPreparedStatement ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> Value Prelude.Text -> PreparedStatement
+mkPreparedStatement queryStatement statementName workGroup
+  = PreparedStatement
+      {haddock_workaround_ = (), queryStatement = queryStatement,
+       statementName = statementName, workGroup = workGroup,
+       description = Prelude.Nothing}
+instance ToResourceProperties PreparedStatement where
+  toResourceProperties PreparedStatement {..}
+    = ResourceProperties
+        {awsType = "AWS::Athena::PreparedStatement",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["QueryStatement" JSON..= queryStatement,
+                            "StatementName" JSON..= statementName,
+                            "WorkGroup" JSON..= workGroup]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description]))}
+instance JSON.ToJSON PreparedStatement where
+  toJSON PreparedStatement {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["QueryStatement" JSON..= queryStatement,
+               "StatementName" JSON..= statementName,
+               "WorkGroup" JSON..= workGroup]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description])))
+instance Property "Description" PreparedStatement where
+  type PropertyType "Description" PreparedStatement = Value Prelude.Text
+  set newValue PreparedStatement {..}
+    = PreparedStatement {description = Prelude.pure newValue, ..}
+instance Property "QueryStatement" PreparedStatement where
+  type PropertyType "QueryStatement" PreparedStatement = Value Prelude.Text
+  set newValue PreparedStatement {..}
+    = PreparedStatement {queryStatement = newValue, ..}
+instance Property "StatementName" PreparedStatement where
+  type PropertyType "StatementName" PreparedStatement = Value Prelude.Text
+  set newValue PreparedStatement {..}
+    = PreparedStatement {statementName = newValue, ..}
+instance Property "WorkGroup" PreparedStatement where
+  type PropertyType "WorkGroup" PreparedStatement = Value Prelude.Text
+  set newValue PreparedStatement {..}
+    = PreparedStatement {workGroup = newValue, ..}
diff --git a/gen/Stratosphere/Athena/WorkGroup.hs b/gen/Stratosphere/Athena/WorkGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup.hs
@@ -0,0 +1,85 @@
+module Stratosphere.Athena.WorkGroup (
+        module Exports, WorkGroup(..), mkWorkGroup
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Athena.WorkGroup.WorkGroupConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data WorkGroup
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-workgroup.html>
+    WorkGroup {haddock_workaround_ :: (),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-workgroup.html#cfn-athena-workgroup-description>
+               description :: (Prelude.Maybe (Value Prelude.Text)),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-workgroup.html#cfn-athena-workgroup-name>
+               name :: (Value Prelude.Text),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-workgroup.html#cfn-athena-workgroup-recursivedeleteoption>
+               recursiveDeleteOption :: (Prelude.Maybe (Value Prelude.Bool)),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-workgroup.html#cfn-athena-workgroup-state>
+               state :: (Prelude.Maybe (Value Prelude.Text)),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-workgroup.html#cfn-athena-workgroup-tags>
+               tags :: (Prelude.Maybe [Tag]),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-workgroup.html#cfn-athena-workgroup-workgroupconfiguration>
+               workGroupConfiguration :: (Prelude.Maybe WorkGroupConfigurationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkWorkGroup :: Value Prelude.Text -> WorkGroup
+mkWorkGroup name
+  = WorkGroup
+      {haddock_workaround_ = (), name = name,
+       description = Prelude.Nothing,
+       recursiveDeleteOption = Prelude.Nothing, state = Prelude.Nothing,
+       tags = Prelude.Nothing, workGroupConfiguration = Prelude.Nothing}
+instance ToResourceProperties WorkGroup where
+  toResourceProperties WorkGroup {..}
+    = ResourceProperties
+        {awsType = "AWS::Athena::WorkGroup", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "RecursiveDeleteOption"
+                                 Prelude.<$> recursiveDeleteOption,
+                               (JSON..=) "State" Prelude.<$> state,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "WorkGroupConfiguration"
+                                 Prelude.<$> workGroupConfiguration]))}
+instance JSON.ToJSON WorkGroup where
+  toJSON WorkGroup {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "RecursiveDeleteOption"
+                    Prelude.<$> recursiveDeleteOption,
+                  (JSON..=) "State" Prelude.<$> state,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "WorkGroupConfiguration"
+                    Prelude.<$> workGroupConfiguration])))
+instance Property "Description" WorkGroup where
+  type PropertyType "Description" WorkGroup = Value Prelude.Text
+  set newValue WorkGroup {..}
+    = WorkGroup {description = Prelude.pure newValue, ..}
+instance Property "Name" WorkGroup where
+  type PropertyType "Name" WorkGroup = Value Prelude.Text
+  set newValue WorkGroup {..} = WorkGroup {name = newValue, ..}
+instance Property "RecursiveDeleteOption" WorkGroup where
+  type PropertyType "RecursiveDeleteOption" WorkGroup = Value Prelude.Bool
+  set newValue WorkGroup {..}
+    = WorkGroup {recursiveDeleteOption = Prelude.pure newValue, ..}
+instance Property "State" WorkGroup where
+  type PropertyType "State" WorkGroup = Value Prelude.Text
+  set newValue WorkGroup {..}
+    = WorkGroup {state = Prelude.pure newValue, ..}
+instance Property "Tags" WorkGroup where
+  type PropertyType "Tags" WorkGroup = [Tag]
+  set newValue WorkGroup {..}
+    = WorkGroup {tags = Prelude.pure newValue, ..}
+instance Property "WorkGroupConfiguration" WorkGroup where
+  type PropertyType "WorkGroupConfiguration" WorkGroup = WorkGroupConfigurationProperty
+  set newValue WorkGroup {..}
+    = WorkGroup {workGroupConfiguration = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Athena/WorkGroup/AclConfigurationProperty.hs b/gen/Stratosphere/Athena/WorkGroup/AclConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup/AclConfigurationProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.Athena.WorkGroup.AclConfigurationProperty (
+        AclConfigurationProperty(..), mkAclConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AclConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-aclconfiguration.html>
+    AclConfigurationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-aclconfiguration.html#cfn-athena-workgroup-aclconfiguration-s3acloption>
+                              s3AclOption :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAclConfigurationProperty ::
+  Value Prelude.Text -> AclConfigurationProperty
+mkAclConfigurationProperty s3AclOption
+  = AclConfigurationProperty
+      {haddock_workaround_ = (), s3AclOption = s3AclOption}
+instance ToResourceProperties AclConfigurationProperty where
+  toResourceProperties AclConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Athena::WorkGroup.AclConfiguration",
+         supportsTags = Prelude.False,
+         properties = ["S3AclOption" JSON..= s3AclOption]}
+instance JSON.ToJSON AclConfigurationProperty where
+  toJSON AclConfigurationProperty {..}
+    = JSON.object ["S3AclOption" JSON..= s3AclOption]
+instance Property "S3AclOption" AclConfigurationProperty where
+  type PropertyType "S3AclOption" AclConfigurationProperty = Value Prelude.Text
+  set newValue AclConfigurationProperty {..}
+    = AclConfigurationProperty {s3AclOption = newValue, ..}
diff --git a/gen/Stratosphere/Athena/WorkGroup/AclConfigurationProperty.hs-boot b/gen/Stratosphere/Athena/WorkGroup/AclConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup/AclConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Athena.WorkGroup.AclConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AclConfigurationProperty :: Prelude.Type
+instance ToResourceProperties AclConfigurationProperty
+instance Prelude.Eq AclConfigurationProperty
+instance Prelude.Show AclConfigurationProperty
+instance JSON.ToJSON AclConfigurationProperty
diff --git a/gen/Stratosphere/Athena/WorkGroup/CustomerContentEncryptionConfigurationProperty.hs b/gen/Stratosphere/Athena/WorkGroup/CustomerContentEncryptionConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup/CustomerContentEncryptionConfigurationProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.Athena.WorkGroup.CustomerContentEncryptionConfigurationProperty (
+        CustomerContentEncryptionConfigurationProperty(..),
+        mkCustomerContentEncryptionConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CustomerContentEncryptionConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-customercontentencryptionconfiguration.html>
+    CustomerContentEncryptionConfigurationProperty {haddock_workaround_ :: (),
+                                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-customercontentencryptionconfiguration.html#cfn-athena-workgroup-customercontentencryptionconfiguration-kmskey>
+                                                    kmsKey :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCustomerContentEncryptionConfigurationProperty ::
+  Value Prelude.Text
+  -> CustomerContentEncryptionConfigurationProperty
+mkCustomerContentEncryptionConfigurationProperty kmsKey
+  = CustomerContentEncryptionConfigurationProperty
+      {haddock_workaround_ = (), kmsKey = kmsKey}
+instance ToResourceProperties CustomerContentEncryptionConfigurationProperty where
+  toResourceProperties
+    CustomerContentEncryptionConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Athena::WorkGroup.CustomerContentEncryptionConfiguration",
+         supportsTags = Prelude.False,
+         properties = ["KmsKey" JSON..= kmsKey]}
+instance JSON.ToJSON CustomerContentEncryptionConfigurationProperty where
+  toJSON CustomerContentEncryptionConfigurationProperty {..}
+    = JSON.object ["KmsKey" JSON..= kmsKey]
+instance Property "KmsKey" CustomerContentEncryptionConfigurationProperty where
+  type PropertyType "KmsKey" CustomerContentEncryptionConfigurationProperty = Value Prelude.Text
+  set newValue CustomerContentEncryptionConfigurationProperty {..}
+    = CustomerContentEncryptionConfigurationProperty
+        {kmsKey = newValue, ..}
diff --git a/gen/Stratosphere/Athena/WorkGroup/CustomerContentEncryptionConfigurationProperty.hs-boot b/gen/Stratosphere/Athena/WorkGroup/CustomerContentEncryptionConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup/CustomerContentEncryptionConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Athena.WorkGroup.CustomerContentEncryptionConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CustomerContentEncryptionConfigurationProperty :: Prelude.Type
+instance ToResourceProperties CustomerContentEncryptionConfigurationProperty
+instance Prelude.Eq CustomerContentEncryptionConfigurationProperty
+instance Prelude.Show CustomerContentEncryptionConfigurationProperty
+instance JSON.ToJSON CustomerContentEncryptionConfigurationProperty
diff --git a/gen/Stratosphere/Athena/WorkGroup/EncryptionConfigurationProperty.hs b/gen/Stratosphere/Athena/WorkGroup/EncryptionConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup/EncryptionConfigurationProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.Athena.WorkGroup.EncryptionConfigurationProperty (
+        EncryptionConfigurationProperty(..),
+        mkEncryptionConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EncryptionConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-encryptionconfiguration.html>
+    EncryptionConfigurationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-encryptionconfiguration.html#cfn-athena-workgroup-encryptionconfiguration-encryptionoption>
+                                     encryptionOption :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-encryptionconfiguration.html#cfn-athena-workgroup-encryptionconfiguration-kmskey>
+                                     kmsKey :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEncryptionConfigurationProperty ::
+  Value Prelude.Text -> EncryptionConfigurationProperty
+mkEncryptionConfigurationProperty encryptionOption
+  = EncryptionConfigurationProperty
+      {haddock_workaround_ = (), encryptionOption = encryptionOption,
+       kmsKey = Prelude.Nothing}
+instance ToResourceProperties EncryptionConfigurationProperty where
+  toResourceProperties EncryptionConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Athena::WorkGroup.EncryptionConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["EncryptionOption" JSON..= encryptionOption]
+                           (Prelude.catMaybes [(JSON..=) "KmsKey" Prelude.<$> kmsKey]))}
+instance JSON.ToJSON EncryptionConfigurationProperty where
+  toJSON EncryptionConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["EncryptionOption" JSON..= encryptionOption]
+              (Prelude.catMaybes [(JSON..=) "KmsKey" Prelude.<$> kmsKey])))
+instance Property "EncryptionOption" EncryptionConfigurationProperty where
+  type PropertyType "EncryptionOption" EncryptionConfigurationProperty = Value Prelude.Text
+  set newValue EncryptionConfigurationProperty {..}
+    = EncryptionConfigurationProperty {encryptionOption = newValue, ..}
+instance Property "KmsKey" EncryptionConfigurationProperty where
+  type PropertyType "KmsKey" EncryptionConfigurationProperty = Value Prelude.Text
+  set newValue EncryptionConfigurationProperty {..}
+    = EncryptionConfigurationProperty
+        {kmsKey = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Athena/WorkGroup/EncryptionConfigurationProperty.hs-boot b/gen/Stratosphere/Athena/WorkGroup/EncryptionConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup/EncryptionConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Athena.WorkGroup.EncryptionConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EncryptionConfigurationProperty :: Prelude.Type
+instance ToResourceProperties EncryptionConfigurationProperty
+instance Prelude.Eq EncryptionConfigurationProperty
+instance Prelude.Show EncryptionConfigurationProperty
+instance JSON.ToJSON EncryptionConfigurationProperty
diff --git a/gen/Stratosphere/Athena/WorkGroup/EngineVersionProperty.hs b/gen/Stratosphere/Athena/WorkGroup/EngineVersionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup/EngineVersionProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.Athena.WorkGroup.EngineVersionProperty (
+        EngineVersionProperty(..), mkEngineVersionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EngineVersionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-engineversion.html>
+    EngineVersionProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-engineversion.html#cfn-athena-workgroup-engineversion-effectiveengineversion>
+                           effectiveEngineVersion :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-engineversion.html#cfn-athena-workgroup-engineversion-selectedengineversion>
+                           selectedEngineVersion :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEngineVersionProperty :: EngineVersionProperty
+mkEngineVersionProperty
+  = EngineVersionProperty
+      {haddock_workaround_ = (),
+       effectiveEngineVersion = Prelude.Nothing,
+       selectedEngineVersion = Prelude.Nothing}
+instance ToResourceProperties EngineVersionProperty where
+  toResourceProperties EngineVersionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Athena::WorkGroup.EngineVersion",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EffectiveEngineVersion"
+                              Prelude.<$> effectiveEngineVersion,
+                            (JSON..=) "SelectedEngineVersion"
+                              Prelude.<$> selectedEngineVersion])}
+instance JSON.ToJSON EngineVersionProperty where
+  toJSON EngineVersionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EffectiveEngineVersion"
+                 Prelude.<$> effectiveEngineVersion,
+               (JSON..=) "SelectedEngineVersion"
+                 Prelude.<$> selectedEngineVersion]))
+instance Property "EffectiveEngineVersion" EngineVersionProperty where
+  type PropertyType "EffectiveEngineVersion" EngineVersionProperty = Value Prelude.Text
+  set newValue EngineVersionProperty {..}
+    = EngineVersionProperty
+        {effectiveEngineVersion = Prelude.pure newValue, ..}
+instance Property "SelectedEngineVersion" EngineVersionProperty where
+  type PropertyType "SelectedEngineVersion" EngineVersionProperty = Value Prelude.Text
+  set newValue EngineVersionProperty {..}
+    = EngineVersionProperty
+        {selectedEngineVersion = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Athena/WorkGroup/EngineVersionProperty.hs-boot b/gen/Stratosphere/Athena/WorkGroup/EngineVersionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup/EngineVersionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Athena.WorkGroup.EngineVersionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EngineVersionProperty :: Prelude.Type
+instance ToResourceProperties EngineVersionProperty
+instance Prelude.Eq EngineVersionProperty
+instance Prelude.Show EngineVersionProperty
+instance JSON.ToJSON EngineVersionProperty
diff --git a/gen/Stratosphere/Athena/WorkGroup/ManagedQueryResultsConfigurationProperty.hs b/gen/Stratosphere/Athena/WorkGroup/ManagedQueryResultsConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup/ManagedQueryResultsConfigurationProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.Athena.WorkGroup.ManagedQueryResultsConfigurationProperty (
+        module Exports, ManagedQueryResultsConfigurationProperty(..),
+        mkManagedQueryResultsConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Athena.WorkGroup.ManagedStorageEncryptionConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ManagedQueryResultsConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-managedqueryresultsconfiguration.html>
+    ManagedQueryResultsConfigurationProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-managedqueryresultsconfiguration.html#cfn-athena-workgroup-managedqueryresultsconfiguration-enabled>
+                                              enabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-managedqueryresultsconfiguration.html#cfn-athena-workgroup-managedqueryresultsconfiguration-encryptionconfiguration>
+                                              encryptionConfiguration :: (Prelude.Maybe ManagedStorageEncryptionConfigurationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkManagedQueryResultsConfigurationProperty ::
+  ManagedQueryResultsConfigurationProperty
+mkManagedQueryResultsConfigurationProperty
+  = ManagedQueryResultsConfigurationProperty
+      {haddock_workaround_ = (), enabled = Prelude.Nothing,
+       encryptionConfiguration = Prelude.Nothing}
+instance ToResourceProperties ManagedQueryResultsConfigurationProperty where
+  toResourceProperties ManagedQueryResultsConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Athena::WorkGroup.ManagedQueryResultsConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Enabled" Prelude.<$> enabled,
+                            (JSON..=) "EncryptionConfiguration"
+                              Prelude.<$> encryptionConfiguration])}
+instance JSON.ToJSON ManagedQueryResultsConfigurationProperty where
+  toJSON ManagedQueryResultsConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Enabled" Prelude.<$> enabled,
+               (JSON..=) "EncryptionConfiguration"
+                 Prelude.<$> encryptionConfiguration]))
+instance Property "Enabled" ManagedQueryResultsConfigurationProperty where
+  type PropertyType "Enabled" ManagedQueryResultsConfigurationProperty = Value Prelude.Bool
+  set newValue ManagedQueryResultsConfigurationProperty {..}
+    = ManagedQueryResultsConfigurationProperty
+        {enabled = Prelude.pure newValue, ..}
+instance Property "EncryptionConfiguration" ManagedQueryResultsConfigurationProperty where
+  type PropertyType "EncryptionConfiguration" ManagedQueryResultsConfigurationProperty = ManagedStorageEncryptionConfigurationProperty
+  set newValue ManagedQueryResultsConfigurationProperty {..}
+    = ManagedQueryResultsConfigurationProperty
+        {encryptionConfiguration = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Athena/WorkGroup/ManagedQueryResultsConfigurationProperty.hs-boot b/gen/Stratosphere/Athena/WorkGroup/ManagedQueryResultsConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup/ManagedQueryResultsConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Athena.WorkGroup.ManagedQueryResultsConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ManagedQueryResultsConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ManagedQueryResultsConfigurationProperty
+instance Prelude.Eq ManagedQueryResultsConfigurationProperty
+instance Prelude.Show ManagedQueryResultsConfigurationProperty
+instance JSON.ToJSON ManagedQueryResultsConfigurationProperty
diff --git a/gen/Stratosphere/Athena/WorkGroup/ManagedStorageEncryptionConfigurationProperty.hs b/gen/Stratosphere/Athena/WorkGroup/ManagedStorageEncryptionConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup/ManagedStorageEncryptionConfigurationProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.Athena.WorkGroup.ManagedStorageEncryptionConfigurationProperty (
+        ManagedStorageEncryptionConfigurationProperty(..),
+        mkManagedStorageEncryptionConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ManagedStorageEncryptionConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-managedstorageencryptionconfiguration.html>
+    ManagedStorageEncryptionConfigurationProperty {haddock_workaround_ :: (),
+                                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-managedstorageencryptionconfiguration.html#cfn-athena-workgroup-managedstorageencryptionconfiguration-kmskey>
+                                                   kmsKey :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkManagedStorageEncryptionConfigurationProperty ::
+  ManagedStorageEncryptionConfigurationProperty
+mkManagedStorageEncryptionConfigurationProperty
+  = ManagedStorageEncryptionConfigurationProperty
+      {haddock_workaround_ = (), kmsKey = Prelude.Nothing}
+instance ToResourceProperties ManagedStorageEncryptionConfigurationProperty where
+  toResourceProperties
+    ManagedStorageEncryptionConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Athena::WorkGroup.ManagedStorageEncryptionConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "KmsKey" Prelude.<$> kmsKey])}
+instance JSON.ToJSON ManagedStorageEncryptionConfigurationProperty where
+  toJSON ManagedStorageEncryptionConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "KmsKey" Prelude.<$> kmsKey]))
+instance Property "KmsKey" ManagedStorageEncryptionConfigurationProperty where
+  type PropertyType "KmsKey" ManagedStorageEncryptionConfigurationProperty = Value Prelude.Text
+  set newValue ManagedStorageEncryptionConfigurationProperty {..}
+    = ManagedStorageEncryptionConfigurationProperty
+        {kmsKey = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Athena/WorkGroup/ManagedStorageEncryptionConfigurationProperty.hs-boot b/gen/Stratosphere/Athena/WorkGroup/ManagedStorageEncryptionConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup/ManagedStorageEncryptionConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Athena.WorkGroup.ManagedStorageEncryptionConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ManagedStorageEncryptionConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ManagedStorageEncryptionConfigurationProperty
+instance Prelude.Eq ManagedStorageEncryptionConfigurationProperty
+instance Prelude.Show ManagedStorageEncryptionConfigurationProperty
+instance JSON.ToJSON ManagedStorageEncryptionConfigurationProperty
diff --git a/gen/Stratosphere/Athena/WorkGroup/ResultConfigurationProperty.hs b/gen/Stratosphere/Athena/WorkGroup/ResultConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup/ResultConfigurationProperty.hs
@@ -0,0 +1,72 @@
+module Stratosphere.Athena.WorkGroup.ResultConfigurationProperty (
+        module Exports, ResultConfigurationProperty(..),
+        mkResultConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Athena.WorkGroup.AclConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.Athena.WorkGroup.EncryptionConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ResultConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-resultconfiguration.html>
+    ResultConfigurationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-resultconfiguration.html#cfn-athena-workgroup-resultconfiguration-aclconfiguration>
+                                 aclConfiguration :: (Prelude.Maybe AclConfigurationProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-resultconfiguration.html#cfn-athena-workgroup-resultconfiguration-encryptionconfiguration>
+                                 encryptionConfiguration :: (Prelude.Maybe EncryptionConfigurationProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-resultconfiguration.html#cfn-athena-workgroup-resultconfiguration-expectedbucketowner>
+                                 expectedBucketOwner :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-resultconfiguration.html#cfn-athena-workgroup-resultconfiguration-outputlocation>
+                                 outputLocation :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResultConfigurationProperty :: ResultConfigurationProperty
+mkResultConfigurationProperty
+  = ResultConfigurationProperty
+      {haddock_workaround_ = (), aclConfiguration = Prelude.Nothing,
+       encryptionConfiguration = Prelude.Nothing,
+       expectedBucketOwner = Prelude.Nothing,
+       outputLocation = Prelude.Nothing}
+instance ToResourceProperties ResultConfigurationProperty where
+  toResourceProperties ResultConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Athena::WorkGroup.ResultConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AclConfiguration" Prelude.<$> aclConfiguration,
+                            (JSON..=) "EncryptionConfiguration"
+                              Prelude.<$> encryptionConfiguration,
+                            (JSON..=) "ExpectedBucketOwner" Prelude.<$> expectedBucketOwner,
+                            (JSON..=) "OutputLocation" Prelude.<$> outputLocation])}
+instance JSON.ToJSON ResultConfigurationProperty where
+  toJSON ResultConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AclConfiguration" Prelude.<$> aclConfiguration,
+               (JSON..=) "EncryptionConfiguration"
+                 Prelude.<$> encryptionConfiguration,
+               (JSON..=) "ExpectedBucketOwner" Prelude.<$> expectedBucketOwner,
+               (JSON..=) "OutputLocation" Prelude.<$> outputLocation]))
+instance Property "AclConfiguration" ResultConfigurationProperty where
+  type PropertyType "AclConfiguration" ResultConfigurationProperty = AclConfigurationProperty
+  set newValue ResultConfigurationProperty {..}
+    = ResultConfigurationProperty
+        {aclConfiguration = Prelude.pure newValue, ..}
+instance Property "EncryptionConfiguration" ResultConfigurationProperty where
+  type PropertyType "EncryptionConfiguration" ResultConfigurationProperty = EncryptionConfigurationProperty
+  set newValue ResultConfigurationProperty {..}
+    = ResultConfigurationProperty
+        {encryptionConfiguration = Prelude.pure newValue, ..}
+instance Property "ExpectedBucketOwner" ResultConfigurationProperty where
+  type PropertyType "ExpectedBucketOwner" ResultConfigurationProperty = Value Prelude.Text
+  set newValue ResultConfigurationProperty {..}
+    = ResultConfigurationProperty
+        {expectedBucketOwner = Prelude.pure newValue, ..}
+instance Property "OutputLocation" ResultConfigurationProperty where
+  type PropertyType "OutputLocation" ResultConfigurationProperty = Value Prelude.Text
+  set newValue ResultConfigurationProperty {..}
+    = ResultConfigurationProperty
+        {outputLocation = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Athena/WorkGroup/ResultConfigurationProperty.hs-boot b/gen/Stratosphere/Athena/WorkGroup/ResultConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup/ResultConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Athena.WorkGroup.ResultConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ResultConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ResultConfigurationProperty
+instance Prelude.Eq ResultConfigurationProperty
+instance Prelude.Show ResultConfigurationProperty
+instance JSON.ToJSON ResultConfigurationProperty
diff --git a/gen/Stratosphere/Athena/WorkGroup/WorkGroupConfigurationProperty.hs b/gen/Stratosphere/Athena/WorkGroup/WorkGroupConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup/WorkGroupConfigurationProperty.hs
@@ -0,0 +1,145 @@
+module Stratosphere.Athena.WorkGroup.WorkGroupConfigurationProperty (
+        module Exports, WorkGroupConfigurationProperty(..),
+        mkWorkGroupConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Athena.WorkGroup.CustomerContentEncryptionConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.Athena.WorkGroup.EngineVersionProperty as Exports
+import {-# SOURCE #-} Stratosphere.Athena.WorkGroup.ManagedQueryResultsConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.Athena.WorkGroup.ResultConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data WorkGroupConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-workgroupconfiguration.html>
+    WorkGroupConfigurationProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-workgroupconfiguration.html#cfn-athena-workgroup-workgroupconfiguration-additionalconfiguration>
+                                    additionalConfiguration :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-workgroupconfiguration.html#cfn-athena-workgroup-workgroupconfiguration-bytesscannedcutoffperquery>
+                                    bytesScannedCutoffPerQuery :: (Prelude.Maybe (Value Prelude.Integer)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-workgroupconfiguration.html#cfn-athena-workgroup-workgroupconfiguration-customercontentencryptionconfiguration>
+                                    customerContentEncryptionConfiguration :: (Prelude.Maybe CustomerContentEncryptionConfigurationProperty),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-workgroupconfiguration.html#cfn-athena-workgroup-workgroupconfiguration-enforceworkgroupconfiguration>
+                                    enforceWorkGroupConfiguration :: (Prelude.Maybe (Value Prelude.Bool)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-workgroupconfiguration.html#cfn-athena-workgroup-workgroupconfiguration-engineversion>
+                                    engineVersion :: (Prelude.Maybe EngineVersionProperty),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-workgroupconfiguration.html#cfn-athena-workgroup-workgroupconfiguration-executionrole>
+                                    executionRole :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-workgroupconfiguration.html#cfn-athena-workgroup-workgroupconfiguration-managedqueryresultsconfiguration>
+                                    managedQueryResultsConfiguration :: (Prelude.Maybe ManagedQueryResultsConfigurationProperty),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-workgroupconfiguration.html#cfn-athena-workgroup-workgroupconfiguration-publishcloudwatchmetricsenabled>
+                                    publishCloudWatchMetricsEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-workgroupconfiguration.html#cfn-athena-workgroup-workgroupconfiguration-requesterpaysenabled>
+                                    requesterPaysEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-workgroupconfiguration.html#cfn-athena-workgroup-workgroupconfiguration-resultconfiguration>
+                                    resultConfiguration :: (Prelude.Maybe ResultConfigurationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkWorkGroupConfigurationProperty :: WorkGroupConfigurationProperty
+mkWorkGroupConfigurationProperty
+  = WorkGroupConfigurationProperty
+      {haddock_workaround_ = (),
+       additionalConfiguration = Prelude.Nothing,
+       bytesScannedCutoffPerQuery = Prelude.Nothing,
+       customerContentEncryptionConfiguration = Prelude.Nothing,
+       enforceWorkGroupConfiguration = Prelude.Nothing,
+       engineVersion = Prelude.Nothing, executionRole = Prelude.Nothing,
+       managedQueryResultsConfiguration = Prelude.Nothing,
+       publishCloudWatchMetricsEnabled = Prelude.Nothing,
+       requesterPaysEnabled = Prelude.Nothing,
+       resultConfiguration = Prelude.Nothing}
+instance ToResourceProperties WorkGroupConfigurationProperty where
+  toResourceProperties WorkGroupConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Athena::WorkGroup.WorkGroupConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AdditionalConfiguration"
+                              Prelude.<$> additionalConfiguration,
+                            (JSON..=) "BytesScannedCutoffPerQuery"
+                              Prelude.<$> bytesScannedCutoffPerQuery,
+                            (JSON..=) "CustomerContentEncryptionConfiguration"
+                              Prelude.<$> customerContentEncryptionConfiguration,
+                            (JSON..=) "EnforceWorkGroupConfiguration"
+                              Prelude.<$> enforceWorkGroupConfiguration,
+                            (JSON..=) "EngineVersion" Prelude.<$> engineVersion,
+                            (JSON..=) "ExecutionRole" Prelude.<$> executionRole,
+                            (JSON..=) "ManagedQueryResultsConfiguration"
+                              Prelude.<$> managedQueryResultsConfiguration,
+                            (JSON..=) "PublishCloudWatchMetricsEnabled"
+                              Prelude.<$> publishCloudWatchMetricsEnabled,
+                            (JSON..=) "RequesterPaysEnabled" Prelude.<$> requesterPaysEnabled,
+                            (JSON..=) "ResultConfiguration" Prelude.<$> resultConfiguration])}
+instance JSON.ToJSON WorkGroupConfigurationProperty where
+  toJSON WorkGroupConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AdditionalConfiguration"
+                 Prelude.<$> additionalConfiguration,
+               (JSON..=) "BytesScannedCutoffPerQuery"
+                 Prelude.<$> bytesScannedCutoffPerQuery,
+               (JSON..=) "CustomerContentEncryptionConfiguration"
+                 Prelude.<$> customerContentEncryptionConfiguration,
+               (JSON..=) "EnforceWorkGroupConfiguration"
+                 Prelude.<$> enforceWorkGroupConfiguration,
+               (JSON..=) "EngineVersion" Prelude.<$> engineVersion,
+               (JSON..=) "ExecutionRole" Prelude.<$> executionRole,
+               (JSON..=) "ManagedQueryResultsConfiguration"
+                 Prelude.<$> managedQueryResultsConfiguration,
+               (JSON..=) "PublishCloudWatchMetricsEnabled"
+                 Prelude.<$> publishCloudWatchMetricsEnabled,
+               (JSON..=) "RequesterPaysEnabled" Prelude.<$> requesterPaysEnabled,
+               (JSON..=) "ResultConfiguration" Prelude.<$> resultConfiguration]))
+instance Property "AdditionalConfiguration" WorkGroupConfigurationProperty where
+  type PropertyType "AdditionalConfiguration" WorkGroupConfigurationProperty = Value Prelude.Text
+  set newValue WorkGroupConfigurationProperty {..}
+    = WorkGroupConfigurationProperty
+        {additionalConfiguration = Prelude.pure newValue, ..}
+instance Property "BytesScannedCutoffPerQuery" WorkGroupConfigurationProperty where
+  type PropertyType "BytesScannedCutoffPerQuery" WorkGroupConfigurationProperty = Value Prelude.Integer
+  set newValue WorkGroupConfigurationProperty {..}
+    = WorkGroupConfigurationProperty
+        {bytesScannedCutoffPerQuery = Prelude.pure newValue, ..}
+instance Property "CustomerContentEncryptionConfiguration" WorkGroupConfigurationProperty where
+  type PropertyType "CustomerContentEncryptionConfiguration" WorkGroupConfigurationProperty = CustomerContentEncryptionConfigurationProperty
+  set newValue WorkGroupConfigurationProperty {..}
+    = WorkGroupConfigurationProperty
+        {customerContentEncryptionConfiguration = Prelude.pure newValue,
+         ..}
+instance Property "EnforceWorkGroupConfiguration" WorkGroupConfigurationProperty where
+  type PropertyType "EnforceWorkGroupConfiguration" WorkGroupConfigurationProperty = Value Prelude.Bool
+  set newValue WorkGroupConfigurationProperty {..}
+    = WorkGroupConfigurationProperty
+        {enforceWorkGroupConfiguration = Prelude.pure newValue, ..}
+instance Property "EngineVersion" WorkGroupConfigurationProperty where
+  type PropertyType "EngineVersion" WorkGroupConfigurationProperty = EngineVersionProperty
+  set newValue WorkGroupConfigurationProperty {..}
+    = WorkGroupConfigurationProperty
+        {engineVersion = Prelude.pure newValue, ..}
+instance Property "ExecutionRole" WorkGroupConfigurationProperty where
+  type PropertyType "ExecutionRole" WorkGroupConfigurationProperty = Value Prelude.Text
+  set newValue WorkGroupConfigurationProperty {..}
+    = WorkGroupConfigurationProperty
+        {executionRole = Prelude.pure newValue, ..}
+instance Property "ManagedQueryResultsConfiguration" WorkGroupConfigurationProperty where
+  type PropertyType "ManagedQueryResultsConfiguration" WorkGroupConfigurationProperty = ManagedQueryResultsConfigurationProperty
+  set newValue WorkGroupConfigurationProperty {..}
+    = WorkGroupConfigurationProperty
+        {managedQueryResultsConfiguration = Prelude.pure newValue, ..}
+instance Property "PublishCloudWatchMetricsEnabled" WorkGroupConfigurationProperty where
+  type PropertyType "PublishCloudWatchMetricsEnabled" WorkGroupConfigurationProperty = Value Prelude.Bool
+  set newValue WorkGroupConfigurationProperty {..}
+    = WorkGroupConfigurationProperty
+        {publishCloudWatchMetricsEnabled = Prelude.pure newValue, ..}
+instance Property "RequesterPaysEnabled" WorkGroupConfigurationProperty where
+  type PropertyType "RequesterPaysEnabled" WorkGroupConfigurationProperty = Value Prelude.Bool
+  set newValue WorkGroupConfigurationProperty {..}
+    = WorkGroupConfigurationProperty
+        {requesterPaysEnabled = Prelude.pure newValue, ..}
+instance Property "ResultConfiguration" WorkGroupConfigurationProperty where
+  type PropertyType "ResultConfiguration" WorkGroupConfigurationProperty = ResultConfigurationProperty
+  set newValue WorkGroupConfigurationProperty {..}
+    = WorkGroupConfigurationProperty
+        {resultConfiguration = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Athena/WorkGroup/WorkGroupConfigurationProperty.hs-boot b/gen/Stratosphere/Athena/WorkGroup/WorkGroupConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Athena/WorkGroup/WorkGroupConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Athena.WorkGroup.WorkGroupConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data WorkGroupConfigurationProperty :: Prelude.Type
+instance ToResourceProperties WorkGroupConfigurationProperty
+instance Prelude.Eq WorkGroupConfigurationProperty
+instance Prelude.Show WorkGroupConfigurationProperty
+instance JSON.ToJSON WorkGroupConfigurationProperty
diff --git a/stratosphere-athena.cabal b/stratosphere-athena.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-athena.cabal
@@ -0,0 +1,87 @@
+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-athena
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS Athena.
+description:    Integration into stratosphere to generate resources and properties for AWS Athena
+category:       AWS, Cloud, Athena
+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.Athena.CapacityReservation
+      Stratosphere.Athena.CapacityReservation.CapacityAssignmentConfigurationProperty
+      Stratosphere.Athena.CapacityReservation.CapacityAssignmentProperty
+      Stratosphere.Athena.DataCatalog
+      Stratosphere.Athena.NamedQuery
+      Stratosphere.Athena.PreparedStatement
+      Stratosphere.Athena.WorkGroup
+      Stratosphere.Athena.WorkGroup.AclConfigurationProperty
+      Stratosphere.Athena.WorkGroup.CustomerContentEncryptionConfigurationProperty
+      Stratosphere.Athena.WorkGroup.EncryptionConfigurationProperty
+      Stratosphere.Athena.WorkGroup.EngineVersionProperty
+      Stratosphere.Athena.WorkGroup.ManagedQueryResultsConfigurationProperty
+      Stratosphere.Athena.WorkGroup.ManagedStorageEncryptionConfigurationProperty
+      Stratosphere.Athena.WorkGroup.ResultConfigurationProperty
+      Stratosphere.Athena.WorkGroup.WorkGroupConfigurationProperty
+  other-modules:
+      Paths_stratosphere_athena
+  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
