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/AppSync/Api.hs b/gen/Stratosphere/AppSync/Api.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api.hs
@@ -0,0 +1,63 @@
+module Stratosphere.AppSync.Api (
+        module Exports, Api(..), mkApi
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.Api.EventConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Api
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-api.html>
+    Api {haddock_workaround_ :: (),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-api.html#cfn-appsync-api-eventconfig>
+         eventConfig :: (Prelude.Maybe EventConfigProperty),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-api.html#cfn-appsync-api-name>
+         name :: (Value Prelude.Text),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-api.html#cfn-appsync-api-ownercontact>
+         ownerContact :: (Prelude.Maybe (Value Prelude.Text)),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-api.html#cfn-appsync-api-tags>
+         tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkApi :: Value Prelude.Text -> Api
+mkApi name
+  = Api
+      {haddock_workaround_ = (), name = name,
+       eventConfig = Prelude.Nothing, ownerContact = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties Api where
+  toResourceProperties Api {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::Api", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "EventConfig" Prelude.<$> eventConfig,
+                               (JSON..=) "OwnerContact" Prelude.<$> ownerContact,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON Api where
+  toJSON Api {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "EventConfig" Prelude.<$> eventConfig,
+                  (JSON..=) "OwnerContact" Prelude.<$> ownerContact,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "EventConfig" Api where
+  type PropertyType "EventConfig" Api = EventConfigProperty
+  set newValue Api {..}
+    = Api {eventConfig = Prelude.pure newValue, ..}
+instance Property "Name" Api where
+  type PropertyType "Name" Api = Value Prelude.Text
+  set newValue Api {..} = Api {name = newValue, ..}
+instance Property "OwnerContact" Api where
+  type PropertyType "OwnerContact" Api = Value Prelude.Text
+  set newValue Api {..}
+    = Api {ownerContact = Prelude.pure newValue, ..}
+instance Property "Tags" Api where
+  type PropertyType "Tags" Api = [Tag]
+  set newValue Api {..} = Api {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/Api/AuthModeProperty.hs b/gen/Stratosphere/AppSync/Api/AuthModeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api/AuthModeProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.AppSync.Api.AuthModeProperty (
+        AuthModeProperty(..), mkAuthModeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AuthModeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-authmode.html>
+    AuthModeProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-authmode.html#cfn-appsync-api-authmode-authtype>
+                      authType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAuthModeProperty :: AuthModeProperty
+mkAuthModeProperty
+  = AuthModeProperty
+      {haddock_workaround_ = (), authType = Prelude.Nothing}
+instance ToResourceProperties AuthModeProperty where
+  toResourceProperties AuthModeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::Api.AuthMode",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "AuthType" Prelude.<$> authType])}
+instance JSON.ToJSON AuthModeProperty where
+  toJSON AuthModeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "AuthType" Prelude.<$> authType]))
+instance Property "AuthType" AuthModeProperty where
+  type PropertyType "AuthType" AuthModeProperty = Value Prelude.Text
+  set newValue AuthModeProperty {..}
+    = AuthModeProperty {authType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/Api/AuthModeProperty.hs-boot b/gen/Stratosphere/AppSync/Api/AuthModeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api/AuthModeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.Api.AuthModeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AuthModeProperty :: Prelude.Type
+instance ToResourceProperties AuthModeProperty
+instance Prelude.Eq AuthModeProperty
+instance Prelude.Show AuthModeProperty
+instance JSON.ToJSON AuthModeProperty
diff --git a/gen/Stratosphere/AppSync/Api/AuthProviderProperty.hs b/gen/Stratosphere/AppSync/Api/AuthProviderProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api/AuthProviderProperty.hs
@@ -0,0 +1,73 @@
+module Stratosphere.AppSync.Api.AuthProviderProperty (
+        module Exports, AuthProviderProperty(..), mkAuthProviderProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.Api.CognitoConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.Api.LambdaAuthorizerConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.Api.OpenIDConnectConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AuthProviderProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-authprovider.html>
+    AuthProviderProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-authprovider.html#cfn-appsync-api-authprovider-authtype>
+                          authType :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-authprovider.html#cfn-appsync-api-authprovider-cognitoconfig>
+                          cognitoConfig :: (Prelude.Maybe CognitoConfigProperty),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-authprovider.html#cfn-appsync-api-authprovider-lambdaauthorizerconfig>
+                          lambdaAuthorizerConfig :: (Prelude.Maybe LambdaAuthorizerConfigProperty),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-authprovider.html#cfn-appsync-api-authprovider-openidconnectconfig>
+                          openIDConnectConfig :: (Prelude.Maybe OpenIDConnectConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAuthProviderProperty ::
+  Value Prelude.Text -> AuthProviderProperty
+mkAuthProviderProperty authType
+  = AuthProviderProperty
+      {haddock_workaround_ = (), authType = authType,
+       cognitoConfig = Prelude.Nothing,
+       lambdaAuthorizerConfig = Prelude.Nothing,
+       openIDConnectConfig = Prelude.Nothing}
+instance ToResourceProperties AuthProviderProperty where
+  toResourceProperties AuthProviderProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::Api.AuthProvider",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AuthType" JSON..= authType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CognitoConfig" Prelude.<$> cognitoConfig,
+                               (JSON..=) "LambdaAuthorizerConfig"
+                                 Prelude.<$> lambdaAuthorizerConfig,
+                               (JSON..=) "OpenIDConnectConfig" Prelude.<$> openIDConnectConfig]))}
+instance JSON.ToJSON AuthProviderProperty where
+  toJSON AuthProviderProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AuthType" JSON..= authType]
+              (Prelude.catMaybes
+                 [(JSON..=) "CognitoConfig" Prelude.<$> cognitoConfig,
+                  (JSON..=) "LambdaAuthorizerConfig"
+                    Prelude.<$> lambdaAuthorizerConfig,
+                  (JSON..=) "OpenIDConnectConfig" Prelude.<$> openIDConnectConfig])))
+instance Property "AuthType" AuthProviderProperty where
+  type PropertyType "AuthType" AuthProviderProperty = Value Prelude.Text
+  set newValue AuthProviderProperty {..}
+    = AuthProviderProperty {authType = newValue, ..}
+instance Property "CognitoConfig" AuthProviderProperty where
+  type PropertyType "CognitoConfig" AuthProviderProperty = CognitoConfigProperty
+  set newValue AuthProviderProperty {..}
+    = AuthProviderProperty {cognitoConfig = Prelude.pure newValue, ..}
+instance Property "LambdaAuthorizerConfig" AuthProviderProperty where
+  type PropertyType "LambdaAuthorizerConfig" AuthProviderProperty = LambdaAuthorizerConfigProperty
+  set newValue AuthProviderProperty {..}
+    = AuthProviderProperty
+        {lambdaAuthorizerConfig = Prelude.pure newValue, ..}
+instance Property "OpenIDConnectConfig" AuthProviderProperty where
+  type PropertyType "OpenIDConnectConfig" AuthProviderProperty = OpenIDConnectConfigProperty
+  set newValue AuthProviderProperty {..}
+    = AuthProviderProperty
+        {openIDConnectConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/Api/AuthProviderProperty.hs-boot b/gen/Stratosphere/AppSync/Api/AuthProviderProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api/AuthProviderProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.Api.AuthProviderProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AuthProviderProperty :: Prelude.Type
+instance ToResourceProperties AuthProviderProperty
+instance Prelude.Eq AuthProviderProperty
+instance Prelude.Show AuthProviderProperty
+instance JSON.ToJSON AuthProviderProperty
diff --git a/gen/Stratosphere/AppSync/Api/CognitoConfigProperty.hs b/gen/Stratosphere/AppSync/Api/CognitoConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api/CognitoConfigProperty.hs
@@ -0,0 +1,55 @@
+module Stratosphere.AppSync.Api.CognitoConfigProperty (
+        CognitoConfigProperty(..), mkCognitoConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CognitoConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-cognitoconfig.html>
+    CognitoConfigProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-cognitoconfig.html#cfn-appsync-api-cognitoconfig-appidclientregex>
+                           appIdClientRegex :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-cognitoconfig.html#cfn-appsync-api-cognitoconfig-awsregion>
+                           awsRegion :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-cognitoconfig.html#cfn-appsync-api-cognitoconfig-userpoolid>
+                           userPoolId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCognitoConfigProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> CognitoConfigProperty
+mkCognitoConfigProperty awsRegion userPoolId
+  = CognitoConfigProperty
+      {haddock_workaround_ = (), awsRegion = awsRegion,
+       userPoolId = userPoolId, appIdClientRegex = Prelude.Nothing}
+instance ToResourceProperties CognitoConfigProperty where
+  toResourceProperties CognitoConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::Api.CognitoConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AwsRegion" JSON..= awsRegion, "UserPoolId" JSON..= userPoolId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AppIdClientRegex" Prelude.<$> appIdClientRegex]))}
+instance JSON.ToJSON CognitoConfigProperty where
+  toJSON CognitoConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AwsRegion" JSON..= awsRegion, "UserPoolId" JSON..= userPoolId]
+              (Prelude.catMaybes
+                 [(JSON..=) "AppIdClientRegex" Prelude.<$> appIdClientRegex])))
+instance Property "AppIdClientRegex" CognitoConfigProperty where
+  type PropertyType "AppIdClientRegex" CognitoConfigProperty = Value Prelude.Text
+  set newValue CognitoConfigProperty {..}
+    = CognitoConfigProperty
+        {appIdClientRegex = Prelude.pure newValue, ..}
+instance Property "AwsRegion" CognitoConfigProperty where
+  type PropertyType "AwsRegion" CognitoConfigProperty = Value Prelude.Text
+  set newValue CognitoConfigProperty {..}
+    = CognitoConfigProperty {awsRegion = newValue, ..}
+instance Property "UserPoolId" CognitoConfigProperty where
+  type PropertyType "UserPoolId" CognitoConfigProperty = Value Prelude.Text
+  set newValue CognitoConfigProperty {..}
+    = CognitoConfigProperty {userPoolId = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/Api/CognitoConfigProperty.hs-boot b/gen/Stratosphere/AppSync/Api/CognitoConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api/CognitoConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.Api.CognitoConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CognitoConfigProperty :: Prelude.Type
+instance ToResourceProperties CognitoConfigProperty
+instance Prelude.Eq CognitoConfigProperty
+instance Prelude.Show CognitoConfigProperty
+instance JSON.ToJSON CognitoConfigProperty
diff --git a/gen/Stratosphere/AppSync/Api/DnsMapProperty.hs b/gen/Stratosphere/AppSync/Api/DnsMapProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api/DnsMapProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.AppSync.Api.DnsMapProperty (
+        DnsMapProperty(..), mkDnsMapProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DnsMapProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-dnsmap.html>
+    DnsMapProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-dnsmap.html#cfn-appsync-api-dnsmap-http>
+                    http :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-dnsmap.html#cfn-appsync-api-dnsmap-realtime>
+                    realtime :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDnsMapProperty :: DnsMapProperty
+mkDnsMapProperty
+  = DnsMapProperty
+      {haddock_workaround_ = (), http = Prelude.Nothing,
+       realtime = Prelude.Nothing}
+instance ToResourceProperties DnsMapProperty where
+  toResourceProperties DnsMapProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::Api.DnsMap",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Http" Prelude.<$> http,
+                            (JSON..=) "Realtime" Prelude.<$> realtime])}
+instance JSON.ToJSON DnsMapProperty where
+  toJSON DnsMapProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Http" Prelude.<$> http,
+               (JSON..=) "Realtime" Prelude.<$> realtime]))
+instance Property "Http" DnsMapProperty where
+  type PropertyType "Http" DnsMapProperty = Value Prelude.Text
+  set newValue DnsMapProperty {..}
+    = DnsMapProperty {http = Prelude.pure newValue, ..}
+instance Property "Realtime" DnsMapProperty where
+  type PropertyType "Realtime" DnsMapProperty = Value Prelude.Text
+  set newValue DnsMapProperty {..}
+    = DnsMapProperty {realtime = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/Api/DnsMapProperty.hs-boot b/gen/Stratosphere/AppSync/Api/DnsMapProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api/DnsMapProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.Api.DnsMapProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DnsMapProperty :: Prelude.Type
+instance ToResourceProperties DnsMapProperty
+instance Prelude.Eq DnsMapProperty
+instance Prelude.Show DnsMapProperty
+instance JSON.ToJSON DnsMapProperty
diff --git a/gen/Stratosphere/AppSync/Api/EventConfigProperty.hs b/gen/Stratosphere/AppSync/Api/EventConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api/EventConfigProperty.hs
@@ -0,0 +1,81 @@
+module Stratosphere.AppSync.Api.EventConfigProperty (
+        module Exports, EventConfigProperty(..), mkEventConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.Api.AuthModeProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.Api.AuthProviderProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.Api.EventLogConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data EventConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-eventconfig.html>
+    EventConfigProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-eventconfig.html#cfn-appsync-api-eventconfig-authproviders>
+                         authProviders :: [AuthProviderProperty],
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-eventconfig.html#cfn-appsync-api-eventconfig-connectionauthmodes>
+                         connectionAuthModes :: [AuthModeProperty],
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-eventconfig.html#cfn-appsync-api-eventconfig-defaultpublishauthmodes>
+                         defaultPublishAuthModes :: [AuthModeProperty],
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-eventconfig.html#cfn-appsync-api-eventconfig-defaultsubscribeauthmodes>
+                         defaultSubscribeAuthModes :: [AuthModeProperty],
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-eventconfig.html#cfn-appsync-api-eventconfig-logconfig>
+                         logConfig :: (Prelude.Maybe EventLogConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEventConfigProperty ::
+  [AuthProviderProperty]
+  -> [AuthModeProperty]
+     -> [AuthModeProperty] -> [AuthModeProperty] -> EventConfigProperty
+mkEventConfigProperty
+  authProviders
+  connectionAuthModes
+  defaultPublishAuthModes
+  defaultSubscribeAuthModes
+  = EventConfigProperty
+      {haddock_workaround_ = (), authProviders = authProviders,
+       connectionAuthModes = connectionAuthModes,
+       defaultPublishAuthModes = defaultPublishAuthModes,
+       defaultSubscribeAuthModes = defaultSubscribeAuthModes,
+       logConfig = Prelude.Nothing}
+instance ToResourceProperties EventConfigProperty where
+  toResourceProperties EventConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::Api.EventConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AuthProviders" JSON..= authProviders,
+                            "ConnectionAuthModes" JSON..= connectionAuthModes,
+                            "DefaultPublishAuthModes" JSON..= defaultPublishAuthModes,
+                            "DefaultSubscribeAuthModes" JSON..= defaultSubscribeAuthModes]
+                           (Prelude.catMaybes [(JSON..=) "LogConfig" Prelude.<$> logConfig]))}
+instance JSON.ToJSON EventConfigProperty where
+  toJSON EventConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AuthProviders" JSON..= authProviders,
+               "ConnectionAuthModes" JSON..= connectionAuthModes,
+               "DefaultPublishAuthModes" JSON..= defaultPublishAuthModes,
+               "DefaultSubscribeAuthModes" JSON..= defaultSubscribeAuthModes]
+              (Prelude.catMaybes [(JSON..=) "LogConfig" Prelude.<$> logConfig])))
+instance Property "AuthProviders" EventConfigProperty where
+  type PropertyType "AuthProviders" EventConfigProperty = [AuthProviderProperty]
+  set newValue EventConfigProperty {..}
+    = EventConfigProperty {authProviders = newValue, ..}
+instance Property "ConnectionAuthModes" EventConfigProperty where
+  type PropertyType "ConnectionAuthModes" EventConfigProperty = [AuthModeProperty]
+  set newValue EventConfigProperty {..}
+    = EventConfigProperty {connectionAuthModes = newValue, ..}
+instance Property "DefaultPublishAuthModes" EventConfigProperty where
+  type PropertyType "DefaultPublishAuthModes" EventConfigProperty = [AuthModeProperty]
+  set newValue EventConfigProperty {..}
+    = EventConfigProperty {defaultPublishAuthModes = newValue, ..}
+instance Property "DefaultSubscribeAuthModes" EventConfigProperty where
+  type PropertyType "DefaultSubscribeAuthModes" EventConfigProperty = [AuthModeProperty]
+  set newValue EventConfigProperty {..}
+    = EventConfigProperty {defaultSubscribeAuthModes = newValue, ..}
+instance Property "LogConfig" EventConfigProperty where
+  type PropertyType "LogConfig" EventConfigProperty = EventLogConfigProperty
+  set newValue EventConfigProperty {..}
+    = EventConfigProperty {logConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/Api/EventConfigProperty.hs-boot b/gen/Stratosphere/AppSync/Api/EventConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api/EventConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.Api.EventConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EventConfigProperty :: Prelude.Type
+instance ToResourceProperties EventConfigProperty
+instance Prelude.Eq EventConfigProperty
+instance Prelude.Show EventConfigProperty
+instance JSON.ToJSON EventConfigProperty
diff --git a/gen/Stratosphere/AppSync/Api/EventLogConfigProperty.hs b/gen/Stratosphere/AppSync/Api/EventLogConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api/EventLogConfigProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.AppSync.Api.EventLogConfigProperty (
+        EventLogConfigProperty(..), mkEventLogConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EventLogConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-eventlogconfig.html>
+    EventLogConfigProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-eventlogconfig.html#cfn-appsync-api-eventlogconfig-cloudwatchlogsrolearn>
+                            cloudWatchLogsRoleArn :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-eventlogconfig.html#cfn-appsync-api-eventlogconfig-loglevel>
+                            logLevel :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEventLogConfigProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> EventLogConfigProperty
+mkEventLogConfigProperty cloudWatchLogsRoleArn logLevel
+  = EventLogConfigProperty
+      {haddock_workaround_ = (),
+       cloudWatchLogsRoleArn = cloudWatchLogsRoleArn, logLevel = logLevel}
+instance ToResourceProperties EventLogConfigProperty where
+  toResourceProperties EventLogConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::Api.EventLogConfig",
+         supportsTags = Prelude.False,
+         properties = ["CloudWatchLogsRoleArn"
+                         JSON..= cloudWatchLogsRoleArn,
+                       "LogLevel" JSON..= logLevel]}
+instance JSON.ToJSON EventLogConfigProperty where
+  toJSON EventLogConfigProperty {..}
+    = JSON.object
+        ["CloudWatchLogsRoleArn" JSON..= cloudWatchLogsRoleArn,
+         "LogLevel" JSON..= logLevel]
+instance Property "CloudWatchLogsRoleArn" EventLogConfigProperty where
+  type PropertyType "CloudWatchLogsRoleArn" EventLogConfigProperty = Value Prelude.Text
+  set newValue EventLogConfigProperty {..}
+    = EventLogConfigProperty {cloudWatchLogsRoleArn = newValue, ..}
+instance Property "LogLevel" EventLogConfigProperty where
+  type PropertyType "LogLevel" EventLogConfigProperty = Value Prelude.Text
+  set newValue EventLogConfigProperty {..}
+    = EventLogConfigProperty {logLevel = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/Api/EventLogConfigProperty.hs-boot b/gen/Stratosphere/AppSync/Api/EventLogConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api/EventLogConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.Api.EventLogConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EventLogConfigProperty :: Prelude.Type
+instance ToResourceProperties EventLogConfigProperty
+instance Prelude.Eq EventLogConfigProperty
+instance Prelude.Show EventLogConfigProperty
+instance JSON.ToJSON EventLogConfigProperty
diff --git a/gen/Stratosphere/AppSync/Api/LambdaAuthorizerConfigProperty.hs b/gen/Stratosphere/AppSync/Api/LambdaAuthorizerConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api/LambdaAuthorizerConfigProperty.hs
@@ -0,0 +1,64 @@
+module Stratosphere.AppSync.Api.LambdaAuthorizerConfigProperty (
+        LambdaAuthorizerConfigProperty(..),
+        mkLambdaAuthorizerConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LambdaAuthorizerConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-lambdaauthorizerconfig.html>
+    LambdaAuthorizerConfigProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-lambdaauthorizerconfig.html#cfn-appsync-api-lambdaauthorizerconfig-authorizerresultttlinseconds>
+                                    authorizerResultTtlInSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-lambdaauthorizerconfig.html#cfn-appsync-api-lambdaauthorizerconfig-authorizeruri>
+                                    authorizerUri :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-lambdaauthorizerconfig.html#cfn-appsync-api-lambdaauthorizerconfig-identityvalidationexpression>
+                                    identityValidationExpression :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLambdaAuthorizerConfigProperty ::
+  Value Prelude.Text -> LambdaAuthorizerConfigProperty
+mkLambdaAuthorizerConfigProperty authorizerUri
+  = LambdaAuthorizerConfigProperty
+      {haddock_workaround_ = (), authorizerUri = authorizerUri,
+       authorizerResultTtlInSeconds = Prelude.Nothing,
+       identityValidationExpression = Prelude.Nothing}
+instance ToResourceProperties LambdaAuthorizerConfigProperty where
+  toResourceProperties LambdaAuthorizerConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::Api.LambdaAuthorizerConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AuthorizerUri" JSON..= authorizerUri]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AuthorizerResultTtlInSeconds"
+                                 Prelude.<$> authorizerResultTtlInSeconds,
+                               (JSON..=) "IdentityValidationExpression"
+                                 Prelude.<$> identityValidationExpression]))}
+instance JSON.ToJSON LambdaAuthorizerConfigProperty where
+  toJSON LambdaAuthorizerConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AuthorizerUri" JSON..= authorizerUri]
+              (Prelude.catMaybes
+                 [(JSON..=) "AuthorizerResultTtlInSeconds"
+                    Prelude.<$> authorizerResultTtlInSeconds,
+                  (JSON..=) "IdentityValidationExpression"
+                    Prelude.<$> identityValidationExpression])))
+instance Property "AuthorizerResultTtlInSeconds" LambdaAuthorizerConfigProperty where
+  type PropertyType "AuthorizerResultTtlInSeconds" LambdaAuthorizerConfigProperty = Value Prelude.Integer
+  set newValue LambdaAuthorizerConfigProperty {..}
+    = LambdaAuthorizerConfigProperty
+        {authorizerResultTtlInSeconds = Prelude.pure newValue, ..}
+instance Property "AuthorizerUri" LambdaAuthorizerConfigProperty where
+  type PropertyType "AuthorizerUri" LambdaAuthorizerConfigProperty = Value Prelude.Text
+  set newValue LambdaAuthorizerConfigProperty {..}
+    = LambdaAuthorizerConfigProperty {authorizerUri = newValue, ..}
+instance Property "IdentityValidationExpression" LambdaAuthorizerConfigProperty where
+  type PropertyType "IdentityValidationExpression" LambdaAuthorizerConfigProperty = Value Prelude.Text
+  set newValue LambdaAuthorizerConfigProperty {..}
+    = LambdaAuthorizerConfigProperty
+        {identityValidationExpression = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/Api/LambdaAuthorizerConfigProperty.hs-boot b/gen/Stratosphere/AppSync/Api/LambdaAuthorizerConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api/LambdaAuthorizerConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.Api.LambdaAuthorizerConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LambdaAuthorizerConfigProperty :: Prelude.Type
+instance ToResourceProperties LambdaAuthorizerConfigProperty
+instance Prelude.Eq LambdaAuthorizerConfigProperty
+instance Prelude.Show LambdaAuthorizerConfigProperty
+instance JSON.ToJSON LambdaAuthorizerConfigProperty
diff --git a/gen/Stratosphere/AppSync/Api/OpenIDConnectConfigProperty.hs b/gen/Stratosphere/AppSync/Api/OpenIDConnectConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api/OpenIDConnectConfigProperty.hs
@@ -0,0 +1,66 @@
+module Stratosphere.AppSync.Api.OpenIDConnectConfigProperty (
+        OpenIDConnectConfigProperty(..), mkOpenIDConnectConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OpenIDConnectConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-openidconnectconfig.html>
+    OpenIDConnectConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-openidconnectconfig.html#cfn-appsync-api-openidconnectconfig-authttl>
+                                 authTTL :: (Prelude.Maybe (Value Prelude.Double)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-openidconnectconfig.html#cfn-appsync-api-openidconnectconfig-clientid>
+                                 clientId :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-openidconnectconfig.html#cfn-appsync-api-openidconnectconfig-iatttl>
+                                 iatTTL :: (Prelude.Maybe (Value Prelude.Double)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-api-openidconnectconfig.html#cfn-appsync-api-openidconnectconfig-issuer>
+                                 issuer :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOpenIDConnectConfigProperty ::
+  Value Prelude.Text -> OpenIDConnectConfigProperty
+mkOpenIDConnectConfigProperty issuer
+  = OpenIDConnectConfigProperty
+      {haddock_workaround_ = (), issuer = issuer,
+       authTTL = Prelude.Nothing, clientId = Prelude.Nothing,
+       iatTTL = Prelude.Nothing}
+instance ToResourceProperties OpenIDConnectConfigProperty where
+  toResourceProperties OpenIDConnectConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::Api.OpenIDConnectConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Issuer" JSON..= issuer]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AuthTTL" Prelude.<$> authTTL,
+                               (JSON..=) "ClientId" Prelude.<$> clientId,
+                               (JSON..=) "IatTTL" Prelude.<$> iatTTL]))}
+instance JSON.ToJSON OpenIDConnectConfigProperty where
+  toJSON OpenIDConnectConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Issuer" JSON..= issuer]
+              (Prelude.catMaybes
+                 [(JSON..=) "AuthTTL" Prelude.<$> authTTL,
+                  (JSON..=) "ClientId" Prelude.<$> clientId,
+                  (JSON..=) "IatTTL" Prelude.<$> iatTTL])))
+instance Property "AuthTTL" OpenIDConnectConfigProperty where
+  type PropertyType "AuthTTL" OpenIDConnectConfigProperty = Value Prelude.Double
+  set newValue OpenIDConnectConfigProperty {..}
+    = OpenIDConnectConfigProperty {authTTL = Prelude.pure newValue, ..}
+instance Property "ClientId" OpenIDConnectConfigProperty where
+  type PropertyType "ClientId" OpenIDConnectConfigProperty = Value Prelude.Text
+  set newValue OpenIDConnectConfigProperty {..}
+    = OpenIDConnectConfigProperty
+        {clientId = Prelude.pure newValue, ..}
+instance Property "IatTTL" OpenIDConnectConfigProperty where
+  type PropertyType "IatTTL" OpenIDConnectConfigProperty = Value Prelude.Double
+  set newValue OpenIDConnectConfigProperty {..}
+    = OpenIDConnectConfigProperty {iatTTL = Prelude.pure newValue, ..}
+instance Property "Issuer" OpenIDConnectConfigProperty where
+  type PropertyType "Issuer" OpenIDConnectConfigProperty = Value Prelude.Text
+  set newValue OpenIDConnectConfigProperty {..}
+    = OpenIDConnectConfigProperty {issuer = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/Api/OpenIDConnectConfigProperty.hs-boot b/gen/Stratosphere/AppSync/Api/OpenIDConnectConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Api/OpenIDConnectConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.Api.OpenIDConnectConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OpenIDConnectConfigProperty :: Prelude.Type
+instance ToResourceProperties OpenIDConnectConfigProperty
+instance Prelude.Eq OpenIDConnectConfigProperty
+instance Prelude.Show OpenIDConnectConfigProperty
+instance JSON.ToJSON OpenIDConnectConfigProperty
diff --git a/gen/Stratosphere/AppSync/ApiCache.hs b/gen/Stratosphere/AppSync/ApiCache.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/ApiCache.hs
@@ -0,0 +1,89 @@
+module Stratosphere.AppSync.ApiCache (
+        ApiCache(..), mkApiCache
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ApiCache
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apicache.html>
+    ApiCache {haddock_workaround_ :: (),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apicache.html#cfn-appsync-apicache-apicachingbehavior>
+              apiCachingBehavior :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apicache.html#cfn-appsync-apicache-apiid>
+              apiId :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apicache.html#cfn-appsync-apicache-atrestencryptionenabled>
+              atRestEncryptionEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apicache.html#cfn-appsync-apicache-healthmetricsconfig>
+              healthMetricsConfig :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apicache.html#cfn-appsync-apicache-transitencryptionenabled>
+              transitEncryptionEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apicache.html#cfn-appsync-apicache-ttl>
+              ttl :: (Value Prelude.Double),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apicache.html#cfn-appsync-apicache-type>
+              type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkApiCache ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Double -> Value Prelude.Text -> ApiCache
+mkApiCache apiCachingBehavior apiId ttl type'
+  = ApiCache
+      {haddock_workaround_ = (), apiCachingBehavior = apiCachingBehavior,
+       apiId = apiId, ttl = ttl, type' = type',
+       atRestEncryptionEnabled = Prelude.Nothing,
+       healthMetricsConfig = Prelude.Nothing,
+       transitEncryptionEnabled = Prelude.Nothing}
+instance ToResourceProperties ApiCache where
+  toResourceProperties ApiCache {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::ApiCache", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ApiCachingBehavior" JSON..= apiCachingBehavior,
+                            "ApiId" JSON..= apiId, "Ttl" JSON..= ttl, "Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "AtRestEncryptionEnabled"
+                                 Prelude.<$> atRestEncryptionEnabled,
+                               (JSON..=) "HealthMetricsConfig" Prelude.<$> healthMetricsConfig,
+                               (JSON..=) "TransitEncryptionEnabled"
+                                 Prelude.<$> transitEncryptionEnabled]))}
+instance JSON.ToJSON ApiCache where
+  toJSON ApiCache {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ApiCachingBehavior" JSON..= apiCachingBehavior,
+               "ApiId" JSON..= apiId, "Ttl" JSON..= ttl, "Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "AtRestEncryptionEnabled"
+                    Prelude.<$> atRestEncryptionEnabled,
+                  (JSON..=) "HealthMetricsConfig" Prelude.<$> healthMetricsConfig,
+                  (JSON..=) "TransitEncryptionEnabled"
+                    Prelude.<$> transitEncryptionEnabled])))
+instance Property "ApiCachingBehavior" ApiCache where
+  type PropertyType "ApiCachingBehavior" ApiCache = Value Prelude.Text
+  set newValue ApiCache {..}
+    = ApiCache {apiCachingBehavior = newValue, ..}
+instance Property "ApiId" ApiCache where
+  type PropertyType "ApiId" ApiCache = Value Prelude.Text
+  set newValue ApiCache {..} = ApiCache {apiId = newValue, ..}
+instance Property "AtRestEncryptionEnabled" ApiCache where
+  type PropertyType "AtRestEncryptionEnabled" ApiCache = Value Prelude.Bool
+  set newValue ApiCache {..}
+    = ApiCache {atRestEncryptionEnabled = Prelude.pure newValue, ..}
+instance Property "HealthMetricsConfig" ApiCache where
+  type PropertyType "HealthMetricsConfig" ApiCache = Value Prelude.Text
+  set newValue ApiCache {..}
+    = ApiCache {healthMetricsConfig = Prelude.pure newValue, ..}
+instance Property "TransitEncryptionEnabled" ApiCache where
+  type PropertyType "TransitEncryptionEnabled" ApiCache = Value Prelude.Bool
+  set newValue ApiCache {..}
+    = ApiCache {transitEncryptionEnabled = Prelude.pure newValue, ..}
+instance Property "Ttl" ApiCache where
+  type PropertyType "Ttl" ApiCache = Value Prelude.Double
+  set newValue ApiCache {..} = ApiCache {ttl = newValue, ..}
+instance Property "Type" ApiCache where
+  type PropertyType "Type" ApiCache = Value Prelude.Text
+  set newValue ApiCache {..} = ApiCache {type' = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/ApiKey.hs b/gen/Stratosphere/AppSync/ApiKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/ApiKey.hs
@@ -0,0 +1,62 @@
+module Stratosphere.AppSync.ApiKey (
+        ApiKey(..), mkApiKey
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ApiKey
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apikey.html>
+    ApiKey {haddock_workaround_ :: (),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apikey.html#cfn-appsync-apikey-apiid>
+            apiId :: (Value Prelude.Text),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apikey.html#cfn-appsync-apikey-apikeyid>
+            apiKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apikey.html#cfn-appsync-apikey-description>
+            description :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apikey.html#cfn-appsync-apikey-expires>
+            expires :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkApiKey :: Value Prelude.Text -> ApiKey
+mkApiKey apiId
+  = ApiKey
+      {haddock_workaround_ = (), apiId = apiId,
+       apiKeyId = Prelude.Nothing, description = Prelude.Nothing,
+       expires = Prelude.Nothing}
+instance ToResourceProperties ApiKey where
+  toResourceProperties ApiKey {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::ApiKey", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ApiId" JSON..= apiId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ApiKeyId" Prelude.<$> apiKeyId,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "Expires" Prelude.<$> expires]))}
+instance JSON.ToJSON ApiKey where
+  toJSON ApiKey {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ApiId" JSON..= apiId]
+              (Prelude.catMaybes
+                 [(JSON..=) "ApiKeyId" Prelude.<$> apiKeyId,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "Expires" Prelude.<$> expires])))
+instance Property "ApiId" ApiKey where
+  type PropertyType "ApiId" ApiKey = Value Prelude.Text
+  set newValue ApiKey {..} = ApiKey {apiId = newValue, ..}
+instance Property "ApiKeyId" ApiKey where
+  type PropertyType "ApiKeyId" ApiKey = Value Prelude.Text
+  set newValue ApiKey {..}
+    = ApiKey {apiKeyId = Prelude.pure newValue, ..}
+instance Property "Description" ApiKey where
+  type PropertyType "Description" ApiKey = Value Prelude.Text
+  set newValue ApiKey {..}
+    = ApiKey {description = Prelude.pure newValue, ..}
+instance Property "Expires" ApiKey where
+  type PropertyType "Expires" ApiKey = Value Prelude.Double
+  set newValue ApiKey {..}
+    = ApiKey {expires = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/ChannelNamespace.hs b/gen/Stratosphere/AppSync/ChannelNamespace.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/ChannelNamespace.hs
@@ -0,0 +1,100 @@
+module Stratosphere.AppSync.ChannelNamespace (
+        module Exports, ChannelNamespace(..), mkChannelNamespace
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.ChannelNamespace.AuthModeProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.ChannelNamespace.HandlerConfigsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data ChannelNamespace
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-channelnamespace.html>
+    ChannelNamespace {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-channelnamespace.html#cfn-appsync-channelnamespace-apiid>
+                      apiId :: (Value Prelude.Text),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-channelnamespace.html#cfn-appsync-channelnamespace-codehandlers>
+                      codeHandlers :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-channelnamespace.html#cfn-appsync-channelnamespace-codes3location>
+                      codeS3Location :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-channelnamespace.html#cfn-appsync-channelnamespace-handlerconfigs>
+                      handlerConfigs :: (Prelude.Maybe HandlerConfigsProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-channelnamespace.html#cfn-appsync-channelnamespace-name>
+                      name :: (Value Prelude.Text),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-channelnamespace.html#cfn-appsync-channelnamespace-publishauthmodes>
+                      publishAuthModes :: (Prelude.Maybe [AuthModeProperty]),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-channelnamespace.html#cfn-appsync-channelnamespace-subscribeauthmodes>
+                      subscribeAuthModes :: (Prelude.Maybe [AuthModeProperty]),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-channelnamespace.html#cfn-appsync-channelnamespace-tags>
+                      tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkChannelNamespace ::
+  Value Prelude.Text -> Value Prelude.Text -> ChannelNamespace
+mkChannelNamespace apiId name
+  = ChannelNamespace
+      {haddock_workaround_ = (), apiId = apiId, name = name,
+       codeHandlers = Prelude.Nothing, codeS3Location = Prelude.Nothing,
+       handlerConfigs = Prelude.Nothing,
+       publishAuthModes = Prelude.Nothing,
+       subscribeAuthModes = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties ChannelNamespace where
+  toResourceProperties ChannelNamespace {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::ChannelNamespace",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ApiId" JSON..= apiId, "Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CodeHandlers" Prelude.<$> codeHandlers,
+                               (JSON..=) "CodeS3Location" Prelude.<$> codeS3Location,
+                               (JSON..=) "HandlerConfigs" Prelude.<$> handlerConfigs,
+                               (JSON..=) "PublishAuthModes" Prelude.<$> publishAuthModes,
+                               (JSON..=) "SubscribeAuthModes" Prelude.<$> subscribeAuthModes,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON ChannelNamespace where
+  toJSON ChannelNamespace {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ApiId" JSON..= apiId, "Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "CodeHandlers" Prelude.<$> codeHandlers,
+                  (JSON..=) "CodeS3Location" Prelude.<$> codeS3Location,
+                  (JSON..=) "HandlerConfigs" Prelude.<$> handlerConfigs,
+                  (JSON..=) "PublishAuthModes" Prelude.<$> publishAuthModes,
+                  (JSON..=) "SubscribeAuthModes" Prelude.<$> subscribeAuthModes,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "ApiId" ChannelNamespace where
+  type PropertyType "ApiId" ChannelNamespace = Value Prelude.Text
+  set newValue ChannelNamespace {..}
+    = ChannelNamespace {apiId = newValue, ..}
+instance Property "CodeHandlers" ChannelNamespace where
+  type PropertyType "CodeHandlers" ChannelNamespace = Value Prelude.Text
+  set newValue ChannelNamespace {..}
+    = ChannelNamespace {codeHandlers = Prelude.pure newValue, ..}
+instance Property "CodeS3Location" ChannelNamespace where
+  type PropertyType "CodeS3Location" ChannelNamespace = Value Prelude.Text
+  set newValue ChannelNamespace {..}
+    = ChannelNamespace {codeS3Location = Prelude.pure newValue, ..}
+instance Property "HandlerConfigs" ChannelNamespace where
+  type PropertyType "HandlerConfigs" ChannelNamespace = HandlerConfigsProperty
+  set newValue ChannelNamespace {..}
+    = ChannelNamespace {handlerConfigs = Prelude.pure newValue, ..}
+instance Property "Name" ChannelNamespace where
+  type PropertyType "Name" ChannelNamespace = Value Prelude.Text
+  set newValue ChannelNamespace {..}
+    = ChannelNamespace {name = newValue, ..}
+instance Property "PublishAuthModes" ChannelNamespace where
+  type PropertyType "PublishAuthModes" ChannelNamespace = [AuthModeProperty]
+  set newValue ChannelNamespace {..}
+    = ChannelNamespace {publishAuthModes = Prelude.pure newValue, ..}
+instance Property "SubscribeAuthModes" ChannelNamespace where
+  type PropertyType "SubscribeAuthModes" ChannelNamespace = [AuthModeProperty]
+  set newValue ChannelNamespace {..}
+    = ChannelNamespace {subscribeAuthModes = Prelude.pure newValue, ..}
+instance Property "Tags" ChannelNamespace where
+  type PropertyType "Tags" ChannelNamespace = [Tag]
+  set newValue ChannelNamespace {..}
+    = ChannelNamespace {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/ChannelNamespace/AuthModeProperty.hs b/gen/Stratosphere/AppSync/ChannelNamespace/AuthModeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/ChannelNamespace/AuthModeProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.AppSync.ChannelNamespace.AuthModeProperty (
+        AuthModeProperty(..), mkAuthModeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AuthModeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-channelnamespace-authmode.html>
+    AuthModeProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-channelnamespace-authmode.html#cfn-appsync-channelnamespace-authmode-authtype>
+                      authType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAuthModeProperty :: AuthModeProperty
+mkAuthModeProperty
+  = AuthModeProperty
+      {haddock_workaround_ = (), authType = Prelude.Nothing}
+instance ToResourceProperties AuthModeProperty where
+  toResourceProperties AuthModeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::ChannelNamespace.AuthMode",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "AuthType" Prelude.<$> authType])}
+instance JSON.ToJSON AuthModeProperty where
+  toJSON AuthModeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "AuthType" Prelude.<$> authType]))
+instance Property "AuthType" AuthModeProperty where
+  type PropertyType "AuthType" AuthModeProperty = Value Prelude.Text
+  set newValue AuthModeProperty {..}
+    = AuthModeProperty {authType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/ChannelNamespace/AuthModeProperty.hs-boot b/gen/Stratosphere/AppSync/ChannelNamespace/AuthModeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/ChannelNamespace/AuthModeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.ChannelNamespace.AuthModeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AuthModeProperty :: Prelude.Type
+instance ToResourceProperties AuthModeProperty
+instance Prelude.Eq AuthModeProperty
+instance Prelude.Show AuthModeProperty
+instance JSON.ToJSON AuthModeProperty
diff --git a/gen/Stratosphere/AppSync/ChannelNamespace/HandlerConfigProperty.hs b/gen/Stratosphere/AppSync/ChannelNamespace/HandlerConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/ChannelNamespace/HandlerConfigProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.AppSync.ChannelNamespace.HandlerConfigProperty (
+        module Exports, HandlerConfigProperty(..), mkHandlerConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.ChannelNamespace.IntegrationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data HandlerConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-channelnamespace-handlerconfig.html>
+    HandlerConfigProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-channelnamespace-handlerconfig.html#cfn-appsync-channelnamespace-handlerconfig-behavior>
+                           behavior :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-channelnamespace-handlerconfig.html#cfn-appsync-channelnamespace-handlerconfig-integration>
+                           integration :: IntegrationProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHandlerConfigProperty ::
+  Value Prelude.Text -> IntegrationProperty -> HandlerConfigProperty
+mkHandlerConfigProperty behavior integration
+  = HandlerConfigProperty
+      {haddock_workaround_ = (), behavior = behavior,
+       integration = integration}
+instance ToResourceProperties HandlerConfigProperty where
+  toResourceProperties HandlerConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::ChannelNamespace.HandlerConfig",
+         supportsTags = Prelude.False,
+         properties = ["Behavior" JSON..= behavior,
+                       "Integration" JSON..= integration]}
+instance JSON.ToJSON HandlerConfigProperty where
+  toJSON HandlerConfigProperty {..}
+    = JSON.object
+        ["Behavior" JSON..= behavior, "Integration" JSON..= integration]
+instance Property "Behavior" HandlerConfigProperty where
+  type PropertyType "Behavior" HandlerConfigProperty = Value Prelude.Text
+  set newValue HandlerConfigProperty {..}
+    = HandlerConfigProperty {behavior = newValue, ..}
+instance Property "Integration" HandlerConfigProperty where
+  type PropertyType "Integration" HandlerConfigProperty = IntegrationProperty
+  set newValue HandlerConfigProperty {..}
+    = HandlerConfigProperty {integration = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/ChannelNamespace/HandlerConfigProperty.hs-boot b/gen/Stratosphere/AppSync/ChannelNamespace/HandlerConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/ChannelNamespace/HandlerConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.ChannelNamespace.HandlerConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HandlerConfigProperty :: Prelude.Type
+instance ToResourceProperties HandlerConfigProperty
+instance Prelude.Eq HandlerConfigProperty
+instance Prelude.Show HandlerConfigProperty
+instance JSON.ToJSON HandlerConfigProperty
diff --git a/gen/Stratosphere/AppSync/ChannelNamespace/HandlerConfigsProperty.hs b/gen/Stratosphere/AppSync/ChannelNamespace/HandlerConfigsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/ChannelNamespace/HandlerConfigsProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.AppSync.ChannelNamespace.HandlerConfigsProperty (
+        module Exports, HandlerConfigsProperty(..),
+        mkHandlerConfigsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.ChannelNamespace.HandlerConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data HandlerConfigsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-channelnamespace-handlerconfigs.html>
+    HandlerConfigsProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-channelnamespace-handlerconfigs.html#cfn-appsync-channelnamespace-handlerconfigs-onpublish>
+                            onPublish :: (Prelude.Maybe HandlerConfigProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-channelnamespace-handlerconfigs.html#cfn-appsync-channelnamespace-handlerconfigs-onsubscribe>
+                            onSubscribe :: (Prelude.Maybe HandlerConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHandlerConfigsProperty :: HandlerConfigsProperty
+mkHandlerConfigsProperty
+  = HandlerConfigsProperty
+      {haddock_workaround_ = (), onPublish = Prelude.Nothing,
+       onSubscribe = Prelude.Nothing}
+instance ToResourceProperties HandlerConfigsProperty where
+  toResourceProperties HandlerConfigsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::ChannelNamespace.HandlerConfigs",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "OnPublish" Prelude.<$> onPublish,
+                            (JSON..=) "OnSubscribe" Prelude.<$> onSubscribe])}
+instance JSON.ToJSON HandlerConfigsProperty where
+  toJSON HandlerConfigsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "OnPublish" Prelude.<$> onPublish,
+               (JSON..=) "OnSubscribe" Prelude.<$> onSubscribe]))
+instance Property "OnPublish" HandlerConfigsProperty where
+  type PropertyType "OnPublish" HandlerConfigsProperty = HandlerConfigProperty
+  set newValue HandlerConfigsProperty {..}
+    = HandlerConfigsProperty {onPublish = Prelude.pure newValue, ..}
+instance Property "OnSubscribe" HandlerConfigsProperty where
+  type PropertyType "OnSubscribe" HandlerConfigsProperty = HandlerConfigProperty
+  set newValue HandlerConfigsProperty {..}
+    = HandlerConfigsProperty {onSubscribe = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/ChannelNamespace/HandlerConfigsProperty.hs-boot b/gen/Stratosphere/AppSync/ChannelNamespace/HandlerConfigsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/ChannelNamespace/HandlerConfigsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.ChannelNamespace.HandlerConfigsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HandlerConfigsProperty :: Prelude.Type
+instance ToResourceProperties HandlerConfigsProperty
+instance Prelude.Eq HandlerConfigsProperty
+instance Prelude.Show HandlerConfigsProperty
+instance JSON.ToJSON HandlerConfigsProperty
diff --git a/gen/Stratosphere/AppSync/ChannelNamespace/IntegrationProperty.hs b/gen/Stratosphere/AppSync/ChannelNamespace/IntegrationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/ChannelNamespace/IntegrationProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.AppSync.ChannelNamespace.IntegrationProperty (
+        module Exports, IntegrationProperty(..), mkIntegrationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.ChannelNamespace.LambdaConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IntegrationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-channelnamespace-integration.html>
+    IntegrationProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-channelnamespace-integration.html#cfn-appsync-channelnamespace-integration-datasourcename>
+                         dataSourceName :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-channelnamespace-integration.html#cfn-appsync-channelnamespace-integration-lambdaconfig>
+                         lambdaConfig :: (Prelude.Maybe LambdaConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIntegrationProperty :: Value Prelude.Text -> IntegrationProperty
+mkIntegrationProperty dataSourceName
+  = IntegrationProperty
+      {haddock_workaround_ = (), dataSourceName = dataSourceName,
+       lambdaConfig = Prelude.Nothing}
+instance ToResourceProperties IntegrationProperty where
+  toResourceProperties IntegrationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::ChannelNamespace.Integration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DataSourceName" JSON..= dataSourceName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "LambdaConfig" Prelude.<$> lambdaConfig]))}
+instance JSON.ToJSON IntegrationProperty where
+  toJSON IntegrationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DataSourceName" JSON..= dataSourceName]
+              (Prelude.catMaybes
+                 [(JSON..=) "LambdaConfig" Prelude.<$> lambdaConfig])))
+instance Property "DataSourceName" IntegrationProperty where
+  type PropertyType "DataSourceName" IntegrationProperty = Value Prelude.Text
+  set newValue IntegrationProperty {..}
+    = IntegrationProperty {dataSourceName = newValue, ..}
+instance Property "LambdaConfig" IntegrationProperty where
+  type PropertyType "LambdaConfig" IntegrationProperty = LambdaConfigProperty
+  set newValue IntegrationProperty {..}
+    = IntegrationProperty {lambdaConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/ChannelNamespace/IntegrationProperty.hs-boot b/gen/Stratosphere/AppSync/ChannelNamespace/IntegrationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/ChannelNamespace/IntegrationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.ChannelNamespace.IntegrationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IntegrationProperty :: Prelude.Type
+instance ToResourceProperties IntegrationProperty
+instance Prelude.Eq IntegrationProperty
+instance Prelude.Show IntegrationProperty
+instance JSON.ToJSON IntegrationProperty
diff --git a/gen/Stratosphere/AppSync/ChannelNamespace/LambdaConfigProperty.hs b/gen/Stratosphere/AppSync/ChannelNamespace/LambdaConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/ChannelNamespace/LambdaConfigProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.AppSync.ChannelNamespace.LambdaConfigProperty (
+        LambdaConfigProperty(..), mkLambdaConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LambdaConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-channelnamespace-lambdaconfig.html>
+    LambdaConfigProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-channelnamespace-lambdaconfig.html#cfn-appsync-channelnamespace-lambdaconfig-invoketype>
+                          invokeType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLambdaConfigProperty ::
+  Value Prelude.Text -> LambdaConfigProperty
+mkLambdaConfigProperty invokeType
+  = LambdaConfigProperty
+      {haddock_workaround_ = (), invokeType = invokeType}
+instance ToResourceProperties LambdaConfigProperty where
+  toResourceProperties LambdaConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::ChannelNamespace.LambdaConfig",
+         supportsTags = Prelude.False,
+         properties = ["InvokeType" JSON..= invokeType]}
+instance JSON.ToJSON LambdaConfigProperty where
+  toJSON LambdaConfigProperty {..}
+    = JSON.object ["InvokeType" JSON..= invokeType]
+instance Property "InvokeType" LambdaConfigProperty where
+  type PropertyType "InvokeType" LambdaConfigProperty = Value Prelude.Text
+  set newValue LambdaConfigProperty {..}
+    = LambdaConfigProperty {invokeType = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/ChannelNamespace/LambdaConfigProperty.hs-boot b/gen/Stratosphere/AppSync/ChannelNamespace/LambdaConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/ChannelNamespace/LambdaConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.ChannelNamespace.LambdaConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LambdaConfigProperty :: Prelude.Type
+instance ToResourceProperties LambdaConfigProperty
+instance Prelude.Eq LambdaConfigProperty
+instance Prelude.Show LambdaConfigProperty
+instance JSON.ToJSON LambdaConfigProperty
diff --git a/gen/Stratosphere/AppSync/DataSource.hs b/gen/Stratosphere/AppSync/DataSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource.hs
@@ -0,0 +1,138 @@
+module Stratosphere.AppSync.DataSource (
+        module Exports, DataSource(..), mkDataSource
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.DataSource.DynamoDBConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.DataSource.EventBridgeConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.DataSource.HttpConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.DataSource.LambdaConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.DataSource.OpenSearchServiceConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.DataSource.RelationalDatabaseConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DataSource
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html>
+    DataSource {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-apiid>
+                apiId :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-description>
+                description :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-dynamodbconfig>
+                dynamoDBConfig :: (Prelude.Maybe DynamoDBConfigProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-eventbridgeconfig>
+                eventBridgeConfig :: (Prelude.Maybe EventBridgeConfigProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-httpconfig>
+                httpConfig :: (Prelude.Maybe HttpConfigProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-lambdaconfig>
+                lambdaConfig :: (Prelude.Maybe LambdaConfigProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-metricsconfig>
+                metricsConfig :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-name>
+                name :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-opensearchserviceconfig>
+                openSearchServiceConfig :: (Prelude.Maybe OpenSearchServiceConfigProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-relationaldatabaseconfig>
+                relationalDatabaseConfig :: (Prelude.Maybe RelationalDatabaseConfigProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-servicerolearn>
+                serviceRoleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-type>
+                type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDataSource ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> Value Prelude.Text -> DataSource
+mkDataSource apiId name type'
+  = DataSource
+      {haddock_workaround_ = (), apiId = apiId, name = name,
+       type' = type', description = Prelude.Nothing,
+       dynamoDBConfig = Prelude.Nothing,
+       eventBridgeConfig = Prelude.Nothing, httpConfig = Prelude.Nothing,
+       lambdaConfig = Prelude.Nothing, metricsConfig = Prelude.Nothing,
+       openSearchServiceConfig = Prelude.Nothing,
+       relationalDatabaseConfig = Prelude.Nothing,
+       serviceRoleArn = Prelude.Nothing}
+instance ToResourceProperties DataSource where
+  toResourceProperties DataSource {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::DataSource",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ApiId" JSON..= apiId, "Name" JSON..= name, "Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "DynamoDBConfig" Prelude.<$> dynamoDBConfig,
+                               (JSON..=) "EventBridgeConfig" Prelude.<$> eventBridgeConfig,
+                               (JSON..=) "HttpConfig" Prelude.<$> httpConfig,
+                               (JSON..=) "LambdaConfig" Prelude.<$> lambdaConfig,
+                               (JSON..=) "MetricsConfig" Prelude.<$> metricsConfig,
+                               (JSON..=) "OpenSearchServiceConfig"
+                                 Prelude.<$> openSearchServiceConfig,
+                               (JSON..=) "RelationalDatabaseConfig"
+                                 Prelude.<$> relationalDatabaseConfig,
+                               (JSON..=) "ServiceRoleArn" Prelude.<$> serviceRoleArn]))}
+instance JSON.ToJSON DataSource where
+  toJSON DataSource {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ApiId" JSON..= apiId, "Name" JSON..= name, "Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "DynamoDBConfig" Prelude.<$> dynamoDBConfig,
+                  (JSON..=) "EventBridgeConfig" Prelude.<$> eventBridgeConfig,
+                  (JSON..=) "HttpConfig" Prelude.<$> httpConfig,
+                  (JSON..=) "LambdaConfig" Prelude.<$> lambdaConfig,
+                  (JSON..=) "MetricsConfig" Prelude.<$> metricsConfig,
+                  (JSON..=) "OpenSearchServiceConfig"
+                    Prelude.<$> openSearchServiceConfig,
+                  (JSON..=) "RelationalDatabaseConfig"
+                    Prelude.<$> relationalDatabaseConfig,
+                  (JSON..=) "ServiceRoleArn" Prelude.<$> serviceRoleArn])))
+instance Property "ApiId" DataSource where
+  type PropertyType "ApiId" DataSource = Value Prelude.Text
+  set newValue DataSource {..} = DataSource {apiId = newValue, ..}
+instance Property "Description" DataSource where
+  type PropertyType "Description" DataSource = Value Prelude.Text
+  set newValue DataSource {..}
+    = DataSource {description = Prelude.pure newValue, ..}
+instance Property "DynamoDBConfig" DataSource where
+  type PropertyType "DynamoDBConfig" DataSource = DynamoDBConfigProperty
+  set newValue DataSource {..}
+    = DataSource {dynamoDBConfig = Prelude.pure newValue, ..}
+instance Property "EventBridgeConfig" DataSource where
+  type PropertyType "EventBridgeConfig" DataSource = EventBridgeConfigProperty
+  set newValue DataSource {..}
+    = DataSource {eventBridgeConfig = Prelude.pure newValue, ..}
+instance Property "HttpConfig" DataSource where
+  type PropertyType "HttpConfig" DataSource = HttpConfigProperty
+  set newValue DataSource {..}
+    = DataSource {httpConfig = Prelude.pure newValue, ..}
+instance Property "LambdaConfig" DataSource where
+  type PropertyType "LambdaConfig" DataSource = LambdaConfigProperty
+  set newValue DataSource {..}
+    = DataSource {lambdaConfig = Prelude.pure newValue, ..}
+instance Property "MetricsConfig" DataSource where
+  type PropertyType "MetricsConfig" DataSource = Value Prelude.Text
+  set newValue DataSource {..}
+    = DataSource {metricsConfig = Prelude.pure newValue, ..}
+instance Property "Name" DataSource where
+  type PropertyType "Name" DataSource = Value Prelude.Text
+  set newValue DataSource {..} = DataSource {name = newValue, ..}
+instance Property "OpenSearchServiceConfig" DataSource where
+  type PropertyType "OpenSearchServiceConfig" DataSource = OpenSearchServiceConfigProperty
+  set newValue DataSource {..}
+    = DataSource {openSearchServiceConfig = Prelude.pure newValue, ..}
+instance Property "RelationalDatabaseConfig" DataSource where
+  type PropertyType "RelationalDatabaseConfig" DataSource = RelationalDatabaseConfigProperty
+  set newValue DataSource {..}
+    = DataSource {relationalDatabaseConfig = Prelude.pure newValue, ..}
+instance Property "ServiceRoleArn" DataSource where
+  type PropertyType "ServiceRoleArn" DataSource = Value Prelude.Text
+  set newValue DataSource {..}
+    = DataSource {serviceRoleArn = Prelude.pure newValue, ..}
+instance Property "Type" DataSource where
+  type PropertyType "Type" DataSource = Value Prelude.Text
+  set newValue DataSource {..} = DataSource {type' = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/DataSource/AuthorizationConfigProperty.hs b/gen/Stratosphere/AppSync/DataSource/AuthorizationConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/AuthorizationConfigProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.AppSync.DataSource.AuthorizationConfigProperty (
+        module Exports, AuthorizationConfigProperty(..),
+        mkAuthorizationConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.DataSource.AwsIamConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AuthorizationConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-authorizationconfig.html>
+    AuthorizationConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-authorizationconfig.html#cfn-appsync-datasource-authorizationconfig-authorizationtype>
+                                 authorizationType :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-authorizationconfig.html#cfn-appsync-datasource-authorizationconfig-awsiamconfig>
+                                 awsIamConfig :: (Prelude.Maybe AwsIamConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAuthorizationConfigProperty ::
+  Value Prelude.Text -> AuthorizationConfigProperty
+mkAuthorizationConfigProperty authorizationType
+  = AuthorizationConfigProperty
+      {haddock_workaround_ = (), authorizationType = authorizationType,
+       awsIamConfig = Prelude.Nothing}
+instance ToResourceProperties AuthorizationConfigProperty where
+  toResourceProperties AuthorizationConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::DataSource.AuthorizationConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AuthorizationType" JSON..= authorizationType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AwsIamConfig" Prelude.<$> awsIamConfig]))}
+instance JSON.ToJSON AuthorizationConfigProperty where
+  toJSON AuthorizationConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AuthorizationType" JSON..= authorizationType]
+              (Prelude.catMaybes
+                 [(JSON..=) "AwsIamConfig" Prelude.<$> awsIamConfig])))
+instance Property "AuthorizationType" AuthorizationConfigProperty where
+  type PropertyType "AuthorizationType" AuthorizationConfigProperty = Value Prelude.Text
+  set newValue AuthorizationConfigProperty {..}
+    = AuthorizationConfigProperty {authorizationType = newValue, ..}
+instance Property "AwsIamConfig" AuthorizationConfigProperty where
+  type PropertyType "AwsIamConfig" AuthorizationConfigProperty = AwsIamConfigProperty
+  set newValue AuthorizationConfigProperty {..}
+    = AuthorizationConfigProperty
+        {awsIamConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/DataSource/AuthorizationConfigProperty.hs-boot b/gen/Stratosphere/AppSync/DataSource/AuthorizationConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/AuthorizationConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.DataSource.AuthorizationConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AuthorizationConfigProperty :: Prelude.Type
+instance ToResourceProperties AuthorizationConfigProperty
+instance Prelude.Eq AuthorizationConfigProperty
+instance Prelude.Show AuthorizationConfigProperty
+instance JSON.ToJSON AuthorizationConfigProperty
diff --git a/gen/Stratosphere/AppSync/DataSource/AwsIamConfigProperty.hs b/gen/Stratosphere/AppSync/DataSource/AwsIamConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/AwsIamConfigProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.AppSync.DataSource.AwsIamConfigProperty (
+        AwsIamConfigProperty(..), mkAwsIamConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AwsIamConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-awsiamconfig.html>
+    AwsIamConfigProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-awsiamconfig.html#cfn-appsync-datasource-awsiamconfig-signingregion>
+                          signingRegion :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-awsiamconfig.html#cfn-appsync-datasource-awsiamconfig-signingservicename>
+                          signingServiceName :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAwsIamConfigProperty :: AwsIamConfigProperty
+mkAwsIamConfigProperty
+  = AwsIamConfigProperty
+      {haddock_workaround_ = (), signingRegion = Prelude.Nothing,
+       signingServiceName = Prelude.Nothing}
+instance ToResourceProperties AwsIamConfigProperty where
+  toResourceProperties AwsIamConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::DataSource.AwsIamConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "SigningRegion" Prelude.<$> signingRegion,
+                            (JSON..=) "SigningServiceName" Prelude.<$> signingServiceName])}
+instance JSON.ToJSON AwsIamConfigProperty where
+  toJSON AwsIamConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "SigningRegion" Prelude.<$> signingRegion,
+               (JSON..=) "SigningServiceName" Prelude.<$> signingServiceName]))
+instance Property "SigningRegion" AwsIamConfigProperty where
+  type PropertyType "SigningRegion" AwsIamConfigProperty = Value Prelude.Text
+  set newValue AwsIamConfigProperty {..}
+    = AwsIamConfigProperty {signingRegion = Prelude.pure newValue, ..}
+instance Property "SigningServiceName" AwsIamConfigProperty where
+  type PropertyType "SigningServiceName" AwsIamConfigProperty = Value Prelude.Text
+  set newValue AwsIamConfigProperty {..}
+    = AwsIamConfigProperty
+        {signingServiceName = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/DataSource/AwsIamConfigProperty.hs-boot b/gen/Stratosphere/AppSync/DataSource/AwsIamConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/AwsIamConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.DataSource.AwsIamConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AwsIamConfigProperty :: Prelude.Type
+instance ToResourceProperties AwsIamConfigProperty
+instance Prelude.Eq AwsIamConfigProperty
+instance Prelude.Show AwsIamConfigProperty
+instance JSON.ToJSON AwsIamConfigProperty
diff --git a/gen/Stratosphere/AppSync/DataSource/DeltaSyncConfigProperty.hs b/gen/Stratosphere/AppSync/DataSource/DeltaSyncConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/DeltaSyncConfigProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.AppSync.DataSource.DeltaSyncConfigProperty (
+        DeltaSyncConfigProperty(..), mkDeltaSyncConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DeltaSyncConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-deltasyncconfig.html>
+    DeltaSyncConfigProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-deltasyncconfig.html#cfn-appsync-datasource-deltasyncconfig-basetablettl>
+                             baseTableTTL :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-deltasyncconfig.html#cfn-appsync-datasource-deltasyncconfig-deltasynctablename>
+                             deltaSyncTableName :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-deltasyncconfig.html#cfn-appsync-datasource-deltasyncconfig-deltasynctablettl>
+                             deltaSyncTableTTL :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDeltaSyncConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> DeltaSyncConfigProperty
+mkDeltaSyncConfigProperty
+  baseTableTTL
+  deltaSyncTableName
+  deltaSyncTableTTL
+  = DeltaSyncConfigProperty
+      {haddock_workaround_ = (), baseTableTTL = baseTableTTL,
+       deltaSyncTableName = deltaSyncTableName,
+       deltaSyncTableTTL = deltaSyncTableTTL}
+instance ToResourceProperties DeltaSyncConfigProperty where
+  toResourceProperties DeltaSyncConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::DataSource.DeltaSyncConfig",
+         supportsTags = Prelude.False,
+         properties = ["BaseTableTTL" JSON..= baseTableTTL,
+                       "DeltaSyncTableName" JSON..= deltaSyncTableName,
+                       "DeltaSyncTableTTL" JSON..= deltaSyncTableTTL]}
+instance JSON.ToJSON DeltaSyncConfigProperty where
+  toJSON DeltaSyncConfigProperty {..}
+    = JSON.object
+        ["BaseTableTTL" JSON..= baseTableTTL,
+         "DeltaSyncTableName" JSON..= deltaSyncTableName,
+         "DeltaSyncTableTTL" JSON..= deltaSyncTableTTL]
+instance Property "BaseTableTTL" DeltaSyncConfigProperty where
+  type PropertyType "BaseTableTTL" DeltaSyncConfigProperty = Value Prelude.Text
+  set newValue DeltaSyncConfigProperty {..}
+    = DeltaSyncConfigProperty {baseTableTTL = newValue, ..}
+instance Property "DeltaSyncTableName" DeltaSyncConfigProperty where
+  type PropertyType "DeltaSyncTableName" DeltaSyncConfigProperty = Value Prelude.Text
+  set newValue DeltaSyncConfigProperty {..}
+    = DeltaSyncConfigProperty {deltaSyncTableName = newValue, ..}
+instance Property "DeltaSyncTableTTL" DeltaSyncConfigProperty where
+  type PropertyType "DeltaSyncTableTTL" DeltaSyncConfigProperty = Value Prelude.Text
+  set newValue DeltaSyncConfigProperty {..}
+    = DeltaSyncConfigProperty {deltaSyncTableTTL = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/DataSource/DeltaSyncConfigProperty.hs-boot b/gen/Stratosphere/AppSync/DataSource/DeltaSyncConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/DeltaSyncConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.DataSource.DeltaSyncConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DeltaSyncConfigProperty :: Prelude.Type
+instance ToResourceProperties DeltaSyncConfigProperty
+instance Prelude.Eq DeltaSyncConfigProperty
+instance Prelude.Show DeltaSyncConfigProperty
+instance JSON.ToJSON DeltaSyncConfigProperty
diff --git a/gen/Stratosphere/AppSync/DataSource/DynamoDBConfigProperty.hs b/gen/Stratosphere/AppSync/DataSource/DynamoDBConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/DynamoDBConfigProperty.hs
@@ -0,0 +1,76 @@
+module Stratosphere.AppSync.DataSource.DynamoDBConfigProperty (
+        module Exports, DynamoDBConfigProperty(..),
+        mkDynamoDBConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.DataSource.DeltaSyncConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DynamoDBConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-dynamodbconfig.html>
+    DynamoDBConfigProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-dynamodbconfig.html#cfn-appsync-datasource-dynamodbconfig-awsregion>
+                            awsRegion :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-dynamodbconfig.html#cfn-appsync-datasource-dynamodbconfig-deltasyncconfig>
+                            deltaSyncConfig :: (Prelude.Maybe DeltaSyncConfigProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-dynamodbconfig.html#cfn-appsync-datasource-dynamodbconfig-tablename>
+                            tableName :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-dynamodbconfig.html#cfn-appsync-datasource-dynamodbconfig-usecallercredentials>
+                            useCallerCredentials :: (Prelude.Maybe (Value Prelude.Bool)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-dynamodbconfig.html#cfn-appsync-datasource-dynamodbconfig-versioned>
+                            versioned :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDynamoDBConfigProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> DynamoDBConfigProperty
+mkDynamoDBConfigProperty awsRegion tableName
+  = DynamoDBConfigProperty
+      {haddock_workaround_ = (), awsRegion = awsRegion,
+       tableName = tableName, deltaSyncConfig = Prelude.Nothing,
+       useCallerCredentials = Prelude.Nothing,
+       versioned = Prelude.Nothing}
+instance ToResourceProperties DynamoDBConfigProperty where
+  toResourceProperties DynamoDBConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::DataSource.DynamoDBConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AwsRegion" JSON..= awsRegion, "TableName" JSON..= tableName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DeltaSyncConfig" Prelude.<$> deltaSyncConfig,
+                               (JSON..=) "UseCallerCredentials" Prelude.<$> useCallerCredentials,
+                               (JSON..=) "Versioned" Prelude.<$> versioned]))}
+instance JSON.ToJSON DynamoDBConfigProperty where
+  toJSON DynamoDBConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AwsRegion" JSON..= awsRegion, "TableName" JSON..= tableName]
+              (Prelude.catMaybes
+                 [(JSON..=) "DeltaSyncConfig" Prelude.<$> deltaSyncConfig,
+                  (JSON..=) "UseCallerCredentials" Prelude.<$> useCallerCredentials,
+                  (JSON..=) "Versioned" Prelude.<$> versioned])))
+instance Property "AwsRegion" DynamoDBConfigProperty where
+  type PropertyType "AwsRegion" DynamoDBConfigProperty = Value Prelude.Text
+  set newValue DynamoDBConfigProperty {..}
+    = DynamoDBConfigProperty {awsRegion = newValue, ..}
+instance Property "DeltaSyncConfig" DynamoDBConfigProperty where
+  type PropertyType "DeltaSyncConfig" DynamoDBConfigProperty = DeltaSyncConfigProperty
+  set newValue DynamoDBConfigProperty {..}
+    = DynamoDBConfigProperty
+        {deltaSyncConfig = Prelude.pure newValue, ..}
+instance Property "TableName" DynamoDBConfigProperty where
+  type PropertyType "TableName" DynamoDBConfigProperty = Value Prelude.Text
+  set newValue DynamoDBConfigProperty {..}
+    = DynamoDBConfigProperty {tableName = newValue, ..}
+instance Property "UseCallerCredentials" DynamoDBConfigProperty where
+  type PropertyType "UseCallerCredentials" DynamoDBConfigProperty = Value Prelude.Bool
+  set newValue DynamoDBConfigProperty {..}
+    = DynamoDBConfigProperty
+        {useCallerCredentials = Prelude.pure newValue, ..}
+instance Property "Versioned" DynamoDBConfigProperty where
+  type PropertyType "Versioned" DynamoDBConfigProperty = Value Prelude.Bool
+  set newValue DynamoDBConfigProperty {..}
+    = DynamoDBConfigProperty {versioned = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/DataSource/DynamoDBConfigProperty.hs-boot b/gen/Stratosphere/AppSync/DataSource/DynamoDBConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/DynamoDBConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.DataSource.DynamoDBConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DynamoDBConfigProperty :: Prelude.Type
+instance ToResourceProperties DynamoDBConfigProperty
+instance Prelude.Eq DynamoDBConfigProperty
+instance Prelude.Show DynamoDBConfigProperty
+instance JSON.ToJSON DynamoDBConfigProperty
diff --git a/gen/Stratosphere/AppSync/DataSource/EventBridgeConfigProperty.hs b/gen/Stratosphere/AppSync/DataSource/EventBridgeConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/EventBridgeConfigProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.AppSync.DataSource.EventBridgeConfigProperty (
+        EventBridgeConfigProperty(..), mkEventBridgeConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EventBridgeConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-eventbridgeconfig.html>
+    EventBridgeConfigProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-eventbridgeconfig.html#cfn-appsync-datasource-eventbridgeconfig-eventbusarn>
+                               eventBusArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEventBridgeConfigProperty ::
+  Value Prelude.Text -> EventBridgeConfigProperty
+mkEventBridgeConfigProperty eventBusArn
+  = EventBridgeConfigProperty
+      {haddock_workaround_ = (), eventBusArn = eventBusArn}
+instance ToResourceProperties EventBridgeConfigProperty where
+  toResourceProperties EventBridgeConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::DataSource.EventBridgeConfig",
+         supportsTags = Prelude.False,
+         properties = ["EventBusArn" JSON..= eventBusArn]}
+instance JSON.ToJSON EventBridgeConfigProperty where
+  toJSON EventBridgeConfigProperty {..}
+    = JSON.object ["EventBusArn" JSON..= eventBusArn]
+instance Property "EventBusArn" EventBridgeConfigProperty where
+  type PropertyType "EventBusArn" EventBridgeConfigProperty = Value Prelude.Text
+  set newValue EventBridgeConfigProperty {..}
+    = EventBridgeConfigProperty {eventBusArn = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/DataSource/EventBridgeConfigProperty.hs-boot b/gen/Stratosphere/AppSync/DataSource/EventBridgeConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/EventBridgeConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.DataSource.EventBridgeConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EventBridgeConfigProperty :: Prelude.Type
+instance ToResourceProperties EventBridgeConfigProperty
+instance Prelude.Eq EventBridgeConfigProperty
+instance Prelude.Show EventBridgeConfigProperty
+instance JSON.ToJSON EventBridgeConfigProperty
diff --git a/gen/Stratosphere/AppSync/DataSource/HttpConfigProperty.hs b/gen/Stratosphere/AppSync/DataSource/HttpConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/HttpConfigProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.AppSync.DataSource.HttpConfigProperty (
+        module Exports, HttpConfigProperty(..), mkHttpConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.DataSource.AuthorizationConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data HttpConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-httpconfig.html>
+    HttpConfigProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-httpconfig.html#cfn-appsync-datasource-httpconfig-authorizationconfig>
+                        authorizationConfig :: (Prelude.Maybe AuthorizationConfigProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-httpconfig.html#cfn-appsync-datasource-httpconfig-endpoint>
+                        endpoint :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHttpConfigProperty :: Value Prelude.Text -> HttpConfigProperty
+mkHttpConfigProperty endpoint
+  = HttpConfigProperty
+      {haddock_workaround_ = (), endpoint = endpoint,
+       authorizationConfig = Prelude.Nothing}
+instance ToResourceProperties HttpConfigProperty where
+  toResourceProperties HttpConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::DataSource.HttpConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Endpoint" JSON..= endpoint]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AuthorizationConfig"
+                                 Prelude.<$> authorizationConfig]))}
+instance JSON.ToJSON HttpConfigProperty where
+  toJSON HttpConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Endpoint" JSON..= endpoint]
+              (Prelude.catMaybes
+                 [(JSON..=) "AuthorizationConfig"
+                    Prelude.<$> authorizationConfig])))
+instance Property "AuthorizationConfig" HttpConfigProperty where
+  type PropertyType "AuthorizationConfig" HttpConfigProperty = AuthorizationConfigProperty
+  set newValue HttpConfigProperty {..}
+    = HttpConfigProperty
+        {authorizationConfig = Prelude.pure newValue, ..}
+instance Property "Endpoint" HttpConfigProperty where
+  type PropertyType "Endpoint" HttpConfigProperty = Value Prelude.Text
+  set newValue HttpConfigProperty {..}
+    = HttpConfigProperty {endpoint = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/DataSource/HttpConfigProperty.hs-boot b/gen/Stratosphere/AppSync/DataSource/HttpConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/HttpConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.DataSource.HttpConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HttpConfigProperty :: Prelude.Type
+instance ToResourceProperties HttpConfigProperty
+instance Prelude.Eq HttpConfigProperty
+instance Prelude.Show HttpConfigProperty
+instance JSON.ToJSON HttpConfigProperty
diff --git a/gen/Stratosphere/AppSync/DataSource/LambdaConfigProperty.hs b/gen/Stratosphere/AppSync/DataSource/LambdaConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/LambdaConfigProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.AppSync.DataSource.LambdaConfigProperty (
+        LambdaConfigProperty(..), mkLambdaConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LambdaConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-lambdaconfig.html>
+    LambdaConfigProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-lambdaconfig.html#cfn-appsync-datasource-lambdaconfig-lambdafunctionarn>
+                          lambdaFunctionArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLambdaConfigProperty ::
+  Value Prelude.Text -> LambdaConfigProperty
+mkLambdaConfigProperty lambdaFunctionArn
+  = LambdaConfigProperty
+      {haddock_workaround_ = (), lambdaFunctionArn = lambdaFunctionArn}
+instance ToResourceProperties LambdaConfigProperty where
+  toResourceProperties LambdaConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::DataSource.LambdaConfig",
+         supportsTags = Prelude.False,
+         properties = ["LambdaFunctionArn" JSON..= lambdaFunctionArn]}
+instance JSON.ToJSON LambdaConfigProperty where
+  toJSON LambdaConfigProperty {..}
+    = JSON.object ["LambdaFunctionArn" JSON..= lambdaFunctionArn]
+instance Property "LambdaFunctionArn" LambdaConfigProperty where
+  type PropertyType "LambdaFunctionArn" LambdaConfigProperty = Value Prelude.Text
+  set newValue LambdaConfigProperty {..}
+    = LambdaConfigProperty {lambdaFunctionArn = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/DataSource/LambdaConfigProperty.hs-boot b/gen/Stratosphere/AppSync/DataSource/LambdaConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/LambdaConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.DataSource.LambdaConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LambdaConfigProperty :: Prelude.Type
+instance ToResourceProperties LambdaConfigProperty
+instance Prelude.Eq LambdaConfigProperty
+instance Prelude.Show LambdaConfigProperty
+instance JSON.ToJSON LambdaConfigProperty
diff --git a/gen/Stratosphere/AppSync/DataSource/OpenSearchServiceConfigProperty.hs b/gen/Stratosphere/AppSync/DataSource/OpenSearchServiceConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/OpenSearchServiceConfigProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.AppSync.DataSource.OpenSearchServiceConfigProperty (
+        OpenSearchServiceConfigProperty(..),
+        mkOpenSearchServiceConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OpenSearchServiceConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-opensearchserviceconfig.html>
+    OpenSearchServiceConfigProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-opensearchserviceconfig.html#cfn-appsync-datasource-opensearchserviceconfig-awsregion>
+                                     awsRegion :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-opensearchserviceconfig.html#cfn-appsync-datasource-opensearchserviceconfig-endpoint>
+                                     endpoint :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOpenSearchServiceConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> OpenSearchServiceConfigProperty
+mkOpenSearchServiceConfigProperty awsRegion endpoint
+  = OpenSearchServiceConfigProperty
+      {haddock_workaround_ = (), awsRegion = awsRegion,
+       endpoint = endpoint}
+instance ToResourceProperties OpenSearchServiceConfigProperty where
+  toResourceProperties OpenSearchServiceConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::DataSource.OpenSearchServiceConfig",
+         supportsTags = Prelude.False,
+         properties = ["AwsRegion" JSON..= awsRegion,
+                       "Endpoint" JSON..= endpoint]}
+instance JSON.ToJSON OpenSearchServiceConfigProperty where
+  toJSON OpenSearchServiceConfigProperty {..}
+    = JSON.object
+        ["AwsRegion" JSON..= awsRegion, "Endpoint" JSON..= endpoint]
+instance Property "AwsRegion" OpenSearchServiceConfigProperty where
+  type PropertyType "AwsRegion" OpenSearchServiceConfigProperty = Value Prelude.Text
+  set newValue OpenSearchServiceConfigProperty {..}
+    = OpenSearchServiceConfigProperty {awsRegion = newValue, ..}
+instance Property "Endpoint" OpenSearchServiceConfigProperty where
+  type PropertyType "Endpoint" OpenSearchServiceConfigProperty = Value Prelude.Text
+  set newValue OpenSearchServiceConfigProperty {..}
+    = OpenSearchServiceConfigProperty {endpoint = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/DataSource/OpenSearchServiceConfigProperty.hs-boot b/gen/Stratosphere/AppSync/DataSource/OpenSearchServiceConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/OpenSearchServiceConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.DataSource.OpenSearchServiceConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OpenSearchServiceConfigProperty :: Prelude.Type
+instance ToResourceProperties OpenSearchServiceConfigProperty
+instance Prelude.Eq OpenSearchServiceConfigProperty
+instance Prelude.Show OpenSearchServiceConfigProperty
+instance JSON.ToJSON OpenSearchServiceConfigProperty
diff --git a/gen/Stratosphere/AppSync/DataSource/RdsHttpEndpointConfigProperty.hs b/gen/Stratosphere/AppSync/DataSource/RdsHttpEndpointConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/RdsHttpEndpointConfigProperty.hs
@@ -0,0 +1,82 @@
+module Stratosphere.AppSync.DataSource.RdsHttpEndpointConfigProperty (
+        RdsHttpEndpointConfigProperty(..), mkRdsHttpEndpointConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RdsHttpEndpointConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-rdshttpendpointconfig.html>
+    RdsHttpEndpointConfigProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-rdshttpendpointconfig.html#cfn-appsync-datasource-rdshttpendpointconfig-awsregion>
+                                   awsRegion :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-rdshttpendpointconfig.html#cfn-appsync-datasource-rdshttpendpointconfig-awssecretstorearn>
+                                   awsSecretStoreArn :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-rdshttpendpointconfig.html#cfn-appsync-datasource-rdshttpendpointconfig-databasename>
+                                   databaseName :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-rdshttpendpointconfig.html#cfn-appsync-datasource-rdshttpendpointconfig-dbclusteridentifier>
+                                   dbClusterIdentifier :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-rdshttpendpointconfig.html#cfn-appsync-datasource-rdshttpendpointconfig-schema>
+                                   schema :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRdsHttpEndpointConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> RdsHttpEndpointConfigProperty
+mkRdsHttpEndpointConfigProperty
+  awsRegion
+  awsSecretStoreArn
+  dbClusterIdentifier
+  = RdsHttpEndpointConfigProperty
+      {haddock_workaround_ = (), awsRegion = awsRegion,
+       awsSecretStoreArn = awsSecretStoreArn,
+       dbClusterIdentifier = dbClusterIdentifier,
+       databaseName = Prelude.Nothing, schema = Prelude.Nothing}
+instance ToResourceProperties RdsHttpEndpointConfigProperty where
+  toResourceProperties RdsHttpEndpointConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::DataSource.RdsHttpEndpointConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AwsRegion" JSON..= awsRegion,
+                            "AwsSecretStoreArn" JSON..= awsSecretStoreArn,
+                            "DbClusterIdentifier" JSON..= dbClusterIdentifier]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DatabaseName" Prelude.<$> databaseName,
+                               (JSON..=) "Schema" Prelude.<$> schema]))}
+instance JSON.ToJSON RdsHttpEndpointConfigProperty where
+  toJSON RdsHttpEndpointConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AwsRegion" JSON..= awsRegion,
+               "AwsSecretStoreArn" JSON..= awsSecretStoreArn,
+               "DbClusterIdentifier" JSON..= dbClusterIdentifier]
+              (Prelude.catMaybes
+                 [(JSON..=) "DatabaseName" Prelude.<$> databaseName,
+                  (JSON..=) "Schema" Prelude.<$> schema])))
+instance Property "AwsRegion" RdsHttpEndpointConfigProperty where
+  type PropertyType "AwsRegion" RdsHttpEndpointConfigProperty = Value Prelude.Text
+  set newValue RdsHttpEndpointConfigProperty {..}
+    = RdsHttpEndpointConfigProperty {awsRegion = newValue, ..}
+instance Property "AwsSecretStoreArn" RdsHttpEndpointConfigProperty where
+  type PropertyType "AwsSecretStoreArn" RdsHttpEndpointConfigProperty = Value Prelude.Text
+  set newValue RdsHttpEndpointConfigProperty {..}
+    = RdsHttpEndpointConfigProperty {awsSecretStoreArn = newValue, ..}
+instance Property "DatabaseName" RdsHttpEndpointConfigProperty where
+  type PropertyType "DatabaseName" RdsHttpEndpointConfigProperty = Value Prelude.Text
+  set newValue RdsHttpEndpointConfigProperty {..}
+    = RdsHttpEndpointConfigProperty
+        {databaseName = Prelude.pure newValue, ..}
+instance Property "DbClusterIdentifier" RdsHttpEndpointConfigProperty where
+  type PropertyType "DbClusterIdentifier" RdsHttpEndpointConfigProperty = Value Prelude.Text
+  set newValue RdsHttpEndpointConfigProperty {..}
+    = RdsHttpEndpointConfigProperty
+        {dbClusterIdentifier = newValue, ..}
+instance Property "Schema" RdsHttpEndpointConfigProperty where
+  type PropertyType "Schema" RdsHttpEndpointConfigProperty = Value Prelude.Text
+  set newValue RdsHttpEndpointConfigProperty {..}
+    = RdsHttpEndpointConfigProperty
+        {schema = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/DataSource/RdsHttpEndpointConfigProperty.hs-boot b/gen/Stratosphere/AppSync/DataSource/RdsHttpEndpointConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/RdsHttpEndpointConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.DataSource.RdsHttpEndpointConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RdsHttpEndpointConfigProperty :: Prelude.Type
+instance ToResourceProperties RdsHttpEndpointConfigProperty
+instance Prelude.Eq RdsHttpEndpointConfigProperty
+instance Prelude.Show RdsHttpEndpointConfigProperty
+instance JSON.ToJSON RdsHttpEndpointConfigProperty
diff --git a/gen/Stratosphere/AppSync/DataSource/RelationalDatabaseConfigProperty.hs b/gen/Stratosphere/AppSync/DataSource/RelationalDatabaseConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/RelationalDatabaseConfigProperty.hs
@@ -0,0 +1,57 @@
+module Stratosphere.AppSync.DataSource.RelationalDatabaseConfigProperty (
+        module Exports, RelationalDatabaseConfigProperty(..),
+        mkRelationalDatabaseConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.DataSource.RdsHttpEndpointConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RelationalDatabaseConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-relationaldatabaseconfig.html>
+    RelationalDatabaseConfigProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-relationaldatabaseconfig.html#cfn-appsync-datasource-relationaldatabaseconfig-rdshttpendpointconfig>
+                                      rdsHttpEndpointConfig :: (Prelude.Maybe RdsHttpEndpointConfigProperty),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-relationaldatabaseconfig.html#cfn-appsync-datasource-relationaldatabaseconfig-relationaldatabasesourcetype>
+                                      relationalDatabaseSourceType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRelationalDatabaseConfigProperty ::
+  Value Prelude.Text -> RelationalDatabaseConfigProperty
+mkRelationalDatabaseConfigProperty relationalDatabaseSourceType
+  = RelationalDatabaseConfigProperty
+      {haddock_workaround_ = (),
+       relationalDatabaseSourceType = relationalDatabaseSourceType,
+       rdsHttpEndpointConfig = Prelude.Nothing}
+instance ToResourceProperties RelationalDatabaseConfigProperty where
+  toResourceProperties RelationalDatabaseConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::DataSource.RelationalDatabaseConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["RelationalDatabaseSourceType"
+                              JSON..= relationalDatabaseSourceType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "RdsHttpEndpointConfig"
+                                 Prelude.<$> rdsHttpEndpointConfig]))}
+instance JSON.ToJSON RelationalDatabaseConfigProperty where
+  toJSON RelationalDatabaseConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["RelationalDatabaseSourceType"
+                 JSON..= relationalDatabaseSourceType]
+              (Prelude.catMaybes
+                 [(JSON..=) "RdsHttpEndpointConfig"
+                    Prelude.<$> rdsHttpEndpointConfig])))
+instance Property "RdsHttpEndpointConfig" RelationalDatabaseConfigProperty where
+  type PropertyType "RdsHttpEndpointConfig" RelationalDatabaseConfigProperty = RdsHttpEndpointConfigProperty
+  set newValue RelationalDatabaseConfigProperty {..}
+    = RelationalDatabaseConfigProperty
+        {rdsHttpEndpointConfig = Prelude.pure newValue, ..}
+instance Property "RelationalDatabaseSourceType" RelationalDatabaseConfigProperty where
+  type PropertyType "RelationalDatabaseSourceType" RelationalDatabaseConfigProperty = Value Prelude.Text
+  set newValue RelationalDatabaseConfigProperty {..}
+    = RelationalDatabaseConfigProperty
+        {relationalDatabaseSourceType = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/DataSource/RelationalDatabaseConfigProperty.hs-boot b/gen/Stratosphere/AppSync/DataSource/RelationalDatabaseConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DataSource/RelationalDatabaseConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.DataSource.RelationalDatabaseConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RelationalDatabaseConfigProperty :: Prelude.Type
+instance ToResourceProperties RelationalDatabaseConfigProperty
+instance Prelude.Eq RelationalDatabaseConfigProperty
+instance Prelude.Show RelationalDatabaseConfigProperty
+instance JSON.ToJSON RelationalDatabaseConfigProperty
diff --git a/gen/Stratosphere/AppSync/DomainName.hs b/gen/Stratosphere/AppSync/DomainName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DomainName.hs
@@ -0,0 +1,65 @@
+module Stratosphere.AppSync.DomainName (
+        DomainName(..), mkDomainName
+    ) 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 DomainName
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainname.html>
+    DomainName {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainname.html#cfn-appsync-domainname-certificatearn>
+                certificateArn :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainname.html#cfn-appsync-domainname-description>
+                description :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainname.html#cfn-appsync-domainname-domainname>
+                domainName :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainname.html#cfn-appsync-domainname-tags>
+                tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDomainName ::
+  Value Prelude.Text -> Value Prelude.Text -> DomainName
+mkDomainName certificateArn domainName
+  = DomainName
+      {haddock_workaround_ = (), certificateArn = certificateArn,
+       domainName = domainName, description = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties DomainName where
+  toResourceProperties DomainName {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::DomainName", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["CertificateArn" JSON..= certificateArn,
+                            "DomainName" JSON..= domainName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON DomainName where
+  toJSON DomainName {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["CertificateArn" JSON..= certificateArn,
+               "DomainName" JSON..= domainName]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "CertificateArn" DomainName where
+  type PropertyType "CertificateArn" DomainName = Value Prelude.Text
+  set newValue DomainName {..}
+    = DomainName {certificateArn = newValue, ..}
+instance Property "Description" DomainName where
+  type PropertyType "Description" DomainName = Value Prelude.Text
+  set newValue DomainName {..}
+    = DomainName {description = Prelude.pure newValue, ..}
+instance Property "DomainName" DomainName where
+  type PropertyType "DomainName" DomainName = Value Prelude.Text
+  set newValue DomainName {..}
+    = DomainName {domainName = newValue, ..}
+instance Property "Tags" DomainName where
+  type PropertyType "Tags" DomainName = [Tag]
+  set newValue DomainName {..}
+    = DomainName {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/DomainNameApiAssociation.hs b/gen/Stratosphere/AppSync/DomainNameApiAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/DomainNameApiAssociation.hs
@@ -0,0 +1,41 @@
+module Stratosphere.AppSync.DomainNameApiAssociation (
+        DomainNameApiAssociation(..), mkDomainNameApiAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DomainNameApiAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainnameapiassociation.html>
+    DomainNameApiAssociation {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainnameapiassociation.html#cfn-appsync-domainnameapiassociation-apiid>
+                              apiId :: (Value Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainnameapiassociation.html#cfn-appsync-domainnameapiassociation-domainname>
+                              domainName :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDomainNameApiAssociation ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> DomainNameApiAssociation
+mkDomainNameApiAssociation apiId domainName
+  = DomainNameApiAssociation
+      {haddock_workaround_ = (), apiId = apiId, domainName = domainName}
+instance ToResourceProperties DomainNameApiAssociation where
+  toResourceProperties DomainNameApiAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::DomainNameApiAssociation",
+         supportsTags = Prelude.False,
+         properties = ["ApiId" JSON..= apiId,
+                       "DomainName" JSON..= domainName]}
+instance JSON.ToJSON DomainNameApiAssociation where
+  toJSON DomainNameApiAssociation {..}
+    = JSON.object
+        ["ApiId" JSON..= apiId, "DomainName" JSON..= domainName]
+instance Property "ApiId" DomainNameApiAssociation where
+  type PropertyType "ApiId" DomainNameApiAssociation = Value Prelude.Text
+  set newValue DomainNameApiAssociation {..}
+    = DomainNameApiAssociation {apiId = newValue, ..}
+instance Property "DomainName" DomainNameApiAssociation where
+  type PropertyType "DomainName" DomainNameApiAssociation = Value Prelude.Text
+  set newValue DomainNameApiAssociation {..}
+    = DomainNameApiAssociation {domainName = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/FunctionConfiguration.hs b/gen/Stratosphere/AppSync/FunctionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/FunctionConfiguration.hs
@@ -0,0 +1,168 @@
+module Stratosphere.AppSync.FunctionConfiguration (
+        module Exports, FunctionConfiguration(..), mkFunctionConfiguration
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.FunctionConfiguration.AppSyncRuntimeProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.FunctionConfiguration.SyncConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FunctionConfiguration
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html>
+    FunctionConfiguration {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html#cfn-appsync-functionconfiguration-apiid>
+                           apiId :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html#cfn-appsync-functionconfiguration-code>
+                           code :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html#cfn-appsync-functionconfiguration-codes3location>
+                           codeS3Location :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html#cfn-appsync-functionconfiguration-datasourcename>
+                           dataSourceName :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html#cfn-appsync-functionconfiguration-description>
+                           description :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html#cfn-appsync-functionconfiguration-functionversion>
+                           functionVersion :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html#cfn-appsync-functionconfiguration-maxbatchsize>
+                           maxBatchSize :: (Prelude.Maybe (Value Prelude.Integer)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html#cfn-appsync-functionconfiguration-name>
+                           name :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html#cfn-appsync-functionconfiguration-requestmappingtemplate>
+                           requestMappingTemplate :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html#cfn-appsync-functionconfiguration-requestmappingtemplates3location>
+                           requestMappingTemplateS3Location :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html#cfn-appsync-functionconfiguration-responsemappingtemplate>
+                           responseMappingTemplate :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html#cfn-appsync-functionconfiguration-responsemappingtemplates3location>
+                           responseMappingTemplateS3Location :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html#cfn-appsync-functionconfiguration-runtime>
+                           runtime :: (Prelude.Maybe AppSyncRuntimeProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html#cfn-appsync-functionconfiguration-syncconfig>
+                           syncConfig :: (Prelude.Maybe SyncConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFunctionConfiguration ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> FunctionConfiguration
+mkFunctionConfiguration apiId dataSourceName name
+  = FunctionConfiguration
+      {haddock_workaround_ = (), apiId = apiId,
+       dataSourceName = dataSourceName, name = name,
+       code = Prelude.Nothing, codeS3Location = Prelude.Nothing,
+       description = Prelude.Nothing, functionVersion = Prelude.Nothing,
+       maxBatchSize = Prelude.Nothing,
+       requestMappingTemplate = Prelude.Nothing,
+       requestMappingTemplateS3Location = Prelude.Nothing,
+       responseMappingTemplate = Prelude.Nothing,
+       responseMappingTemplateS3Location = Prelude.Nothing,
+       runtime = Prelude.Nothing, syncConfig = Prelude.Nothing}
+instance ToResourceProperties FunctionConfiguration where
+  toResourceProperties FunctionConfiguration {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::FunctionConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ApiId" JSON..= apiId, "DataSourceName" JSON..= dataSourceName,
+                            "Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Code" Prelude.<$> code,
+                               (JSON..=) "CodeS3Location" Prelude.<$> codeS3Location,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "FunctionVersion" Prelude.<$> functionVersion,
+                               (JSON..=) "MaxBatchSize" Prelude.<$> maxBatchSize,
+                               (JSON..=) "RequestMappingTemplate"
+                                 Prelude.<$> requestMappingTemplate,
+                               (JSON..=) "RequestMappingTemplateS3Location"
+                                 Prelude.<$> requestMappingTemplateS3Location,
+                               (JSON..=) "ResponseMappingTemplate"
+                                 Prelude.<$> responseMappingTemplate,
+                               (JSON..=) "ResponseMappingTemplateS3Location"
+                                 Prelude.<$> responseMappingTemplateS3Location,
+                               (JSON..=) "Runtime" Prelude.<$> runtime,
+                               (JSON..=) "SyncConfig" Prelude.<$> syncConfig]))}
+instance JSON.ToJSON FunctionConfiguration where
+  toJSON FunctionConfiguration {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ApiId" JSON..= apiId, "DataSourceName" JSON..= dataSourceName,
+               "Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "Code" Prelude.<$> code,
+                  (JSON..=) "CodeS3Location" Prelude.<$> codeS3Location,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "FunctionVersion" Prelude.<$> functionVersion,
+                  (JSON..=) "MaxBatchSize" Prelude.<$> maxBatchSize,
+                  (JSON..=) "RequestMappingTemplate"
+                    Prelude.<$> requestMappingTemplate,
+                  (JSON..=) "RequestMappingTemplateS3Location"
+                    Prelude.<$> requestMappingTemplateS3Location,
+                  (JSON..=) "ResponseMappingTemplate"
+                    Prelude.<$> responseMappingTemplate,
+                  (JSON..=) "ResponseMappingTemplateS3Location"
+                    Prelude.<$> responseMappingTemplateS3Location,
+                  (JSON..=) "Runtime" Prelude.<$> runtime,
+                  (JSON..=) "SyncConfig" Prelude.<$> syncConfig])))
+instance Property "ApiId" FunctionConfiguration where
+  type PropertyType "ApiId" FunctionConfiguration = Value Prelude.Text
+  set newValue FunctionConfiguration {..}
+    = FunctionConfiguration {apiId = newValue, ..}
+instance Property "Code" FunctionConfiguration where
+  type PropertyType "Code" FunctionConfiguration = Value Prelude.Text
+  set newValue FunctionConfiguration {..}
+    = FunctionConfiguration {code = Prelude.pure newValue, ..}
+instance Property "CodeS3Location" FunctionConfiguration where
+  type PropertyType "CodeS3Location" FunctionConfiguration = Value Prelude.Text
+  set newValue FunctionConfiguration {..}
+    = FunctionConfiguration
+        {codeS3Location = Prelude.pure newValue, ..}
+instance Property "DataSourceName" FunctionConfiguration where
+  type PropertyType "DataSourceName" FunctionConfiguration = Value Prelude.Text
+  set newValue FunctionConfiguration {..}
+    = FunctionConfiguration {dataSourceName = newValue, ..}
+instance Property "Description" FunctionConfiguration where
+  type PropertyType "Description" FunctionConfiguration = Value Prelude.Text
+  set newValue FunctionConfiguration {..}
+    = FunctionConfiguration {description = Prelude.pure newValue, ..}
+instance Property "FunctionVersion" FunctionConfiguration where
+  type PropertyType "FunctionVersion" FunctionConfiguration = Value Prelude.Text
+  set newValue FunctionConfiguration {..}
+    = FunctionConfiguration
+        {functionVersion = Prelude.pure newValue, ..}
+instance Property "MaxBatchSize" FunctionConfiguration where
+  type PropertyType "MaxBatchSize" FunctionConfiguration = Value Prelude.Integer
+  set newValue FunctionConfiguration {..}
+    = FunctionConfiguration {maxBatchSize = Prelude.pure newValue, ..}
+instance Property "Name" FunctionConfiguration where
+  type PropertyType "Name" FunctionConfiguration = Value Prelude.Text
+  set newValue FunctionConfiguration {..}
+    = FunctionConfiguration {name = newValue, ..}
+instance Property "RequestMappingTemplate" FunctionConfiguration where
+  type PropertyType "RequestMappingTemplate" FunctionConfiguration = Value Prelude.Text
+  set newValue FunctionConfiguration {..}
+    = FunctionConfiguration
+        {requestMappingTemplate = Prelude.pure newValue, ..}
+instance Property "RequestMappingTemplateS3Location" FunctionConfiguration where
+  type PropertyType "RequestMappingTemplateS3Location" FunctionConfiguration = Value Prelude.Text
+  set newValue FunctionConfiguration {..}
+    = FunctionConfiguration
+        {requestMappingTemplateS3Location = Prelude.pure newValue, ..}
+instance Property "ResponseMappingTemplate" FunctionConfiguration where
+  type PropertyType "ResponseMappingTemplate" FunctionConfiguration = Value Prelude.Text
+  set newValue FunctionConfiguration {..}
+    = FunctionConfiguration
+        {responseMappingTemplate = Prelude.pure newValue, ..}
+instance Property "ResponseMappingTemplateS3Location" FunctionConfiguration where
+  type PropertyType "ResponseMappingTemplateS3Location" FunctionConfiguration = Value Prelude.Text
+  set newValue FunctionConfiguration {..}
+    = FunctionConfiguration
+        {responseMappingTemplateS3Location = Prelude.pure newValue, ..}
+instance Property "Runtime" FunctionConfiguration where
+  type PropertyType "Runtime" FunctionConfiguration = AppSyncRuntimeProperty
+  set newValue FunctionConfiguration {..}
+    = FunctionConfiguration {runtime = Prelude.pure newValue, ..}
+instance Property "SyncConfig" FunctionConfiguration where
+  type PropertyType "SyncConfig" FunctionConfiguration = SyncConfigProperty
+  set newValue FunctionConfiguration {..}
+    = FunctionConfiguration {syncConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/FunctionConfiguration/AppSyncRuntimeProperty.hs b/gen/Stratosphere/AppSync/FunctionConfiguration/AppSyncRuntimeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/FunctionConfiguration/AppSyncRuntimeProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.AppSync.FunctionConfiguration.AppSyncRuntimeProperty (
+        AppSyncRuntimeProperty(..), mkAppSyncRuntimeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AppSyncRuntimeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-functionconfiguration-appsyncruntime.html>
+    AppSyncRuntimeProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-functionconfiguration-appsyncruntime.html#cfn-appsync-functionconfiguration-appsyncruntime-name>
+                            name :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-functionconfiguration-appsyncruntime.html#cfn-appsync-functionconfiguration-appsyncruntime-runtimeversion>
+                            runtimeVersion :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAppSyncRuntimeProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> AppSyncRuntimeProperty
+mkAppSyncRuntimeProperty name runtimeVersion
+  = AppSyncRuntimeProperty
+      {haddock_workaround_ = (), name = name,
+       runtimeVersion = runtimeVersion}
+instance ToResourceProperties AppSyncRuntimeProperty where
+  toResourceProperties AppSyncRuntimeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::FunctionConfiguration.AppSyncRuntime",
+         supportsTags = Prelude.False,
+         properties = ["Name" JSON..= name,
+                       "RuntimeVersion" JSON..= runtimeVersion]}
+instance JSON.ToJSON AppSyncRuntimeProperty where
+  toJSON AppSyncRuntimeProperty {..}
+    = JSON.object
+        ["Name" JSON..= name, "RuntimeVersion" JSON..= runtimeVersion]
+instance Property "Name" AppSyncRuntimeProperty where
+  type PropertyType "Name" AppSyncRuntimeProperty = Value Prelude.Text
+  set newValue AppSyncRuntimeProperty {..}
+    = AppSyncRuntimeProperty {name = newValue, ..}
+instance Property "RuntimeVersion" AppSyncRuntimeProperty where
+  type PropertyType "RuntimeVersion" AppSyncRuntimeProperty = Value Prelude.Text
+  set newValue AppSyncRuntimeProperty {..}
+    = AppSyncRuntimeProperty {runtimeVersion = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/FunctionConfiguration/AppSyncRuntimeProperty.hs-boot b/gen/Stratosphere/AppSync/FunctionConfiguration/AppSyncRuntimeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/FunctionConfiguration/AppSyncRuntimeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.FunctionConfiguration.AppSyncRuntimeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AppSyncRuntimeProperty :: Prelude.Type
+instance ToResourceProperties AppSyncRuntimeProperty
+instance Prelude.Eq AppSyncRuntimeProperty
+instance Prelude.Show AppSyncRuntimeProperty
+instance JSON.ToJSON AppSyncRuntimeProperty
diff --git a/gen/Stratosphere/AppSync/FunctionConfiguration/LambdaConflictHandlerConfigProperty.hs b/gen/Stratosphere/AppSync/FunctionConfiguration/LambdaConflictHandlerConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/FunctionConfiguration/LambdaConflictHandlerConfigProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.AppSync.FunctionConfiguration.LambdaConflictHandlerConfigProperty (
+        LambdaConflictHandlerConfigProperty(..),
+        mkLambdaConflictHandlerConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LambdaConflictHandlerConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-functionconfiguration-lambdaconflicthandlerconfig.html>
+    LambdaConflictHandlerConfigProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-functionconfiguration-lambdaconflicthandlerconfig.html#cfn-appsync-functionconfiguration-lambdaconflicthandlerconfig-lambdaconflicthandlerarn>
+                                         lambdaConflictHandlerArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLambdaConflictHandlerConfigProperty ::
+  LambdaConflictHandlerConfigProperty
+mkLambdaConflictHandlerConfigProperty
+  = LambdaConflictHandlerConfigProperty
+      {haddock_workaround_ = (),
+       lambdaConflictHandlerArn = Prelude.Nothing}
+instance ToResourceProperties LambdaConflictHandlerConfigProperty where
+  toResourceProperties LambdaConflictHandlerConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::FunctionConfiguration.LambdaConflictHandlerConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "LambdaConflictHandlerArn"
+                              Prelude.<$> lambdaConflictHandlerArn])}
+instance JSON.ToJSON LambdaConflictHandlerConfigProperty where
+  toJSON LambdaConflictHandlerConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "LambdaConflictHandlerArn"
+                 Prelude.<$> lambdaConflictHandlerArn]))
+instance Property "LambdaConflictHandlerArn" LambdaConflictHandlerConfigProperty where
+  type PropertyType "LambdaConflictHandlerArn" LambdaConflictHandlerConfigProperty = Value Prelude.Text
+  set newValue LambdaConflictHandlerConfigProperty {..}
+    = LambdaConflictHandlerConfigProperty
+        {lambdaConflictHandlerArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/FunctionConfiguration/LambdaConflictHandlerConfigProperty.hs-boot b/gen/Stratosphere/AppSync/FunctionConfiguration/LambdaConflictHandlerConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/FunctionConfiguration/LambdaConflictHandlerConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.FunctionConfiguration.LambdaConflictHandlerConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LambdaConflictHandlerConfigProperty :: Prelude.Type
+instance ToResourceProperties LambdaConflictHandlerConfigProperty
+instance Prelude.Eq LambdaConflictHandlerConfigProperty
+instance Prelude.Show LambdaConflictHandlerConfigProperty
+instance JSON.ToJSON LambdaConflictHandlerConfigProperty
diff --git a/gen/Stratosphere/AppSync/FunctionConfiguration/SyncConfigProperty.hs b/gen/Stratosphere/AppSync/FunctionConfiguration/SyncConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/FunctionConfiguration/SyncConfigProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.AppSync.FunctionConfiguration.SyncConfigProperty (
+        module Exports, SyncConfigProperty(..), mkSyncConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.FunctionConfiguration.LambdaConflictHandlerConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SyncConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-functionconfiguration-syncconfig.html>
+    SyncConfigProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-functionconfiguration-syncconfig.html#cfn-appsync-functionconfiguration-syncconfig-conflictdetection>
+                        conflictDetection :: (Value Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-functionconfiguration-syncconfig.html#cfn-appsync-functionconfiguration-syncconfig-conflicthandler>
+                        conflictHandler :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-functionconfiguration-syncconfig.html#cfn-appsync-functionconfiguration-syncconfig-lambdaconflicthandlerconfig>
+                        lambdaConflictHandlerConfig :: (Prelude.Maybe LambdaConflictHandlerConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSyncConfigProperty :: Value Prelude.Text -> SyncConfigProperty
+mkSyncConfigProperty conflictDetection
+  = SyncConfigProperty
+      {haddock_workaround_ = (), conflictDetection = conflictDetection,
+       conflictHandler = Prelude.Nothing,
+       lambdaConflictHandlerConfig = Prelude.Nothing}
+instance ToResourceProperties SyncConfigProperty where
+  toResourceProperties SyncConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::FunctionConfiguration.SyncConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ConflictDetection" JSON..= conflictDetection]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ConflictHandler" Prelude.<$> conflictHandler,
+                               (JSON..=) "LambdaConflictHandlerConfig"
+                                 Prelude.<$> lambdaConflictHandlerConfig]))}
+instance JSON.ToJSON SyncConfigProperty where
+  toJSON SyncConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ConflictDetection" JSON..= conflictDetection]
+              (Prelude.catMaybes
+                 [(JSON..=) "ConflictHandler" Prelude.<$> conflictHandler,
+                  (JSON..=) "LambdaConflictHandlerConfig"
+                    Prelude.<$> lambdaConflictHandlerConfig])))
+instance Property "ConflictDetection" SyncConfigProperty where
+  type PropertyType "ConflictDetection" SyncConfigProperty = Value Prelude.Text
+  set newValue SyncConfigProperty {..}
+    = SyncConfigProperty {conflictDetection = newValue, ..}
+instance Property "ConflictHandler" SyncConfigProperty where
+  type PropertyType "ConflictHandler" SyncConfigProperty = Value Prelude.Text
+  set newValue SyncConfigProperty {..}
+    = SyncConfigProperty {conflictHandler = Prelude.pure newValue, ..}
+instance Property "LambdaConflictHandlerConfig" SyncConfigProperty where
+  type PropertyType "LambdaConflictHandlerConfig" SyncConfigProperty = LambdaConflictHandlerConfigProperty
+  set newValue SyncConfigProperty {..}
+    = SyncConfigProperty
+        {lambdaConflictHandlerConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/FunctionConfiguration/SyncConfigProperty.hs-boot b/gen/Stratosphere/AppSync/FunctionConfiguration/SyncConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/FunctionConfiguration/SyncConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.FunctionConfiguration.SyncConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SyncConfigProperty :: Prelude.Type
+instance ToResourceProperties SyncConfigProperty
+instance Prelude.Eq SyncConfigProperty
+instance Prelude.Show SyncConfigProperty
+instance JSON.ToJSON SyncConfigProperty
diff --git a/gen/Stratosphere/AppSync/GraphQLApi.hs b/gen/Stratosphere/AppSync/GraphQLApi.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/GraphQLApi.hs
@@ -0,0 +1,202 @@
+module Stratosphere.AppSync.GraphQLApi (
+        module Exports, GraphQLApi(..), mkGraphQLApi
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.GraphQLApi.AdditionalAuthenticationProviderProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.GraphQLApi.EnhancedMetricsConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.GraphQLApi.LambdaAuthorizerConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.GraphQLApi.LogConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.GraphQLApi.OpenIDConnectConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.GraphQLApi.UserPoolConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data GraphQLApi
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html>
+    GraphQLApi {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-additionalauthenticationproviders>
+                additionalAuthenticationProviders :: (Prelude.Maybe [AdditionalAuthenticationProviderProperty]),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-apitype>
+                apiType :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-authenticationtype>
+                authenticationType :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-enhancedmetricsconfig>
+                enhancedMetricsConfig :: (Prelude.Maybe EnhancedMetricsConfigProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-environmentvariables>
+                environmentVariables :: (Prelude.Maybe JSON.Object),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-introspectionconfig>
+                introspectionConfig :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-lambdaauthorizerconfig>
+                lambdaAuthorizerConfig :: (Prelude.Maybe LambdaAuthorizerConfigProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-logconfig>
+                logConfig :: (Prelude.Maybe LogConfigProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-mergedapiexecutionrolearn>
+                mergedApiExecutionRoleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-name>
+                name :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-openidconnectconfig>
+                openIDConnectConfig :: (Prelude.Maybe OpenIDConnectConfigProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-ownercontact>
+                ownerContact :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-querydepthlimit>
+                queryDepthLimit :: (Prelude.Maybe (Value Prelude.Integer)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-resolvercountlimit>
+                resolverCountLimit :: (Prelude.Maybe (Value Prelude.Integer)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-tags>
+                tags :: (Prelude.Maybe [Tag]),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-userpoolconfig>
+                userPoolConfig :: (Prelude.Maybe UserPoolConfigProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-visibility>
+                visibility :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-xrayenabled>
+                xrayEnabled :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGraphQLApi ::
+  Value Prelude.Text -> Value Prelude.Text -> GraphQLApi
+mkGraphQLApi authenticationType name
+  = GraphQLApi
+      {haddock_workaround_ = (), authenticationType = authenticationType,
+       name = name, additionalAuthenticationProviders = Prelude.Nothing,
+       apiType = Prelude.Nothing, enhancedMetricsConfig = Prelude.Nothing,
+       environmentVariables = Prelude.Nothing,
+       introspectionConfig = Prelude.Nothing,
+       lambdaAuthorizerConfig = Prelude.Nothing,
+       logConfig = Prelude.Nothing,
+       mergedApiExecutionRoleArn = Prelude.Nothing,
+       openIDConnectConfig = Prelude.Nothing,
+       ownerContact = Prelude.Nothing, queryDepthLimit = Prelude.Nothing,
+       resolverCountLimit = Prelude.Nothing, tags = Prelude.Nothing,
+       userPoolConfig = Prelude.Nothing, visibility = Prelude.Nothing,
+       xrayEnabled = Prelude.Nothing}
+instance ToResourceProperties GraphQLApi where
+  toResourceProperties GraphQLApi {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::GraphQLApi", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AuthenticationType" JSON..= authenticationType,
+                            "Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AdditionalAuthenticationProviders"
+                                 Prelude.<$> additionalAuthenticationProviders,
+                               (JSON..=) "ApiType" Prelude.<$> apiType,
+                               (JSON..=) "EnhancedMetricsConfig"
+                                 Prelude.<$> enhancedMetricsConfig,
+                               (JSON..=) "EnvironmentVariables" Prelude.<$> environmentVariables,
+                               (JSON..=) "IntrospectionConfig" Prelude.<$> introspectionConfig,
+                               (JSON..=) "LambdaAuthorizerConfig"
+                                 Prelude.<$> lambdaAuthorizerConfig,
+                               (JSON..=) "LogConfig" Prelude.<$> logConfig,
+                               (JSON..=) "MergedApiExecutionRoleArn"
+                                 Prelude.<$> mergedApiExecutionRoleArn,
+                               (JSON..=) "OpenIDConnectConfig" Prelude.<$> openIDConnectConfig,
+                               (JSON..=) "OwnerContact" Prelude.<$> ownerContact,
+                               (JSON..=) "QueryDepthLimit" Prelude.<$> queryDepthLimit,
+                               (JSON..=) "ResolverCountLimit" Prelude.<$> resolverCountLimit,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "UserPoolConfig" Prelude.<$> userPoolConfig,
+                               (JSON..=) "Visibility" Prelude.<$> visibility,
+                               (JSON..=) "XrayEnabled" Prelude.<$> xrayEnabled]))}
+instance JSON.ToJSON GraphQLApi where
+  toJSON GraphQLApi {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AuthenticationType" JSON..= authenticationType,
+               "Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "AdditionalAuthenticationProviders"
+                    Prelude.<$> additionalAuthenticationProviders,
+                  (JSON..=) "ApiType" Prelude.<$> apiType,
+                  (JSON..=) "EnhancedMetricsConfig"
+                    Prelude.<$> enhancedMetricsConfig,
+                  (JSON..=) "EnvironmentVariables" Prelude.<$> environmentVariables,
+                  (JSON..=) "IntrospectionConfig" Prelude.<$> introspectionConfig,
+                  (JSON..=) "LambdaAuthorizerConfig"
+                    Prelude.<$> lambdaAuthorizerConfig,
+                  (JSON..=) "LogConfig" Prelude.<$> logConfig,
+                  (JSON..=) "MergedApiExecutionRoleArn"
+                    Prelude.<$> mergedApiExecutionRoleArn,
+                  (JSON..=) "OpenIDConnectConfig" Prelude.<$> openIDConnectConfig,
+                  (JSON..=) "OwnerContact" Prelude.<$> ownerContact,
+                  (JSON..=) "QueryDepthLimit" Prelude.<$> queryDepthLimit,
+                  (JSON..=) "ResolverCountLimit" Prelude.<$> resolverCountLimit,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "UserPoolConfig" Prelude.<$> userPoolConfig,
+                  (JSON..=) "Visibility" Prelude.<$> visibility,
+                  (JSON..=) "XrayEnabled" Prelude.<$> xrayEnabled])))
+instance Property "AdditionalAuthenticationProviders" GraphQLApi where
+  type PropertyType "AdditionalAuthenticationProviders" GraphQLApi = [AdditionalAuthenticationProviderProperty]
+  set newValue GraphQLApi {..}
+    = GraphQLApi
+        {additionalAuthenticationProviders = Prelude.pure newValue, ..}
+instance Property "ApiType" GraphQLApi where
+  type PropertyType "ApiType" GraphQLApi = Value Prelude.Text
+  set newValue GraphQLApi {..}
+    = GraphQLApi {apiType = Prelude.pure newValue, ..}
+instance Property "AuthenticationType" GraphQLApi where
+  type PropertyType "AuthenticationType" GraphQLApi = Value Prelude.Text
+  set newValue GraphQLApi {..}
+    = GraphQLApi {authenticationType = newValue, ..}
+instance Property "EnhancedMetricsConfig" GraphQLApi where
+  type PropertyType "EnhancedMetricsConfig" GraphQLApi = EnhancedMetricsConfigProperty
+  set newValue GraphQLApi {..}
+    = GraphQLApi {enhancedMetricsConfig = Prelude.pure newValue, ..}
+instance Property "EnvironmentVariables" GraphQLApi where
+  type PropertyType "EnvironmentVariables" GraphQLApi = JSON.Object
+  set newValue GraphQLApi {..}
+    = GraphQLApi {environmentVariables = Prelude.pure newValue, ..}
+instance Property "IntrospectionConfig" GraphQLApi where
+  type PropertyType "IntrospectionConfig" GraphQLApi = Value Prelude.Text
+  set newValue GraphQLApi {..}
+    = GraphQLApi {introspectionConfig = Prelude.pure newValue, ..}
+instance Property "LambdaAuthorizerConfig" GraphQLApi where
+  type PropertyType "LambdaAuthorizerConfig" GraphQLApi = LambdaAuthorizerConfigProperty
+  set newValue GraphQLApi {..}
+    = GraphQLApi {lambdaAuthorizerConfig = Prelude.pure newValue, ..}
+instance Property "LogConfig" GraphQLApi where
+  type PropertyType "LogConfig" GraphQLApi = LogConfigProperty
+  set newValue GraphQLApi {..}
+    = GraphQLApi {logConfig = Prelude.pure newValue, ..}
+instance Property "MergedApiExecutionRoleArn" GraphQLApi where
+  type PropertyType "MergedApiExecutionRoleArn" GraphQLApi = Value Prelude.Text
+  set newValue GraphQLApi {..}
+    = GraphQLApi
+        {mergedApiExecutionRoleArn = Prelude.pure newValue, ..}
+instance Property "Name" GraphQLApi where
+  type PropertyType "Name" GraphQLApi = Value Prelude.Text
+  set newValue GraphQLApi {..} = GraphQLApi {name = newValue, ..}
+instance Property "OpenIDConnectConfig" GraphQLApi where
+  type PropertyType "OpenIDConnectConfig" GraphQLApi = OpenIDConnectConfigProperty
+  set newValue GraphQLApi {..}
+    = GraphQLApi {openIDConnectConfig = Prelude.pure newValue, ..}
+instance Property "OwnerContact" GraphQLApi where
+  type PropertyType "OwnerContact" GraphQLApi = Value Prelude.Text
+  set newValue GraphQLApi {..}
+    = GraphQLApi {ownerContact = Prelude.pure newValue, ..}
+instance Property "QueryDepthLimit" GraphQLApi where
+  type PropertyType "QueryDepthLimit" GraphQLApi = Value Prelude.Integer
+  set newValue GraphQLApi {..}
+    = GraphQLApi {queryDepthLimit = Prelude.pure newValue, ..}
+instance Property "ResolverCountLimit" GraphQLApi where
+  type PropertyType "ResolverCountLimit" GraphQLApi = Value Prelude.Integer
+  set newValue GraphQLApi {..}
+    = GraphQLApi {resolverCountLimit = Prelude.pure newValue, ..}
+instance Property "Tags" GraphQLApi where
+  type PropertyType "Tags" GraphQLApi = [Tag]
+  set newValue GraphQLApi {..}
+    = GraphQLApi {tags = Prelude.pure newValue, ..}
+instance Property "UserPoolConfig" GraphQLApi where
+  type PropertyType "UserPoolConfig" GraphQLApi = UserPoolConfigProperty
+  set newValue GraphQLApi {..}
+    = GraphQLApi {userPoolConfig = Prelude.pure newValue, ..}
+instance Property "Visibility" GraphQLApi where
+  type PropertyType "Visibility" GraphQLApi = Value Prelude.Text
+  set newValue GraphQLApi {..}
+    = GraphQLApi {visibility = Prelude.pure newValue, ..}
+instance Property "XrayEnabled" GraphQLApi where
+  type PropertyType "XrayEnabled" GraphQLApi = Value Prelude.Bool
+  set newValue GraphQLApi {..}
+    = GraphQLApi {xrayEnabled = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/GraphQLApi/AdditionalAuthenticationProviderProperty.hs b/gen/Stratosphere/AppSync/GraphQLApi/AdditionalAuthenticationProviderProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/GraphQLApi/AdditionalAuthenticationProviderProperty.hs
@@ -0,0 +1,76 @@
+module Stratosphere.AppSync.GraphQLApi.AdditionalAuthenticationProviderProperty (
+        module Exports, AdditionalAuthenticationProviderProperty(..),
+        mkAdditionalAuthenticationProviderProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.GraphQLApi.CognitoUserPoolConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.GraphQLApi.LambdaAuthorizerConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.GraphQLApi.OpenIDConnectConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AdditionalAuthenticationProviderProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-additionalauthenticationprovider.html>
+    AdditionalAuthenticationProviderProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-additionalauthenticationprovider.html#cfn-appsync-graphqlapi-additionalauthenticationprovider-authenticationtype>
+                                              authenticationType :: (Value Prelude.Text),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-additionalauthenticationprovider.html#cfn-appsync-graphqlapi-additionalauthenticationprovider-lambdaauthorizerconfig>
+                                              lambdaAuthorizerConfig :: (Prelude.Maybe LambdaAuthorizerConfigProperty),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-additionalauthenticationprovider.html#cfn-appsync-graphqlapi-additionalauthenticationprovider-openidconnectconfig>
+                                              openIDConnectConfig :: (Prelude.Maybe OpenIDConnectConfigProperty),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-additionalauthenticationprovider.html#cfn-appsync-graphqlapi-additionalauthenticationprovider-userpoolconfig>
+                                              userPoolConfig :: (Prelude.Maybe CognitoUserPoolConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAdditionalAuthenticationProviderProperty ::
+  Value Prelude.Text -> AdditionalAuthenticationProviderProperty
+mkAdditionalAuthenticationProviderProperty authenticationType
+  = AdditionalAuthenticationProviderProperty
+      {haddock_workaround_ = (), authenticationType = authenticationType,
+       lambdaAuthorizerConfig = Prelude.Nothing,
+       openIDConnectConfig = Prelude.Nothing,
+       userPoolConfig = Prelude.Nothing}
+instance ToResourceProperties AdditionalAuthenticationProviderProperty where
+  toResourceProperties AdditionalAuthenticationProviderProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::GraphQLApi.AdditionalAuthenticationProvider",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AuthenticationType" JSON..= authenticationType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "LambdaAuthorizerConfig"
+                                 Prelude.<$> lambdaAuthorizerConfig,
+                               (JSON..=) "OpenIDConnectConfig" Prelude.<$> openIDConnectConfig,
+                               (JSON..=) "UserPoolConfig" Prelude.<$> userPoolConfig]))}
+instance JSON.ToJSON AdditionalAuthenticationProviderProperty where
+  toJSON AdditionalAuthenticationProviderProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AuthenticationType" JSON..= authenticationType]
+              (Prelude.catMaybes
+                 [(JSON..=) "LambdaAuthorizerConfig"
+                    Prelude.<$> lambdaAuthorizerConfig,
+                  (JSON..=) "OpenIDConnectConfig" Prelude.<$> openIDConnectConfig,
+                  (JSON..=) "UserPoolConfig" Prelude.<$> userPoolConfig])))
+instance Property "AuthenticationType" AdditionalAuthenticationProviderProperty where
+  type PropertyType "AuthenticationType" AdditionalAuthenticationProviderProperty = Value Prelude.Text
+  set newValue AdditionalAuthenticationProviderProperty {..}
+    = AdditionalAuthenticationProviderProperty
+        {authenticationType = newValue, ..}
+instance Property "LambdaAuthorizerConfig" AdditionalAuthenticationProviderProperty where
+  type PropertyType "LambdaAuthorizerConfig" AdditionalAuthenticationProviderProperty = LambdaAuthorizerConfigProperty
+  set newValue AdditionalAuthenticationProviderProperty {..}
+    = AdditionalAuthenticationProviderProperty
+        {lambdaAuthorizerConfig = Prelude.pure newValue, ..}
+instance Property "OpenIDConnectConfig" AdditionalAuthenticationProviderProperty where
+  type PropertyType "OpenIDConnectConfig" AdditionalAuthenticationProviderProperty = OpenIDConnectConfigProperty
+  set newValue AdditionalAuthenticationProviderProperty {..}
+    = AdditionalAuthenticationProviderProperty
+        {openIDConnectConfig = Prelude.pure newValue, ..}
+instance Property "UserPoolConfig" AdditionalAuthenticationProviderProperty where
+  type PropertyType "UserPoolConfig" AdditionalAuthenticationProviderProperty = CognitoUserPoolConfigProperty
+  set newValue AdditionalAuthenticationProviderProperty {..}
+    = AdditionalAuthenticationProviderProperty
+        {userPoolConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/GraphQLApi/AdditionalAuthenticationProviderProperty.hs-boot b/gen/Stratosphere/AppSync/GraphQLApi/AdditionalAuthenticationProviderProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/GraphQLApi/AdditionalAuthenticationProviderProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.GraphQLApi.AdditionalAuthenticationProviderProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AdditionalAuthenticationProviderProperty :: Prelude.Type
+instance ToResourceProperties AdditionalAuthenticationProviderProperty
+instance Prelude.Eq AdditionalAuthenticationProviderProperty
+instance Prelude.Show AdditionalAuthenticationProviderProperty
+instance JSON.ToJSON AdditionalAuthenticationProviderProperty
diff --git a/gen/Stratosphere/AppSync/GraphQLApi/CognitoUserPoolConfigProperty.hs b/gen/Stratosphere/AppSync/GraphQLApi/CognitoUserPoolConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/GraphQLApi/CognitoUserPoolConfigProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.AppSync.GraphQLApi.CognitoUserPoolConfigProperty (
+        CognitoUserPoolConfigProperty(..), mkCognitoUserPoolConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CognitoUserPoolConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-cognitouserpoolconfig.html>
+    CognitoUserPoolConfigProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-cognitouserpoolconfig.html#cfn-appsync-graphqlapi-cognitouserpoolconfig-appidclientregex>
+                                   appIdClientRegex :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-cognitouserpoolconfig.html#cfn-appsync-graphqlapi-cognitouserpoolconfig-awsregion>
+                                   awsRegion :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-cognitouserpoolconfig.html#cfn-appsync-graphqlapi-cognitouserpoolconfig-userpoolid>
+                                   userPoolId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCognitoUserPoolConfigProperty :: CognitoUserPoolConfigProperty
+mkCognitoUserPoolConfigProperty
+  = CognitoUserPoolConfigProperty
+      {haddock_workaround_ = (), appIdClientRegex = Prelude.Nothing,
+       awsRegion = Prelude.Nothing, userPoolId = Prelude.Nothing}
+instance ToResourceProperties CognitoUserPoolConfigProperty where
+  toResourceProperties CognitoUserPoolConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::GraphQLApi.CognitoUserPoolConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AppIdClientRegex" Prelude.<$> appIdClientRegex,
+                            (JSON..=) "AwsRegion" Prelude.<$> awsRegion,
+                            (JSON..=) "UserPoolId" Prelude.<$> userPoolId])}
+instance JSON.ToJSON CognitoUserPoolConfigProperty where
+  toJSON CognitoUserPoolConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AppIdClientRegex" Prelude.<$> appIdClientRegex,
+               (JSON..=) "AwsRegion" Prelude.<$> awsRegion,
+               (JSON..=) "UserPoolId" Prelude.<$> userPoolId]))
+instance Property "AppIdClientRegex" CognitoUserPoolConfigProperty where
+  type PropertyType "AppIdClientRegex" CognitoUserPoolConfigProperty = Value Prelude.Text
+  set newValue CognitoUserPoolConfigProperty {..}
+    = CognitoUserPoolConfigProperty
+        {appIdClientRegex = Prelude.pure newValue, ..}
+instance Property "AwsRegion" CognitoUserPoolConfigProperty where
+  type PropertyType "AwsRegion" CognitoUserPoolConfigProperty = Value Prelude.Text
+  set newValue CognitoUserPoolConfigProperty {..}
+    = CognitoUserPoolConfigProperty
+        {awsRegion = Prelude.pure newValue, ..}
+instance Property "UserPoolId" CognitoUserPoolConfigProperty where
+  type PropertyType "UserPoolId" CognitoUserPoolConfigProperty = Value Prelude.Text
+  set newValue CognitoUserPoolConfigProperty {..}
+    = CognitoUserPoolConfigProperty
+        {userPoolId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/GraphQLApi/CognitoUserPoolConfigProperty.hs-boot b/gen/Stratosphere/AppSync/GraphQLApi/CognitoUserPoolConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/GraphQLApi/CognitoUserPoolConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.GraphQLApi.CognitoUserPoolConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CognitoUserPoolConfigProperty :: Prelude.Type
+instance ToResourceProperties CognitoUserPoolConfigProperty
+instance Prelude.Eq CognitoUserPoolConfigProperty
+instance Prelude.Show CognitoUserPoolConfigProperty
+instance JSON.ToJSON CognitoUserPoolConfigProperty
diff --git a/gen/Stratosphere/AppSync/GraphQLApi/EnhancedMetricsConfigProperty.hs b/gen/Stratosphere/AppSync/GraphQLApi/EnhancedMetricsConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/GraphQLApi/EnhancedMetricsConfigProperty.hs
@@ -0,0 +1,64 @@
+module Stratosphere.AppSync.GraphQLApi.EnhancedMetricsConfigProperty (
+        EnhancedMetricsConfigProperty(..), mkEnhancedMetricsConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EnhancedMetricsConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-enhancedmetricsconfig.html>
+    EnhancedMetricsConfigProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-enhancedmetricsconfig.html#cfn-appsync-graphqlapi-enhancedmetricsconfig-datasourcelevelmetricsbehavior>
+                                   dataSourceLevelMetricsBehavior :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-enhancedmetricsconfig.html#cfn-appsync-graphqlapi-enhancedmetricsconfig-operationlevelmetricsconfig>
+                                   operationLevelMetricsConfig :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-enhancedmetricsconfig.html#cfn-appsync-graphqlapi-enhancedmetricsconfig-resolverlevelmetricsbehavior>
+                                   resolverLevelMetricsBehavior :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEnhancedMetricsConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> EnhancedMetricsConfigProperty
+mkEnhancedMetricsConfigProperty
+  dataSourceLevelMetricsBehavior
+  operationLevelMetricsConfig
+  resolverLevelMetricsBehavior
+  = EnhancedMetricsConfigProperty
+      {haddock_workaround_ = (),
+       dataSourceLevelMetricsBehavior = dataSourceLevelMetricsBehavior,
+       operationLevelMetricsConfig = operationLevelMetricsConfig,
+       resolverLevelMetricsBehavior = resolverLevelMetricsBehavior}
+instance ToResourceProperties EnhancedMetricsConfigProperty where
+  toResourceProperties EnhancedMetricsConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::GraphQLApi.EnhancedMetricsConfig",
+         supportsTags = Prelude.False,
+         properties = ["DataSourceLevelMetricsBehavior"
+                         JSON..= dataSourceLevelMetricsBehavior,
+                       "OperationLevelMetricsConfig" JSON..= operationLevelMetricsConfig,
+                       "ResolverLevelMetricsBehavior"
+                         JSON..= resolverLevelMetricsBehavior]}
+instance JSON.ToJSON EnhancedMetricsConfigProperty where
+  toJSON EnhancedMetricsConfigProperty {..}
+    = JSON.object
+        ["DataSourceLevelMetricsBehavior"
+           JSON..= dataSourceLevelMetricsBehavior,
+         "OperationLevelMetricsConfig" JSON..= operationLevelMetricsConfig,
+         "ResolverLevelMetricsBehavior"
+           JSON..= resolverLevelMetricsBehavior]
+instance Property "DataSourceLevelMetricsBehavior" EnhancedMetricsConfigProperty where
+  type PropertyType "DataSourceLevelMetricsBehavior" EnhancedMetricsConfigProperty = Value Prelude.Text
+  set newValue EnhancedMetricsConfigProperty {..}
+    = EnhancedMetricsConfigProperty
+        {dataSourceLevelMetricsBehavior = newValue, ..}
+instance Property "OperationLevelMetricsConfig" EnhancedMetricsConfigProperty where
+  type PropertyType "OperationLevelMetricsConfig" EnhancedMetricsConfigProperty = Value Prelude.Text
+  set newValue EnhancedMetricsConfigProperty {..}
+    = EnhancedMetricsConfigProperty
+        {operationLevelMetricsConfig = newValue, ..}
+instance Property "ResolverLevelMetricsBehavior" EnhancedMetricsConfigProperty where
+  type PropertyType "ResolverLevelMetricsBehavior" EnhancedMetricsConfigProperty = Value Prelude.Text
+  set newValue EnhancedMetricsConfigProperty {..}
+    = EnhancedMetricsConfigProperty
+        {resolverLevelMetricsBehavior = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/GraphQLApi/EnhancedMetricsConfigProperty.hs-boot b/gen/Stratosphere/AppSync/GraphQLApi/EnhancedMetricsConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/GraphQLApi/EnhancedMetricsConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.GraphQLApi.EnhancedMetricsConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EnhancedMetricsConfigProperty :: Prelude.Type
+instance ToResourceProperties EnhancedMetricsConfigProperty
+instance Prelude.Eq EnhancedMetricsConfigProperty
+instance Prelude.Show EnhancedMetricsConfigProperty
+instance JSON.ToJSON EnhancedMetricsConfigProperty
diff --git a/gen/Stratosphere/AppSync/GraphQLApi/LambdaAuthorizerConfigProperty.hs b/gen/Stratosphere/AppSync/GraphQLApi/LambdaAuthorizerConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/GraphQLApi/LambdaAuthorizerConfigProperty.hs
@@ -0,0 +1,63 @@
+module Stratosphere.AppSync.GraphQLApi.LambdaAuthorizerConfigProperty (
+        LambdaAuthorizerConfigProperty(..),
+        mkLambdaAuthorizerConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LambdaAuthorizerConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-lambdaauthorizerconfig.html>
+    LambdaAuthorizerConfigProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-lambdaauthorizerconfig.html#cfn-appsync-graphqlapi-lambdaauthorizerconfig-authorizerresultttlinseconds>
+                                    authorizerResultTtlInSeconds :: (Prelude.Maybe (Value Prelude.Double)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-lambdaauthorizerconfig.html#cfn-appsync-graphqlapi-lambdaauthorizerconfig-authorizeruri>
+                                    authorizerUri :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-lambdaauthorizerconfig.html#cfn-appsync-graphqlapi-lambdaauthorizerconfig-identityvalidationexpression>
+                                    identityValidationExpression :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLambdaAuthorizerConfigProperty :: LambdaAuthorizerConfigProperty
+mkLambdaAuthorizerConfigProperty
+  = LambdaAuthorizerConfigProperty
+      {haddock_workaround_ = (),
+       authorizerResultTtlInSeconds = Prelude.Nothing,
+       authorizerUri = Prelude.Nothing,
+       identityValidationExpression = Prelude.Nothing}
+instance ToResourceProperties LambdaAuthorizerConfigProperty where
+  toResourceProperties LambdaAuthorizerConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::GraphQLApi.LambdaAuthorizerConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AuthorizerResultTtlInSeconds"
+                              Prelude.<$> authorizerResultTtlInSeconds,
+                            (JSON..=) "AuthorizerUri" Prelude.<$> authorizerUri,
+                            (JSON..=) "IdentityValidationExpression"
+                              Prelude.<$> identityValidationExpression])}
+instance JSON.ToJSON LambdaAuthorizerConfigProperty where
+  toJSON LambdaAuthorizerConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AuthorizerResultTtlInSeconds"
+                 Prelude.<$> authorizerResultTtlInSeconds,
+               (JSON..=) "AuthorizerUri" Prelude.<$> authorizerUri,
+               (JSON..=) "IdentityValidationExpression"
+                 Prelude.<$> identityValidationExpression]))
+instance Property "AuthorizerResultTtlInSeconds" LambdaAuthorizerConfigProperty where
+  type PropertyType "AuthorizerResultTtlInSeconds" LambdaAuthorizerConfigProperty = Value Prelude.Double
+  set newValue LambdaAuthorizerConfigProperty {..}
+    = LambdaAuthorizerConfigProperty
+        {authorizerResultTtlInSeconds = Prelude.pure newValue, ..}
+instance Property "AuthorizerUri" LambdaAuthorizerConfigProperty where
+  type PropertyType "AuthorizerUri" LambdaAuthorizerConfigProperty = Value Prelude.Text
+  set newValue LambdaAuthorizerConfigProperty {..}
+    = LambdaAuthorizerConfigProperty
+        {authorizerUri = Prelude.pure newValue, ..}
+instance Property "IdentityValidationExpression" LambdaAuthorizerConfigProperty where
+  type PropertyType "IdentityValidationExpression" LambdaAuthorizerConfigProperty = Value Prelude.Text
+  set newValue LambdaAuthorizerConfigProperty {..}
+    = LambdaAuthorizerConfigProperty
+        {identityValidationExpression = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/GraphQLApi/LambdaAuthorizerConfigProperty.hs-boot b/gen/Stratosphere/AppSync/GraphQLApi/LambdaAuthorizerConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/GraphQLApi/LambdaAuthorizerConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.GraphQLApi.LambdaAuthorizerConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LambdaAuthorizerConfigProperty :: Prelude.Type
+instance ToResourceProperties LambdaAuthorizerConfigProperty
+instance Prelude.Eq LambdaAuthorizerConfigProperty
+instance Prelude.Show LambdaAuthorizerConfigProperty
+instance JSON.ToJSON LambdaAuthorizerConfigProperty
diff --git a/gen/Stratosphere/AppSync/GraphQLApi/LogConfigProperty.hs b/gen/Stratosphere/AppSync/GraphQLApi/LogConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/GraphQLApi/LogConfigProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.AppSync.GraphQLApi.LogConfigProperty (
+        LogConfigProperty(..), mkLogConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LogConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-logconfig.html>
+    LogConfigProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-logconfig.html#cfn-appsync-graphqlapi-logconfig-cloudwatchlogsrolearn>
+                       cloudWatchLogsRoleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-logconfig.html#cfn-appsync-graphqlapi-logconfig-excludeverbosecontent>
+                       excludeVerboseContent :: (Prelude.Maybe (Value Prelude.Bool)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-logconfig.html#cfn-appsync-graphqlapi-logconfig-fieldloglevel>
+                       fieldLogLevel :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLogConfigProperty :: LogConfigProperty
+mkLogConfigProperty
+  = LogConfigProperty
+      {haddock_workaround_ = (), cloudWatchLogsRoleArn = Prelude.Nothing,
+       excludeVerboseContent = Prelude.Nothing,
+       fieldLogLevel = Prelude.Nothing}
+instance ToResourceProperties LogConfigProperty where
+  toResourceProperties LogConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::GraphQLApi.LogConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CloudWatchLogsRoleArn"
+                              Prelude.<$> cloudWatchLogsRoleArn,
+                            (JSON..=) "ExcludeVerboseContent"
+                              Prelude.<$> excludeVerboseContent,
+                            (JSON..=) "FieldLogLevel" Prelude.<$> fieldLogLevel])}
+instance JSON.ToJSON LogConfigProperty where
+  toJSON LogConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CloudWatchLogsRoleArn"
+                 Prelude.<$> cloudWatchLogsRoleArn,
+               (JSON..=) "ExcludeVerboseContent"
+                 Prelude.<$> excludeVerboseContent,
+               (JSON..=) "FieldLogLevel" Prelude.<$> fieldLogLevel]))
+instance Property "CloudWatchLogsRoleArn" LogConfigProperty where
+  type PropertyType "CloudWatchLogsRoleArn" LogConfigProperty = Value Prelude.Text
+  set newValue LogConfigProperty {..}
+    = LogConfigProperty
+        {cloudWatchLogsRoleArn = Prelude.pure newValue, ..}
+instance Property "ExcludeVerboseContent" LogConfigProperty where
+  type PropertyType "ExcludeVerboseContent" LogConfigProperty = Value Prelude.Bool
+  set newValue LogConfigProperty {..}
+    = LogConfigProperty
+        {excludeVerboseContent = Prelude.pure newValue, ..}
+instance Property "FieldLogLevel" LogConfigProperty where
+  type PropertyType "FieldLogLevel" LogConfigProperty = Value Prelude.Text
+  set newValue LogConfigProperty {..}
+    = LogConfigProperty {fieldLogLevel = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/GraphQLApi/LogConfigProperty.hs-boot b/gen/Stratosphere/AppSync/GraphQLApi/LogConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/GraphQLApi/LogConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.GraphQLApi.LogConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LogConfigProperty :: Prelude.Type
+instance ToResourceProperties LogConfigProperty
+instance Prelude.Eq LogConfigProperty
+instance Prelude.Show LogConfigProperty
+instance JSON.ToJSON LogConfigProperty
diff --git a/gen/Stratosphere/AppSync/GraphQLApi/OpenIDConnectConfigProperty.hs b/gen/Stratosphere/AppSync/GraphQLApi/OpenIDConnectConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/GraphQLApi/OpenIDConnectConfigProperty.hs
@@ -0,0 +1,63 @@
+module Stratosphere.AppSync.GraphQLApi.OpenIDConnectConfigProperty (
+        OpenIDConnectConfigProperty(..), mkOpenIDConnectConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OpenIDConnectConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-openidconnectconfig.html>
+    OpenIDConnectConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-openidconnectconfig.html#cfn-appsync-graphqlapi-openidconnectconfig-authttl>
+                                 authTTL :: (Prelude.Maybe (Value Prelude.Double)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-openidconnectconfig.html#cfn-appsync-graphqlapi-openidconnectconfig-clientid>
+                                 clientId :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-openidconnectconfig.html#cfn-appsync-graphqlapi-openidconnectconfig-iatttl>
+                                 iatTTL :: (Prelude.Maybe (Value Prelude.Double)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-openidconnectconfig.html#cfn-appsync-graphqlapi-openidconnectconfig-issuer>
+                                 issuer :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOpenIDConnectConfigProperty :: OpenIDConnectConfigProperty
+mkOpenIDConnectConfigProperty
+  = OpenIDConnectConfigProperty
+      {haddock_workaround_ = (), authTTL = Prelude.Nothing,
+       clientId = Prelude.Nothing, iatTTL = Prelude.Nothing,
+       issuer = Prelude.Nothing}
+instance ToResourceProperties OpenIDConnectConfigProperty where
+  toResourceProperties OpenIDConnectConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::GraphQLApi.OpenIDConnectConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AuthTTL" Prelude.<$> authTTL,
+                            (JSON..=) "ClientId" Prelude.<$> clientId,
+                            (JSON..=) "IatTTL" Prelude.<$> iatTTL,
+                            (JSON..=) "Issuer" Prelude.<$> issuer])}
+instance JSON.ToJSON OpenIDConnectConfigProperty where
+  toJSON OpenIDConnectConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AuthTTL" Prelude.<$> authTTL,
+               (JSON..=) "ClientId" Prelude.<$> clientId,
+               (JSON..=) "IatTTL" Prelude.<$> iatTTL,
+               (JSON..=) "Issuer" Prelude.<$> issuer]))
+instance Property "AuthTTL" OpenIDConnectConfigProperty where
+  type PropertyType "AuthTTL" OpenIDConnectConfigProperty = Value Prelude.Double
+  set newValue OpenIDConnectConfigProperty {..}
+    = OpenIDConnectConfigProperty {authTTL = Prelude.pure newValue, ..}
+instance Property "ClientId" OpenIDConnectConfigProperty where
+  type PropertyType "ClientId" OpenIDConnectConfigProperty = Value Prelude.Text
+  set newValue OpenIDConnectConfigProperty {..}
+    = OpenIDConnectConfigProperty
+        {clientId = Prelude.pure newValue, ..}
+instance Property "IatTTL" OpenIDConnectConfigProperty where
+  type PropertyType "IatTTL" OpenIDConnectConfigProperty = Value Prelude.Double
+  set newValue OpenIDConnectConfigProperty {..}
+    = OpenIDConnectConfigProperty {iatTTL = Prelude.pure newValue, ..}
+instance Property "Issuer" OpenIDConnectConfigProperty where
+  type PropertyType "Issuer" OpenIDConnectConfigProperty = Value Prelude.Text
+  set newValue OpenIDConnectConfigProperty {..}
+    = OpenIDConnectConfigProperty {issuer = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/GraphQLApi/OpenIDConnectConfigProperty.hs-boot b/gen/Stratosphere/AppSync/GraphQLApi/OpenIDConnectConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/GraphQLApi/OpenIDConnectConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.GraphQLApi.OpenIDConnectConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OpenIDConnectConfigProperty :: Prelude.Type
+instance ToResourceProperties OpenIDConnectConfigProperty
+instance Prelude.Eq OpenIDConnectConfigProperty
+instance Prelude.Show OpenIDConnectConfigProperty
+instance JSON.ToJSON OpenIDConnectConfigProperty
diff --git a/gen/Stratosphere/AppSync/GraphQLApi/UserPoolConfigProperty.hs b/gen/Stratosphere/AppSync/GraphQLApi/UserPoolConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/GraphQLApi/UserPoolConfigProperty.hs
@@ -0,0 +1,64 @@
+module Stratosphere.AppSync.GraphQLApi.UserPoolConfigProperty (
+        UserPoolConfigProperty(..), mkUserPoolConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data UserPoolConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-userpoolconfig.html>
+    UserPoolConfigProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-userpoolconfig.html#cfn-appsync-graphqlapi-userpoolconfig-appidclientregex>
+                            appIdClientRegex :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-userpoolconfig.html#cfn-appsync-graphqlapi-userpoolconfig-awsregion>
+                            awsRegion :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-userpoolconfig.html#cfn-appsync-graphqlapi-userpoolconfig-defaultaction>
+                            defaultAction :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-userpoolconfig.html#cfn-appsync-graphqlapi-userpoolconfig-userpoolid>
+                            userPoolId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUserPoolConfigProperty :: UserPoolConfigProperty
+mkUserPoolConfigProperty
+  = UserPoolConfigProperty
+      {haddock_workaround_ = (), appIdClientRegex = Prelude.Nothing,
+       awsRegion = Prelude.Nothing, defaultAction = Prelude.Nothing,
+       userPoolId = Prelude.Nothing}
+instance ToResourceProperties UserPoolConfigProperty where
+  toResourceProperties UserPoolConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::GraphQLApi.UserPoolConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AppIdClientRegex" Prelude.<$> appIdClientRegex,
+                            (JSON..=) "AwsRegion" Prelude.<$> awsRegion,
+                            (JSON..=) "DefaultAction" Prelude.<$> defaultAction,
+                            (JSON..=) "UserPoolId" Prelude.<$> userPoolId])}
+instance JSON.ToJSON UserPoolConfigProperty where
+  toJSON UserPoolConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AppIdClientRegex" Prelude.<$> appIdClientRegex,
+               (JSON..=) "AwsRegion" Prelude.<$> awsRegion,
+               (JSON..=) "DefaultAction" Prelude.<$> defaultAction,
+               (JSON..=) "UserPoolId" Prelude.<$> userPoolId]))
+instance Property "AppIdClientRegex" UserPoolConfigProperty where
+  type PropertyType "AppIdClientRegex" UserPoolConfigProperty = Value Prelude.Text
+  set newValue UserPoolConfigProperty {..}
+    = UserPoolConfigProperty
+        {appIdClientRegex = Prelude.pure newValue, ..}
+instance Property "AwsRegion" UserPoolConfigProperty where
+  type PropertyType "AwsRegion" UserPoolConfigProperty = Value Prelude.Text
+  set newValue UserPoolConfigProperty {..}
+    = UserPoolConfigProperty {awsRegion = Prelude.pure newValue, ..}
+instance Property "DefaultAction" UserPoolConfigProperty where
+  type PropertyType "DefaultAction" UserPoolConfigProperty = Value Prelude.Text
+  set newValue UserPoolConfigProperty {..}
+    = UserPoolConfigProperty
+        {defaultAction = Prelude.pure newValue, ..}
+instance Property "UserPoolId" UserPoolConfigProperty where
+  type PropertyType "UserPoolId" UserPoolConfigProperty = Value Prelude.Text
+  set newValue UserPoolConfigProperty {..}
+    = UserPoolConfigProperty {userPoolId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/GraphQLApi/UserPoolConfigProperty.hs-boot b/gen/Stratosphere/AppSync/GraphQLApi/UserPoolConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/GraphQLApi/UserPoolConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.GraphQLApi.UserPoolConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data UserPoolConfigProperty :: Prelude.Type
+instance ToResourceProperties UserPoolConfigProperty
+instance Prelude.Eq UserPoolConfigProperty
+instance Prelude.Show UserPoolConfigProperty
+instance JSON.ToJSON UserPoolConfigProperty
diff --git a/gen/Stratosphere/AppSync/GraphQLSchema.hs b/gen/Stratosphere/AppSync/GraphQLSchema.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/GraphQLSchema.hs
@@ -0,0 +1,58 @@
+module Stratosphere.AppSync.GraphQLSchema (
+        GraphQLSchema(..), mkGraphQLSchema
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data GraphQLSchema
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlschema.html>
+    GraphQLSchema {haddock_workaround_ :: (),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlschema.html#cfn-appsync-graphqlschema-apiid>
+                   apiId :: (Value Prelude.Text),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlschema.html#cfn-appsync-graphqlschema-definition>
+                   definition :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlschema.html#cfn-appsync-graphqlschema-definitions3location>
+                   definitionS3Location :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGraphQLSchema :: Value Prelude.Text -> GraphQLSchema
+mkGraphQLSchema apiId
+  = GraphQLSchema
+      {haddock_workaround_ = (), apiId = apiId,
+       definition = Prelude.Nothing,
+       definitionS3Location = Prelude.Nothing}
+instance ToResourceProperties GraphQLSchema where
+  toResourceProperties GraphQLSchema {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::GraphQLSchema",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ApiId" JSON..= apiId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Definition" Prelude.<$> definition,
+                               (JSON..=) "DefinitionS3Location"
+                                 Prelude.<$> definitionS3Location]))}
+instance JSON.ToJSON GraphQLSchema where
+  toJSON GraphQLSchema {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ApiId" JSON..= apiId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Definition" Prelude.<$> definition,
+                  (JSON..=) "DefinitionS3Location"
+                    Prelude.<$> definitionS3Location])))
+instance Property "ApiId" GraphQLSchema where
+  type PropertyType "ApiId" GraphQLSchema = Value Prelude.Text
+  set newValue GraphQLSchema {..}
+    = GraphQLSchema {apiId = newValue, ..}
+instance Property "Definition" GraphQLSchema where
+  type PropertyType "Definition" GraphQLSchema = Value Prelude.Text
+  set newValue GraphQLSchema {..}
+    = GraphQLSchema {definition = Prelude.pure newValue, ..}
+instance Property "DefinitionS3Location" GraphQLSchema where
+  type PropertyType "DefinitionS3Location" GraphQLSchema = Value Prelude.Text
+  set newValue GraphQLSchema {..}
+    = GraphQLSchema {definitionS3Location = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/Resolver.hs b/gen/Stratosphere/AppSync/Resolver.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Resolver.hs
@@ -0,0 +1,186 @@
+module Stratosphere.AppSync.Resolver (
+        module Exports, Resolver(..), mkResolver
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.Resolver.AppSyncRuntimeProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.Resolver.CachingConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.Resolver.PipelineConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppSync.Resolver.SyncConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Resolver
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html>
+    Resolver {haddock_workaround_ :: (),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-apiid>
+              apiId :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-cachingconfig>
+              cachingConfig :: (Prelude.Maybe CachingConfigProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-code>
+              code :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-codes3location>
+              codeS3Location :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-datasourcename>
+              dataSourceName :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-fieldname>
+              fieldName :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-kind>
+              kind :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-maxbatchsize>
+              maxBatchSize :: (Prelude.Maybe (Value Prelude.Integer)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-metricsconfig>
+              metricsConfig :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-pipelineconfig>
+              pipelineConfig :: (Prelude.Maybe PipelineConfigProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-requestmappingtemplate>
+              requestMappingTemplate :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-requestmappingtemplates3location>
+              requestMappingTemplateS3Location :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-responsemappingtemplate>
+              responseMappingTemplate :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-responsemappingtemplates3location>
+              responseMappingTemplateS3Location :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-runtime>
+              runtime :: (Prelude.Maybe AppSyncRuntimeProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-syncconfig>
+              syncConfig :: (Prelude.Maybe SyncConfigProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-typename>
+              typeName :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResolver ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> Value Prelude.Text -> Resolver
+mkResolver apiId fieldName typeName
+  = Resolver
+      {haddock_workaround_ = (), apiId = apiId, fieldName = fieldName,
+       typeName = typeName, cachingConfig = Prelude.Nothing,
+       code = Prelude.Nothing, codeS3Location = Prelude.Nothing,
+       dataSourceName = Prelude.Nothing, kind = Prelude.Nothing,
+       maxBatchSize = Prelude.Nothing, metricsConfig = Prelude.Nothing,
+       pipelineConfig = Prelude.Nothing,
+       requestMappingTemplate = Prelude.Nothing,
+       requestMappingTemplateS3Location = Prelude.Nothing,
+       responseMappingTemplate = Prelude.Nothing,
+       responseMappingTemplateS3Location = Prelude.Nothing,
+       runtime = Prelude.Nothing, syncConfig = Prelude.Nothing}
+instance ToResourceProperties Resolver where
+  toResourceProperties Resolver {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::Resolver", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ApiId" JSON..= apiId, "FieldName" JSON..= fieldName,
+                            "TypeName" JSON..= typeName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CachingConfig" Prelude.<$> cachingConfig,
+                               (JSON..=) "Code" Prelude.<$> code,
+                               (JSON..=) "CodeS3Location" Prelude.<$> codeS3Location,
+                               (JSON..=) "DataSourceName" Prelude.<$> dataSourceName,
+                               (JSON..=) "Kind" Prelude.<$> kind,
+                               (JSON..=) "MaxBatchSize" Prelude.<$> maxBatchSize,
+                               (JSON..=) "MetricsConfig" Prelude.<$> metricsConfig,
+                               (JSON..=) "PipelineConfig" Prelude.<$> pipelineConfig,
+                               (JSON..=) "RequestMappingTemplate"
+                                 Prelude.<$> requestMappingTemplate,
+                               (JSON..=) "RequestMappingTemplateS3Location"
+                                 Prelude.<$> requestMappingTemplateS3Location,
+                               (JSON..=) "ResponseMappingTemplate"
+                                 Prelude.<$> responseMappingTemplate,
+                               (JSON..=) "ResponseMappingTemplateS3Location"
+                                 Prelude.<$> responseMappingTemplateS3Location,
+                               (JSON..=) "Runtime" Prelude.<$> runtime,
+                               (JSON..=) "SyncConfig" Prelude.<$> syncConfig]))}
+instance JSON.ToJSON Resolver where
+  toJSON Resolver {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ApiId" JSON..= apiId, "FieldName" JSON..= fieldName,
+               "TypeName" JSON..= typeName]
+              (Prelude.catMaybes
+                 [(JSON..=) "CachingConfig" Prelude.<$> cachingConfig,
+                  (JSON..=) "Code" Prelude.<$> code,
+                  (JSON..=) "CodeS3Location" Prelude.<$> codeS3Location,
+                  (JSON..=) "DataSourceName" Prelude.<$> dataSourceName,
+                  (JSON..=) "Kind" Prelude.<$> kind,
+                  (JSON..=) "MaxBatchSize" Prelude.<$> maxBatchSize,
+                  (JSON..=) "MetricsConfig" Prelude.<$> metricsConfig,
+                  (JSON..=) "PipelineConfig" Prelude.<$> pipelineConfig,
+                  (JSON..=) "RequestMappingTemplate"
+                    Prelude.<$> requestMappingTemplate,
+                  (JSON..=) "RequestMappingTemplateS3Location"
+                    Prelude.<$> requestMappingTemplateS3Location,
+                  (JSON..=) "ResponseMappingTemplate"
+                    Prelude.<$> responseMappingTemplate,
+                  (JSON..=) "ResponseMappingTemplateS3Location"
+                    Prelude.<$> responseMappingTemplateS3Location,
+                  (JSON..=) "Runtime" Prelude.<$> runtime,
+                  (JSON..=) "SyncConfig" Prelude.<$> syncConfig])))
+instance Property "ApiId" Resolver where
+  type PropertyType "ApiId" Resolver = Value Prelude.Text
+  set newValue Resolver {..} = Resolver {apiId = newValue, ..}
+instance Property "CachingConfig" Resolver where
+  type PropertyType "CachingConfig" Resolver = CachingConfigProperty
+  set newValue Resolver {..}
+    = Resolver {cachingConfig = Prelude.pure newValue, ..}
+instance Property "Code" Resolver where
+  type PropertyType "Code" Resolver = Value Prelude.Text
+  set newValue Resolver {..}
+    = Resolver {code = Prelude.pure newValue, ..}
+instance Property "CodeS3Location" Resolver where
+  type PropertyType "CodeS3Location" Resolver = Value Prelude.Text
+  set newValue Resolver {..}
+    = Resolver {codeS3Location = Prelude.pure newValue, ..}
+instance Property "DataSourceName" Resolver where
+  type PropertyType "DataSourceName" Resolver = Value Prelude.Text
+  set newValue Resolver {..}
+    = Resolver {dataSourceName = Prelude.pure newValue, ..}
+instance Property "FieldName" Resolver where
+  type PropertyType "FieldName" Resolver = Value Prelude.Text
+  set newValue Resolver {..} = Resolver {fieldName = newValue, ..}
+instance Property "Kind" Resolver where
+  type PropertyType "Kind" Resolver = Value Prelude.Text
+  set newValue Resolver {..}
+    = Resolver {kind = Prelude.pure newValue, ..}
+instance Property "MaxBatchSize" Resolver where
+  type PropertyType "MaxBatchSize" Resolver = Value Prelude.Integer
+  set newValue Resolver {..}
+    = Resolver {maxBatchSize = Prelude.pure newValue, ..}
+instance Property "MetricsConfig" Resolver where
+  type PropertyType "MetricsConfig" Resolver = Value Prelude.Text
+  set newValue Resolver {..}
+    = Resolver {metricsConfig = Prelude.pure newValue, ..}
+instance Property "PipelineConfig" Resolver where
+  type PropertyType "PipelineConfig" Resolver = PipelineConfigProperty
+  set newValue Resolver {..}
+    = Resolver {pipelineConfig = Prelude.pure newValue, ..}
+instance Property "RequestMappingTemplate" Resolver where
+  type PropertyType "RequestMappingTemplate" Resolver = Value Prelude.Text
+  set newValue Resolver {..}
+    = Resolver {requestMappingTemplate = Prelude.pure newValue, ..}
+instance Property "RequestMappingTemplateS3Location" Resolver where
+  type PropertyType "RequestMappingTemplateS3Location" Resolver = Value Prelude.Text
+  set newValue Resolver {..}
+    = Resolver
+        {requestMappingTemplateS3Location = Prelude.pure newValue, ..}
+instance Property "ResponseMappingTemplate" Resolver where
+  type PropertyType "ResponseMappingTemplate" Resolver = Value Prelude.Text
+  set newValue Resolver {..}
+    = Resolver {responseMappingTemplate = Prelude.pure newValue, ..}
+instance Property "ResponseMappingTemplateS3Location" Resolver where
+  type PropertyType "ResponseMappingTemplateS3Location" Resolver = Value Prelude.Text
+  set newValue Resolver {..}
+    = Resolver
+        {responseMappingTemplateS3Location = Prelude.pure newValue, ..}
+instance Property "Runtime" Resolver where
+  type PropertyType "Runtime" Resolver = AppSyncRuntimeProperty
+  set newValue Resolver {..}
+    = Resolver {runtime = Prelude.pure newValue, ..}
+instance Property "SyncConfig" Resolver where
+  type PropertyType "SyncConfig" Resolver = SyncConfigProperty
+  set newValue Resolver {..}
+    = Resolver {syncConfig = Prelude.pure newValue, ..}
+instance Property "TypeName" Resolver where
+  type PropertyType "TypeName" Resolver = Value Prelude.Text
+  set newValue Resolver {..} = Resolver {typeName = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/Resolver/AppSyncRuntimeProperty.hs b/gen/Stratosphere/AppSync/Resolver/AppSyncRuntimeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Resolver/AppSyncRuntimeProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.AppSync.Resolver.AppSyncRuntimeProperty (
+        AppSyncRuntimeProperty(..), mkAppSyncRuntimeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AppSyncRuntimeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-resolver-appsyncruntime.html>
+    AppSyncRuntimeProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-resolver-appsyncruntime.html#cfn-appsync-resolver-appsyncruntime-name>
+                            name :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-resolver-appsyncruntime.html#cfn-appsync-resolver-appsyncruntime-runtimeversion>
+                            runtimeVersion :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAppSyncRuntimeProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> AppSyncRuntimeProperty
+mkAppSyncRuntimeProperty name runtimeVersion
+  = AppSyncRuntimeProperty
+      {haddock_workaround_ = (), name = name,
+       runtimeVersion = runtimeVersion}
+instance ToResourceProperties AppSyncRuntimeProperty where
+  toResourceProperties AppSyncRuntimeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::Resolver.AppSyncRuntime",
+         supportsTags = Prelude.False,
+         properties = ["Name" JSON..= name,
+                       "RuntimeVersion" JSON..= runtimeVersion]}
+instance JSON.ToJSON AppSyncRuntimeProperty where
+  toJSON AppSyncRuntimeProperty {..}
+    = JSON.object
+        ["Name" JSON..= name, "RuntimeVersion" JSON..= runtimeVersion]
+instance Property "Name" AppSyncRuntimeProperty where
+  type PropertyType "Name" AppSyncRuntimeProperty = Value Prelude.Text
+  set newValue AppSyncRuntimeProperty {..}
+    = AppSyncRuntimeProperty {name = newValue, ..}
+instance Property "RuntimeVersion" AppSyncRuntimeProperty where
+  type PropertyType "RuntimeVersion" AppSyncRuntimeProperty = Value Prelude.Text
+  set newValue AppSyncRuntimeProperty {..}
+    = AppSyncRuntimeProperty {runtimeVersion = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/Resolver/AppSyncRuntimeProperty.hs-boot b/gen/Stratosphere/AppSync/Resolver/AppSyncRuntimeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Resolver/AppSyncRuntimeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.Resolver.AppSyncRuntimeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AppSyncRuntimeProperty :: Prelude.Type
+instance ToResourceProperties AppSyncRuntimeProperty
+instance Prelude.Eq AppSyncRuntimeProperty
+instance Prelude.Show AppSyncRuntimeProperty
+instance JSON.ToJSON AppSyncRuntimeProperty
diff --git a/gen/Stratosphere/AppSync/Resolver/CachingConfigProperty.hs b/gen/Stratosphere/AppSync/Resolver/CachingConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Resolver/CachingConfigProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.AppSync.Resolver.CachingConfigProperty (
+        CachingConfigProperty(..), mkCachingConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CachingConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-resolver-cachingconfig.html>
+    CachingConfigProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-resolver-cachingconfig.html#cfn-appsync-resolver-cachingconfig-cachingkeys>
+                           cachingKeys :: (Prelude.Maybe (ValueList Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-resolver-cachingconfig.html#cfn-appsync-resolver-cachingconfig-ttl>
+                           ttl :: (Value Prelude.Double)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCachingConfigProperty ::
+  Value Prelude.Double -> CachingConfigProperty
+mkCachingConfigProperty ttl
+  = CachingConfigProperty
+      {haddock_workaround_ = (), ttl = ttl,
+       cachingKeys = Prelude.Nothing}
+instance ToResourceProperties CachingConfigProperty where
+  toResourceProperties CachingConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::Resolver.CachingConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Ttl" JSON..= ttl]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CachingKeys" Prelude.<$> cachingKeys]))}
+instance JSON.ToJSON CachingConfigProperty where
+  toJSON CachingConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Ttl" JSON..= ttl]
+              (Prelude.catMaybes
+                 [(JSON..=) "CachingKeys" Prelude.<$> cachingKeys])))
+instance Property "CachingKeys" CachingConfigProperty where
+  type PropertyType "CachingKeys" CachingConfigProperty = ValueList Prelude.Text
+  set newValue CachingConfigProperty {..}
+    = CachingConfigProperty {cachingKeys = Prelude.pure newValue, ..}
+instance Property "Ttl" CachingConfigProperty where
+  type PropertyType "Ttl" CachingConfigProperty = Value Prelude.Double
+  set newValue CachingConfigProperty {..}
+    = CachingConfigProperty {ttl = newValue, ..}
diff --git a/gen/Stratosphere/AppSync/Resolver/CachingConfigProperty.hs-boot b/gen/Stratosphere/AppSync/Resolver/CachingConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Resolver/CachingConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.Resolver.CachingConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CachingConfigProperty :: Prelude.Type
+instance ToResourceProperties CachingConfigProperty
+instance Prelude.Eq CachingConfigProperty
+instance Prelude.Show CachingConfigProperty
+instance JSON.ToJSON CachingConfigProperty
diff --git a/gen/Stratosphere/AppSync/Resolver/LambdaConflictHandlerConfigProperty.hs b/gen/Stratosphere/AppSync/Resolver/LambdaConflictHandlerConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Resolver/LambdaConflictHandlerConfigProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.AppSync.Resolver.LambdaConflictHandlerConfigProperty (
+        LambdaConflictHandlerConfigProperty(..),
+        mkLambdaConflictHandlerConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LambdaConflictHandlerConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-resolver-lambdaconflicthandlerconfig.html>
+    LambdaConflictHandlerConfigProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-resolver-lambdaconflicthandlerconfig.html#cfn-appsync-resolver-lambdaconflicthandlerconfig-lambdaconflicthandlerarn>
+                                         lambdaConflictHandlerArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLambdaConflictHandlerConfigProperty ::
+  LambdaConflictHandlerConfigProperty
+mkLambdaConflictHandlerConfigProperty
+  = LambdaConflictHandlerConfigProperty
+      {haddock_workaround_ = (),
+       lambdaConflictHandlerArn = Prelude.Nothing}
+instance ToResourceProperties LambdaConflictHandlerConfigProperty where
+  toResourceProperties LambdaConflictHandlerConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::Resolver.LambdaConflictHandlerConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "LambdaConflictHandlerArn"
+                              Prelude.<$> lambdaConflictHandlerArn])}
+instance JSON.ToJSON LambdaConflictHandlerConfigProperty where
+  toJSON LambdaConflictHandlerConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "LambdaConflictHandlerArn"
+                 Prelude.<$> lambdaConflictHandlerArn]))
+instance Property "LambdaConflictHandlerArn" LambdaConflictHandlerConfigProperty where
+  type PropertyType "LambdaConflictHandlerArn" LambdaConflictHandlerConfigProperty = Value Prelude.Text
+  set newValue LambdaConflictHandlerConfigProperty {..}
+    = LambdaConflictHandlerConfigProperty
+        {lambdaConflictHandlerArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/Resolver/LambdaConflictHandlerConfigProperty.hs-boot b/gen/Stratosphere/AppSync/Resolver/LambdaConflictHandlerConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Resolver/LambdaConflictHandlerConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.Resolver.LambdaConflictHandlerConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LambdaConflictHandlerConfigProperty :: Prelude.Type
+instance ToResourceProperties LambdaConflictHandlerConfigProperty
+instance Prelude.Eq LambdaConflictHandlerConfigProperty
+instance Prelude.Show LambdaConflictHandlerConfigProperty
+instance JSON.ToJSON LambdaConflictHandlerConfigProperty
diff --git a/gen/Stratosphere/AppSync/Resolver/PipelineConfigProperty.hs b/gen/Stratosphere/AppSync/Resolver/PipelineConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Resolver/PipelineConfigProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.AppSync.Resolver.PipelineConfigProperty (
+        PipelineConfigProperty(..), mkPipelineConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PipelineConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-resolver-pipelineconfig.html>
+    PipelineConfigProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-resolver-pipelineconfig.html#cfn-appsync-resolver-pipelineconfig-functions>
+                            functions :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPipelineConfigProperty :: PipelineConfigProperty
+mkPipelineConfigProperty
+  = PipelineConfigProperty
+      {haddock_workaround_ = (), functions = Prelude.Nothing}
+instance ToResourceProperties PipelineConfigProperty where
+  toResourceProperties PipelineConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::Resolver.PipelineConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Functions" Prelude.<$> functions])}
+instance JSON.ToJSON PipelineConfigProperty where
+  toJSON PipelineConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Functions" Prelude.<$> functions]))
+instance Property "Functions" PipelineConfigProperty where
+  type PropertyType "Functions" PipelineConfigProperty = ValueList Prelude.Text
+  set newValue PipelineConfigProperty {..}
+    = PipelineConfigProperty {functions = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/Resolver/PipelineConfigProperty.hs-boot b/gen/Stratosphere/AppSync/Resolver/PipelineConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Resolver/PipelineConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.Resolver.PipelineConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PipelineConfigProperty :: Prelude.Type
+instance ToResourceProperties PipelineConfigProperty
+instance Prelude.Eq PipelineConfigProperty
+instance Prelude.Show PipelineConfigProperty
+instance JSON.ToJSON PipelineConfigProperty
diff --git a/gen/Stratosphere/AppSync/Resolver/SyncConfigProperty.hs b/gen/Stratosphere/AppSync/Resolver/SyncConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Resolver/SyncConfigProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.AppSync.Resolver.SyncConfigProperty (
+        module Exports, SyncConfigProperty(..), mkSyncConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.Resolver.LambdaConflictHandlerConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SyncConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-resolver-syncconfig.html>
+    SyncConfigProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-resolver-syncconfig.html#cfn-appsync-resolver-syncconfig-conflictdetection>
+                        conflictDetection :: (Value Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-resolver-syncconfig.html#cfn-appsync-resolver-syncconfig-conflicthandler>
+                        conflictHandler :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-resolver-syncconfig.html#cfn-appsync-resolver-syncconfig-lambdaconflicthandlerconfig>
+                        lambdaConflictHandlerConfig :: (Prelude.Maybe LambdaConflictHandlerConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSyncConfigProperty :: Value Prelude.Text -> SyncConfigProperty
+mkSyncConfigProperty conflictDetection
+  = SyncConfigProperty
+      {haddock_workaround_ = (), conflictDetection = conflictDetection,
+       conflictHandler = Prelude.Nothing,
+       lambdaConflictHandlerConfig = Prelude.Nothing}
+instance ToResourceProperties SyncConfigProperty where
+  toResourceProperties SyncConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::Resolver.SyncConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ConflictDetection" JSON..= conflictDetection]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ConflictHandler" Prelude.<$> conflictHandler,
+                               (JSON..=) "LambdaConflictHandlerConfig"
+                                 Prelude.<$> lambdaConflictHandlerConfig]))}
+instance JSON.ToJSON SyncConfigProperty where
+  toJSON SyncConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ConflictDetection" JSON..= conflictDetection]
+              (Prelude.catMaybes
+                 [(JSON..=) "ConflictHandler" Prelude.<$> conflictHandler,
+                  (JSON..=) "LambdaConflictHandlerConfig"
+                    Prelude.<$> lambdaConflictHandlerConfig])))
+instance Property "ConflictDetection" SyncConfigProperty where
+  type PropertyType "ConflictDetection" SyncConfigProperty = Value Prelude.Text
+  set newValue SyncConfigProperty {..}
+    = SyncConfigProperty {conflictDetection = newValue, ..}
+instance Property "ConflictHandler" SyncConfigProperty where
+  type PropertyType "ConflictHandler" SyncConfigProperty = Value Prelude.Text
+  set newValue SyncConfigProperty {..}
+    = SyncConfigProperty {conflictHandler = Prelude.pure newValue, ..}
+instance Property "LambdaConflictHandlerConfig" SyncConfigProperty where
+  type PropertyType "LambdaConflictHandlerConfig" SyncConfigProperty = LambdaConflictHandlerConfigProperty
+  set newValue SyncConfigProperty {..}
+    = SyncConfigProperty
+        {lambdaConflictHandlerConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/Resolver/SyncConfigProperty.hs-boot b/gen/Stratosphere/AppSync/Resolver/SyncConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/Resolver/SyncConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.Resolver.SyncConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SyncConfigProperty :: Prelude.Type
+instance ToResourceProperties SyncConfigProperty
+instance Prelude.Eq SyncConfigProperty
+instance Prelude.Show SyncConfigProperty
+instance JSON.ToJSON SyncConfigProperty
diff --git a/gen/Stratosphere/AppSync/SourceApiAssociation.hs b/gen/Stratosphere/AppSync/SourceApiAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/SourceApiAssociation.hs
@@ -0,0 +1,69 @@
+module Stratosphere.AppSync.SourceApiAssociation (
+        module Exports, SourceApiAssociation(..), mkSourceApiAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppSync.SourceApiAssociation.SourceApiAssociationConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SourceApiAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-sourceapiassociation.html>
+    SourceApiAssociation {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-sourceapiassociation.html#cfn-appsync-sourceapiassociation-description>
+                          description :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-sourceapiassociation.html#cfn-appsync-sourceapiassociation-mergedapiidentifier>
+                          mergedApiIdentifier :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-sourceapiassociation.html#cfn-appsync-sourceapiassociation-sourceapiassociationconfig>
+                          sourceApiAssociationConfig :: (Prelude.Maybe SourceApiAssociationConfigProperty),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-sourceapiassociation.html#cfn-appsync-sourceapiassociation-sourceapiidentifier>
+                          sourceApiIdentifier :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSourceApiAssociation :: SourceApiAssociation
+mkSourceApiAssociation
+  = SourceApiAssociation
+      {haddock_workaround_ = (), description = Prelude.Nothing,
+       mergedApiIdentifier = Prelude.Nothing,
+       sourceApiAssociationConfig = Prelude.Nothing,
+       sourceApiIdentifier = Prelude.Nothing}
+instance ToResourceProperties SourceApiAssociation where
+  toResourceProperties SourceApiAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::SourceApiAssociation",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Description" Prelude.<$> description,
+                            (JSON..=) "MergedApiIdentifier" Prelude.<$> mergedApiIdentifier,
+                            (JSON..=) "SourceApiAssociationConfig"
+                              Prelude.<$> sourceApiAssociationConfig,
+                            (JSON..=) "SourceApiIdentifier" Prelude.<$> sourceApiIdentifier])}
+instance JSON.ToJSON SourceApiAssociation where
+  toJSON SourceApiAssociation {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Description" Prelude.<$> description,
+               (JSON..=) "MergedApiIdentifier" Prelude.<$> mergedApiIdentifier,
+               (JSON..=) "SourceApiAssociationConfig"
+                 Prelude.<$> sourceApiAssociationConfig,
+               (JSON..=) "SourceApiIdentifier" Prelude.<$> sourceApiIdentifier]))
+instance Property "Description" SourceApiAssociation where
+  type PropertyType "Description" SourceApiAssociation = Value Prelude.Text
+  set newValue SourceApiAssociation {..}
+    = SourceApiAssociation {description = Prelude.pure newValue, ..}
+instance Property "MergedApiIdentifier" SourceApiAssociation where
+  type PropertyType "MergedApiIdentifier" SourceApiAssociation = Value Prelude.Text
+  set newValue SourceApiAssociation {..}
+    = SourceApiAssociation
+        {mergedApiIdentifier = Prelude.pure newValue, ..}
+instance Property "SourceApiAssociationConfig" SourceApiAssociation where
+  type PropertyType "SourceApiAssociationConfig" SourceApiAssociation = SourceApiAssociationConfigProperty
+  set newValue SourceApiAssociation {..}
+    = SourceApiAssociation
+        {sourceApiAssociationConfig = Prelude.pure newValue, ..}
+instance Property "SourceApiIdentifier" SourceApiAssociation where
+  type PropertyType "SourceApiIdentifier" SourceApiAssociation = Value Prelude.Text
+  set newValue SourceApiAssociation {..}
+    = SourceApiAssociation
+        {sourceApiIdentifier = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/SourceApiAssociation/SourceApiAssociationConfigProperty.hs b/gen/Stratosphere/AppSync/SourceApiAssociation/SourceApiAssociationConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/SourceApiAssociation/SourceApiAssociationConfigProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.AppSync.SourceApiAssociation.SourceApiAssociationConfigProperty (
+        SourceApiAssociationConfigProperty(..),
+        mkSourceApiAssociationConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SourceApiAssociationConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-sourceapiassociation-sourceapiassociationconfig.html>
+    SourceApiAssociationConfigProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-sourceapiassociation-sourceapiassociationconfig.html#cfn-appsync-sourceapiassociation-sourceapiassociationconfig-mergetype>
+                                        mergeType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSourceApiAssociationConfigProperty ::
+  SourceApiAssociationConfigProperty
+mkSourceApiAssociationConfigProperty
+  = SourceApiAssociationConfigProperty
+      {haddock_workaround_ = (), mergeType = Prelude.Nothing}
+instance ToResourceProperties SourceApiAssociationConfigProperty where
+  toResourceProperties SourceApiAssociationConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppSync::SourceApiAssociation.SourceApiAssociationConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "MergeType" Prelude.<$> mergeType])}
+instance JSON.ToJSON SourceApiAssociationConfigProperty where
+  toJSON SourceApiAssociationConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "MergeType" Prelude.<$> mergeType]))
+instance Property "MergeType" SourceApiAssociationConfigProperty where
+  type PropertyType "MergeType" SourceApiAssociationConfigProperty = Value Prelude.Text
+  set newValue SourceApiAssociationConfigProperty {..}
+    = SourceApiAssociationConfigProperty
+        {mergeType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppSync/SourceApiAssociation/SourceApiAssociationConfigProperty.hs-boot b/gen/Stratosphere/AppSync/SourceApiAssociation/SourceApiAssociationConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppSync/SourceApiAssociation/SourceApiAssociationConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppSync.SourceApiAssociation.SourceApiAssociationConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SourceApiAssociationConfigProperty :: Prelude.Type
+instance ToResourceProperties SourceApiAssociationConfigProperty
+instance Prelude.Eq SourceApiAssociationConfigProperty
+instance Prelude.Show SourceApiAssociationConfigProperty
+instance JSON.ToJSON SourceApiAssociationConfigProperty
diff --git a/stratosphere-appsync.cabal b/stratosphere-appsync.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-appsync.cabal
@@ -0,0 +1,123 @@
+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-appsync
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS AppSync.
+description:    Integration into stratosphere to generate resources and properties for AWS AppSync
+category:       AWS, Cloud, AppSync
+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.AppSync.Api
+      Stratosphere.AppSync.Api.AuthModeProperty
+      Stratosphere.AppSync.Api.AuthProviderProperty
+      Stratosphere.AppSync.Api.CognitoConfigProperty
+      Stratosphere.AppSync.Api.DnsMapProperty
+      Stratosphere.AppSync.Api.EventConfigProperty
+      Stratosphere.AppSync.Api.EventLogConfigProperty
+      Stratosphere.AppSync.Api.LambdaAuthorizerConfigProperty
+      Stratosphere.AppSync.Api.OpenIDConnectConfigProperty
+      Stratosphere.AppSync.ApiCache
+      Stratosphere.AppSync.ApiKey
+      Stratosphere.AppSync.ChannelNamespace
+      Stratosphere.AppSync.ChannelNamespace.AuthModeProperty
+      Stratosphere.AppSync.ChannelNamespace.HandlerConfigProperty
+      Stratosphere.AppSync.ChannelNamespace.HandlerConfigsProperty
+      Stratosphere.AppSync.ChannelNamespace.IntegrationProperty
+      Stratosphere.AppSync.ChannelNamespace.LambdaConfigProperty
+      Stratosphere.AppSync.DataSource
+      Stratosphere.AppSync.DataSource.AuthorizationConfigProperty
+      Stratosphere.AppSync.DataSource.AwsIamConfigProperty
+      Stratosphere.AppSync.DataSource.DeltaSyncConfigProperty
+      Stratosphere.AppSync.DataSource.DynamoDBConfigProperty
+      Stratosphere.AppSync.DataSource.EventBridgeConfigProperty
+      Stratosphere.AppSync.DataSource.HttpConfigProperty
+      Stratosphere.AppSync.DataSource.LambdaConfigProperty
+      Stratosphere.AppSync.DataSource.OpenSearchServiceConfigProperty
+      Stratosphere.AppSync.DataSource.RdsHttpEndpointConfigProperty
+      Stratosphere.AppSync.DataSource.RelationalDatabaseConfigProperty
+      Stratosphere.AppSync.DomainName
+      Stratosphere.AppSync.DomainNameApiAssociation
+      Stratosphere.AppSync.FunctionConfiguration
+      Stratosphere.AppSync.FunctionConfiguration.AppSyncRuntimeProperty
+      Stratosphere.AppSync.FunctionConfiguration.LambdaConflictHandlerConfigProperty
+      Stratosphere.AppSync.FunctionConfiguration.SyncConfigProperty
+      Stratosphere.AppSync.GraphQLApi
+      Stratosphere.AppSync.GraphQLApi.AdditionalAuthenticationProviderProperty
+      Stratosphere.AppSync.GraphQLApi.CognitoUserPoolConfigProperty
+      Stratosphere.AppSync.GraphQLApi.EnhancedMetricsConfigProperty
+      Stratosphere.AppSync.GraphQLApi.LambdaAuthorizerConfigProperty
+      Stratosphere.AppSync.GraphQLApi.LogConfigProperty
+      Stratosphere.AppSync.GraphQLApi.OpenIDConnectConfigProperty
+      Stratosphere.AppSync.GraphQLApi.UserPoolConfigProperty
+      Stratosphere.AppSync.GraphQLSchema
+      Stratosphere.AppSync.Resolver
+      Stratosphere.AppSync.Resolver.AppSyncRuntimeProperty
+      Stratosphere.AppSync.Resolver.CachingConfigProperty
+      Stratosphere.AppSync.Resolver.LambdaConflictHandlerConfigProperty
+      Stratosphere.AppSync.Resolver.PipelineConfigProperty
+      Stratosphere.AppSync.Resolver.SyncConfigProperty
+      Stratosphere.AppSync.SourceApiAssociation
+      Stratosphere.AppSync.SourceApiAssociation.SourceApiAssociationConfigProperty
+  other-modules:
+      Paths_stratosphere_appsync
+  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
