diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Change Log
 
+## 0.36.0
+
+* Update resource specification document to version 2.29.0
+
 ## 0.35.0
 
 * Use a GADT for `Val a` so it is properly typed. This shouldn't break any
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # Stratosphere: AWS CloudFormation in Haskell
 
-[![Circle CI](https://circleci.com/gh/frontrowed/stratosphere.svg?style=svg)](https://circleci.com/gh/frontrowed/stratosphere)
+[![Circle CI](https://circleci.com/gh/freckle/stratosphere.svg?style=svg)](https://circleci.com/gh/freckle/stratosphere)
 
 AWS CloudFormation is a system that provisions and updates Amazon Web Services
 (AWS) resources based on declarative templates. Common criticisms of
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshMeshEgressFilter.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshMeshEgressFilter.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshMeshEgressFilter.hs
@@ -0,0 +1,39 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-mesh-egressfilter.html
+
+module Stratosphere.ResourceProperties.AppMeshMeshEgressFilter where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppMeshMeshEgressFilter. See
+-- 'appMeshMeshEgressFilter' for a more convenient constructor.
+data AppMeshMeshEgressFilter =
+  AppMeshMeshEgressFilter
+  { _appMeshMeshEgressFilterType :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshMeshEgressFilter where
+  toJSON AppMeshMeshEgressFilter{..} =
+    object $
+    catMaybes
+    [ (Just . ("Type",) . toJSON) _appMeshMeshEgressFilterType
+    ]
+
+-- | Constructor for 'AppMeshMeshEgressFilter' containing required fields as
+-- arguments.
+appMeshMeshEgressFilter
+  :: Val Text -- ^ 'ammefType'
+  -> AppMeshMeshEgressFilter
+appMeshMeshEgressFilter typearg =
+  AppMeshMeshEgressFilter
+  { _appMeshMeshEgressFilterType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-mesh-egressfilter.html#cfn-appmesh-mesh-egressfilter-type
+ammefType :: Lens' AppMeshMeshEgressFilter (Val Text)
+ammefType = lens _appMeshMeshEgressFilterType (\s a -> s { _appMeshMeshEgressFilterType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshMeshMeshSpec.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshMeshMeshSpec.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshMeshMeshSpec.hs
@@ -0,0 +1,38 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-mesh-meshspec.html
+
+module Stratosphere.ResourceProperties.AppMeshMeshMeshSpec where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshMeshEgressFilter
+
+-- | Full data type definition for AppMeshMeshMeshSpec. See
+-- 'appMeshMeshMeshSpec' for a more convenient constructor.
+data AppMeshMeshMeshSpec =
+  AppMeshMeshMeshSpec
+  { _appMeshMeshMeshSpecEgressFilter :: Maybe AppMeshMeshEgressFilter
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshMeshMeshSpec where
+  toJSON AppMeshMeshMeshSpec{..} =
+    object $
+    catMaybes
+    [ fmap (("EgressFilter",) . toJSON) _appMeshMeshMeshSpecEgressFilter
+    ]
+
+-- | Constructor for 'AppMeshMeshMeshSpec' containing required fields as
+-- arguments.
+appMeshMeshMeshSpec
+  :: AppMeshMeshMeshSpec
+appMeshMeshMeshSpec  =
+  AppMeshMeshMeshSpec
+  { _appMeshMeshMeshSpecEgressFilter = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-mesh-meshspec.html#cfn-appmesh-mesh-meshspec-egressfilter
+ammmsEgressFilter :: Lens' AppMeshMeshMeshSpec (Maybe AppMeshMeshEgressFilter)
+ammmsEgressFilter = lens _appMeshMeshMeshSpecEgressFilter (\s a -> s { _appMeshMeshMeshSpecEgressFilter = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshMeshTagRef.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshMeshTagRef.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshMeshTagRef.hs
@@ -0,0 +1,46 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-mesh-tagref.html
+
+module Stratosphere.ResourceProperties.AppMeshMeshTagRef where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppMeshMeshTagRef. See 'appMeshMeshTagRef'
+-- for a more convenient constructor.
+data AppMeshMeshTagRef =
+  AppMeshMeshTagRef
+  { _appMeshMeshTagRefKey :: Val Text
+  , _appMeshMeshTagRefValue :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshMeshTagRef where
+  toJSON AppMeshMeshTagRef{..} =
+    object $
+    catMaybes
+    [ (Just . ("Key",) . toJSON) _appMeshMeshTagRefKey
+    , fmap (("Value",) . toJSON) _appMeshMeshTagRefValue
+    ]
+
+-- | Constructor for 'AppMeshMeshTagRef' containing required fields as
+-- arguments.
+appMeshMeshTagRef
+  :: Val Text -- ^ 'ammtrKey'
+  -> AppMeshMeshTagRef
+appMeshMeshTagRef keyarg =
+  AppMeshMeshTagRef
+  { _appMeshMeshTagRefKey = keyarg
+  , _appMeshMeshTagRefValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-mesh-tagref.html#cfn-appmesh-mesh-tagref-key
+ammtrKey :: Lens' AppMeshMeshTagRef (Val Text)
+ammtrKey = lens _appMeshMeshTagRefKey (\s a -> s { _appMeshMeshTagRefKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-mesh-tagref.html#cfn-appmesh-mesh-tagref-value
+ammtrValue :: Lens' AppMeshMeshTagRef (Maybe (Val Text))
+ammtrValue = lens _appMeshMeshTagRefValue (\s a -> s { _appMeshMeshTagRefValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshRouteHttpRoute.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshRouteHttpRoute.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshRouteHttpRoute.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-httproute.html
+
+module Stratosphere.ResourceProperties.AppMeshRouteHttpRoute where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshRouteHttpRouteAction
+import Stratosphere.ResourceProperties.AppMeshRouteHttpRouteMatch
+
+-- | Full data type definition for AppMeshRouteHttpRoute. See
+-- 'appMeshRouteHttpRoute' for a more convenient constructor.
+data AppMeshRouteHttpRoute =
+  AppMeshRouteHttpRoute
+  { _appMeshRouteHttpRouteAction :: AppMeshRouteHttpRouteAction
+  , _appMeshRouteHttpRouteMatch :: AppMeshRouteHttpRouteMatch
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshRouteHttpRoute where
+  toJSON AppMeshRouteHttpRoute{..} =
+    object $
+    catMaybes
+    [ (Just . ("Action",) . toJSON) _appMeshRouteHttpRouteAction
+    , (Just . ("Match",) . toJSON) _appMeshRouteHttpRouteMatch
+    ]
+
+-- | Constructor for 'AppMeshRouteHttpRoute' containing required fields as
+-- arguments.
+appMeshRouteHttpRoute
+  :: AppMeshRouteHttpRouteAction -- ^ 'amrhrAction'
+  -> AppMeshRouteHttpRouteMatch -- ^ 'amrhrMatch'
+  -> AppMeshRouteHttpRoute
+appMeshRouteHttpRoute actionarg matcharg =
+  AppMeshRouteHttpRoute
+  { _appMeshRouteHttpRouteAction = actionarg
+  , _appMeshRouteHttpRouteMatch = matcharg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-httproute.html#cfn-appmesh-route-httproute-action
+amrhrAction :: Lens' AppMeshRouteHttpRoute AppMeshRouteHttpRouteAction
+amrhrAction = lens _appMeshRouteHttpRouteAction (\s a -> s { _appMeshRouteHttpRouteAction = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-httproute.html#cfn-appmesh-route-httproute-match
+amrhrMatch :: Lens' AppMeshRouteHttpRoute AppMeshRouteHttpRouteMatch
+amrhrMatch = lens _appMeshRouteHttpRouteMatch (\s a -> s { _appMeshRouteHttpRouteMatch = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshRouteHttpRouteAction.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshRouteHttpRouteAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshRouteHttpRouteAction.hs
@@ -0,0 +1,39 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-httprouteaction.html
+
+module Stratosphere.ResourceProperties.AppMeshRouteHttpRouteAction where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshRouteWeightedTarget
+
+-- | Full data type definition for AppMeshRouteHttpRouteAction. See
+-- 'appMeshRouteHttpRouteAction' for a more convenient constructor.
+data AppMeshRouteHttpRouteAction =
+  AppMeshRouteHttpRouteAction
+  { _appMeshRouteHttpRouteActionWeightedTargets :: [AppMeshRouteWeightedTarget]
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshRouteHttpRouteAction where
+  toJSON AppMeshRouteHttpRouteAction{..} =
+    object $
+    catMaybes
+    [ (Just . ("WeightedTargets",) . toJSON) _appMeshRouteHttpRouteActionWeightedTargets
+    ]
+
+-- | Constructor for 'AppMeshRouteHttpRouteAction' containing required fields
+-- as arguments.
+appMeshRouteHttpRouteAction
+  :: [AppMeshRouteWeightedTarget] -- ^ 'amrhraWeightedTargets'
+  -> AppMeshRouteHttpRouteAction
+appMeshRouteHttpRouteAction weightedTargetsarg =
+  AppMeshRouteHttpRouteAction
+  { _appMeshRouteHttpRouteActionWeightedTargets = weightedTargetsarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-httprouteaction.html#cfn-appmesh-route-httprouteaction-weightedtargets
+amrhraWeightedTargets :: Lens' AppMeshRouteHttpRouteAction [AppMeshRouteWeightedTarget]
+amrhraWeightedTargets = lens _appMeshRouteHttpRouteActionWeightedTargets (\s a -> s { _appMeshRouteHttpRouteActionWeightedTargets = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshRouteHttpRouteMatch.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshRouteHttpRouteMatch.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshRouteHttpRouteMatch.hs
@@ -0,0 +1,39 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-httproutematch.html
+
+module Stratosphere.ResourceProperties.AppMeshRouteHttpRouteMatch where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppMeshRouteHttpRouteMatch. See
+-- 'appMeshRouteHttpRouteMatch' for a more convenient constructor.
+data AppMeshRouteHttpRouteMatch =
+  AppMeshRouteHttpRouteMatch
+  { _appMeshRouteHttpRouteMatchPrefix :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshRouteHttpRouteMatch where
+  toJSON AppMeshRouteHttpRouteMatch{..} =
+    object $
+    catMaybes
+    [ (Just . ("Prefix",) . toJSON) _appMeshRouteHttpRouteMatchPrefix
+    ]
+
+-- | Constructor for 'AppMeshRouteHttpRouteMatch' containing required fields
+-- as arguments.
+appMeshRouteHttpRouteMatch
+  :: Val Text -- ^ 'amrhrmPrefix'
+  -> AppMeshRouteHttpRouteMatch
+appMeshRouteHttpRouteMatch prefixarg =
+  AppMeshRouteHttpRouteMatch
+  { _appMeshRouteHttpRouteMatchPrefix = prefixarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-httproutematch.html#cfn-appmesh-route-httproutematch-prefix
+amrhrmPrefix :: Lens' AppMeshRouteHttpRouteMatch (Val Text)
+amrhrmPrefix = lens _appMeshRouteHttpRouteMatchPrefix (\s a -> s { _appMeshRouteHttpRouteMatchPrefix = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshRouteRouteSpec.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshRouteRouteSpec.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshRouteRouteSpec.hs
@@ -0,0 +1,46 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-routespec.html
+
+module Stratosphere.ResourceProperties.AppMeshRouteRouteSpec where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshRouteHttpRoute
+import Stratosphere.ResourceProperties.AppMeshRouteTcpRoute
+
+-- | Full data type definition for AppMeshRouteRouteSpec. See
+-- 'appMeshRouteRouteSpec' for a more convenient constructor.
+data AppMeshRouteRouteSpec =
+  AppMeshRouteRouteSpec
+  { _appMeshRouteRouteSpecHttpRoute :: Maybe AppMeshRouteHttpRoute
+  , _appMeshRouteRouteSpecTcpRoute :: Maybe AppMeshRouteTcpRoute
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshRouteRouteSpec where
+  toJSON AppMeshRouteRouteSpec{..} =
+    object $
+    catMaybes
+    [ fmap (("HttpRoute",) . toJSON) _appMeshRouteRouteSpecHttpRoute
+    , fmap (("TcpRoute",) . toJSON) _appMeshRouteRouteSpecTcpRoute
+    ]
+
+-- | Constructor for 'AppMeshRouteRouteSpec' containing required fields as
+-- arguments.
+appMeshRouteRouteSpec
+  :: AppMeshRouteRouteSpec
+appMeshRouteRouteSpec  =
+  AppMeshRouteRouteSpec
+  { _appMeshRouteRouteSpecHttpRoute = Nothing
+  , _appMeshRouteRouteSpecTcpRoute = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-routespec.html#cfn-appmesh-route-routespec-httproute
+amrrsHttpRoute :: Lens' AppMeshRouteRouteSpec (Maybe AppMeshRouteHttpRoute)
+amrrsHttpRoute = lens _appMeshRouteRouteSpecHttpRoute (\s a -> s { _appMeshRouteRouteSpecHttpRoute = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-routespec.html#cfn-appmesh-route-routespec-tcproute
+amrrsTcpRoute :: Lens' AppMeshRouteRouteSpec (Maybe AppMeshRouteTcpRoute)
+amrrsTcpRoute = lens _appMeshRouteRouteSpecTcpRoute (\s a -> s { _appMeshRouteRouteSpecTcpRoute = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshRouteTagRef.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshRouteTagRef.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshRouteTagRef.hs
@@ -0,0 +1,46 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-tagref.html
+
+module Stratosphere.ResourceProperties.AppMeshRouteTagRef where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppMeshRouteTagRef. See
+-- 'appMeshRouteTagRef' for a more convenient constructor.
+data AppMeshRouteTagRef =
+  AppMeshRouteTagRef
+  { _appMeshRouteTagRefKey :: Val Text
+  , _appMeshRouteTagRefValue :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshRouteTagRef where
+  toJSON AppMeshRouteTagRef{..} =
+    object $
+    catMaybes
+    [ (Just . ("Key",) . toJSON) _appMeshRouteTagRefKey
+    , fmap (("Value",) . toJSON) _appMeshRouteTagRefValue
+    ]
+
+-- | Constructor for 'AppMeshRouteTagRef' containing required fields as
+-- arguments.
+appMeshRouteTagRef
+  :: Val Text -- ^ 'amrtrKey'
+  -> AppMeshRouteTagRef
+appMeshRouteTagRef keyarg =
+  AppMeshRouteTagRef
+  { _appMeshRouteTagRefKey = keyarg
+  , _appMeshRouteTagRefValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-tagref.html#cfn-appmesh-route-tagref-key
+amrtrKey :: Lens' AppMeshRouteTagRef (Val Text)
+amrtrKey = lens _appMeshRouteTagRefKey (\s a -> s { _appMeshRouteTagRefKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-tagref.html#cfn-appmesh-route-tagref-value
+amrtrValue :: Lens' AppMeshRouteTagRef (Maybe (Val Text))
+amrtrValue = lens _appMeshRouteTagRefValue (\s a -> s { _appMeshRouteTagRefValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshRouteTcpRoute.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshRouteTcpRoute.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshRouteTcpRoute.hs
@@ -0,0 +1,39 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-tcproute.html
+
+module Stratosphere.ResourceProperties.AppMeshRouteTcpRoute where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshRouteTcpRouteAction
+
+-- | Full data type definition for AppMeshRouteTcpRoute. See
+-- 'appMeshRouteTcpRoute' for a more convenient constructor.
+data AppMeshRouteTcpRoute =
+  AppMeshRouteTcpRoute
+  { _appMeshRouteTcpRouteAction :: AppMeshRouteTcpRouteAction
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshRouteTcpRoute where
+  toJSON AppMeshRouteTcpRoute{..} =
+    object $
+    catMaybes
+    [ (Just . ("Action",) . toJSON) _appMeshRouteTcpRouteAction
+    ]
+
+-- | Constructor for 'AppMeshRouteTcpRoute' containing required fields as
+-- arguments.
+appMeshRouteTcpRoute
+  :: AppMeshRouteTcpRouteAction -- ^ 'amrtrAction'
+  -> AppMeshRouteTcpRoute
+appMeshRouteTcpRoute actionarg =
+  AppMeshRouteTcpRoute
+  { _appMeshRouteTcpRouteAction = actionarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-tcproute.html#cfn-appmesh-route-tcproute-action
+amrtrAction :: Lens' AppMeshRouteTcpRoute AppMeshRouteTcpRouteAction
+amrtrAction = lens _appMeshRouteTcpRouteAction (\s a -> s { _appMeshRouteTcpRouteAction = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshRouteTcpRouteAction.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshRouteTcpRouteAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshRouteTcpRouteAction.hs
@@ -0,0 +1,39 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-tcprouteaction.html
+
+module Stratosphere.ResourceProperties.AppMeshRouteTcpRouteAction where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshRouteWeightedTarget
+
+-- | Full data type definition for AppMeshRouteTcpRouteAction. See
+-- 'appMeshRouteTcpRouteAction' for a more convenient constructor.
+data AppMeshRouteTcpRouteAction =
+  AppMeshRouteTcpRouteAction
+  { _appMeshRouteTcpRouteActionWeightedTargets :: [AppMeshRouteWeightedTarget]
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshRouteTcpRouteAction where
+  toJSON AppMeshRouteTcpRouteAction{..} =
+    object $
+    catMaybes
+    [ (Just . ("WeightedTargets",) . toJSON) _appMeshRouteTcpRouteActionWeightedTargets
+    ]
+
+-- | Constructor for 'AppMeshRouteTcpRouteAction' containing required fields
+-- as arguments.
+appMeshRouteTcpRouteAction
+  :: [AppMeshRouteWeightedTarget] -- ^ 'amrtraWeightedTargets'
+  -> AppMeshRouteTcpRouteAction
+appMeshRouteTcpRouteAction weightedTargetsarg =
+  AppMeshRouteTcpRouteAction
+  { _appMeshRouteTcpRouteActionWeightedTargets = weightedTargetsarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-tcprouteaction.html#cfn-appmesh-route-tcprouteaction-weightedtargets
+amrtraWeightedTargets :: Lens' AppMeshRouteTcpRouteAction [AppMeshRouteWeightedTarget]
+amrtraWeightedTargets = lens _appMeshRouteTcpRouteActionWeightedTargets (\s a -> s { _appMeshRouteTcpRouteActionWeightedTargets = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshRouteWeightedTarget.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshRouteWeightedTarget.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshRouteWeightedTarget.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-weightedtarget.html
+
+module Stratosphere.ResourceProperties.AppMeshRouteWeightedTarget where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppMeshRouteWeightedTarget. See
+-- 'appMeshRouteWeightedTarget' for a more convenient constructor.
+data AppMeshRouteWeightedTarget =
+  AppMeshRouteWeightedTarget
+  { _appMeshRouteWeightedTargetVirtualNode :: Val Text
+  , _appMeshRouteWeightedTargetWeight :: Val Integer
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshRouteWeightedTarget where
+  toJSON AppMeshRouteWeightedTarget{..} =
+    object $
+    catMaybes
+    [ (Just . ("VirtualNode",) . toJSON) _appMeshRouteWeightedTargetVirtualNode
+    , (Just . ("Weight",) . toJSON) _appMeshRouteWeightedTargetWeight
+    ]
+
+-- | Constructor for 'AppMeshRouteWeightedTarget' containing required fields
+-- as arguments.
+appMeshRouteWeightedTarget
+  :: Val Text -- ^ 'amrwtVirtualNode'
+  -> Val Integer -- ^ 'amrwtWeight'
+  -> AppMeshRouteWeightedTarget
+appMeshRouteWeightedTarget virtualNodearg weightarg =
+  AppMeshRouteWeightedTarget
+  { _appMeshRouteWeightedTargetVirtualNode = virtualNodearg
+  , _appMeshRouteWeightedTargetWeight = weightarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-weightedtarget.html#cfn-appmesh-route-weightedtarget-virtualnode
+amrwtVirtualNode :: Lens' AppMeshRouteWeightedTarget (Val Text)
+amrwtVirtualNode = lens _appMeshRouteWeightedTargetVirtualNode (\s a -> s { _appMeshRouteWeightedTargetVirtualNode = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-route-weightedtarget.html#cfn-appmesh-route-weightedtarget-weight
+amrwtWeight :: Lens' AppMeshRouteWeightedTarget (Val Integer)
+amrwtWeight = lens _appMeshRouteWeightedTargetWeight (\s a -> s { _appMeshRouteWeightedTargetWeight = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeAccessLog.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeAccessLog.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeAccessLog.hs
@@ -0,0 +1,38 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-accesslog.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualNodeAccessLog where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeFileAccessLog
+
+-- | Full data type definition for AppMeshVirtualNodeAccessLog. See
+-- 'appMeshVirtualNodeAccessLog' for a more convenient constructor.
+data AppMeshVirtualNodeAccessLog =
+  AppMeshVirtualNodeAccessLog
+  { _appMeshVirtualNodeAccessLogFile :: Maybe AppMeshVirtualNodeFileAccessLog
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualNodeAccessLog where
+  toJSON AppMeshVirtualNodeAccessLog{..} =
+    object $
+    catMaybes
+    [ fmap (("File",) . toJSON) _appMeshVirtualNodeAccessLogFile
+    ]
+
+-- | Constructor for 'AppMeshVirtualNodeAccessLog' containing required fields
+-- as arguments.
+appMeshVirtualNodeAccessLog
+  :: AppMeshVirtualNodeAccessLog
+appMeshVirtualNodeAccessLog  =
+  AppMeshVirtualNodeAccessLog
+  { _appMeshVirtualNodeAccessLogFile = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-accesslog.html#cfn-appmesh-virtualnode-accesslog-file
+amvnalFile :: Lens' AppMeshVirtualNodeAccessLog (Maybe AppMeshVirtualNodeFileAccessLog)
+amvnalFile = lens _appMeshVirtualNodeAccessLogFile (\s a -> s { _appMeshVirtualNodeAccessLogFile = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeBackend.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeBackend.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeBackend.hs
@@ -0,0 +1,38 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-backend.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualNodeBackend where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeVirtualServiceBackend
+
+-- | Full data type definition for AppMeshVirtualNodeBackend. See
+-- 'appMeshVirtualNodeBackend' for a more convenient constructor.
+data AppMeshVirtualNodeBackend =
+  AppMeshVirtualNodeBackend
+  { _appMeshVirtualNodeBackendVirtualService :: Maybe AppMeshVirtualNodeVirtualServiceBackend
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualNodeBackend where
+  toJSON AppMeshVirtualNodeBackend{..} =
+    object $
+    catMaybes
+    [ fmap (("VirtualService",) . toJSON) _appMeshVirtualNodeBackendVirtualService
+    ]
+
+-- | Constructor for 'AppMeshVirtualNodeBackend' containing required fields as
+-- arguments.
+appMeshVirtualNodeBackend
+  :: AppMeshVirtualNodeBackend
+appMeshVirtualNodeBackend  =
+  AppMeshVirtualNodeBackend
+  { _appMeshVirtualNodeBackendVirtualService = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-backend.html#cfn-appmesh-virtualnode-backend-virtualservice
+amvnbVirtualService :: Lens' AppMeshVirtualNodeBackend (Maybe AppMeshVirtualNodeVirtualServiceBackend)
+amvnbVirtualService = lens _appMeshVirtualNodeBackendVirtualService (\s a -> s { _appMeshVirtualNodeBackendVirtualService = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeDnsServiceDiscovery.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeDnsServiceDiscovery.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeDnsServiceDiscovery.hs
@@ -0,0 +1,40 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-dnsservicediscovery.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualNodeDnsServiceDiscovery where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppMeshVirtualNodeDnsServiceDiscovery. See
+-- 'appMeshVirtualNodeDnsServiceDiscovery' for a more convenient
+-- constructor.
+data AppMeshVirtualNodeDnsServiceDiscovery =
+  AppMeshVirtualNodeDnsServiceDiscovery
+  { _appMeshVirtualNodeDnsServiceDiscoveryHostname :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualNodeDnsServiceDiscovery where
+  toJSON AppMeshVirtualNodeDnsServiceDiscovery{..} =
+    object $
+    catMaybes
+    [ (Just . ("Hostname",) . toJSON) _appMeshVirtualNodeDnsServiceDiscoveryHostname
+    ]
+
+-- | Constructor for 'AppMeshVirtualNodeDnsServiceDiscovery' containing
+-- required fields as arguments.
+appMeshVirtualNodeDnsServiceDiscovery
+  :: Val Text -- ^ 'amvndsdHostname'
+  -> AppMeshVirtualNodeDnsServiceDiscovery
+appMeshVirtualNodeDnsServiceDiscovery hostnamearg =
+  AppMeshVirtualNodeDnsServiceDiscovery
+  { _appMeshVirtualNodeDnsServiceDiscoveryHostname = hostnamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-dnsservicediscovery.html#cfn-appmesh-virtualnode-dnsservicediscovery-hostname
+amvndsdHostname :: Lens' AppMeshVirtualNodeDnsServiceDiscovery (Val Text)
+amvndsdHostname = lens _appMeshVirtualNodeDnsServiceDiscoveryHostname (\s a -> s { _appMeshVirtualNodeDnsServiceDiscoveryHostname = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeFileAccessLog.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeFileAccessLog.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeFileAccessLog.hs
@@ -0,0 +1,39 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-fileaccesslog.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualNodeFileAccessLog where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppMeshVirtualNodeFileAccessLog. See
+-- 'appMeshVirtualNodeFileAccessLog' for a more convenient constructor.
+data AppMeshVirtualNodeFileAccessLog =
+  AppMeshVirtualNodeFileAccessLog
+  { _appMeshVirtualNodeFileAccessLogPath :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualNodeFileAccessLog where
+  toJSON AppMeshVirtualNodeFileAccessLog{..} =
+    object $
+    catMaybes
+    [ (Just . ("Path",) . toJSON) _appMeshVirtualNodeFileAccessLogPath
+    ]
+
+-- | Constructor for 'AppMeshVirtualNodeFileAccessLog' containing required
+-- fields as arguments.
+appMeshVirtualNodeFileAccessLog
+  :: Val Text -- ^ 'amvnfalPath'
+  -> AppMeshVirtualNodeFileAccessLog
+appMeshVirtualNodeFileAccessLog patharg =
+  AppMeshVirtualNodeFileAccessLog
+  { _appMeshVirtualNodeFileAccessLogPath = patharg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-fileaccesslog.html#cfn-appmesh-virtualnode-fileaccesslog-path
+amvnfalPath :: Lens' AppMeshVirtualNodeFileAccessLog (Val Text)
+amvnfalPath = lens _appMeshVirtualNodeFileAccessLogPath (\s a -> s { _appMeshVirtualNodeFileAccessLogPath = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeHealthCheck.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeHealthCheck.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeHealthCheck.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-healthcheck.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualNodeHealthCheck where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppMeshVirtualNodeHealthCheck. See
+-- 'appMeshVirtualNodeHealthCheck' for a more convenient constructor.
+data AppMeshVirtualNodeHealthCheck =
+  AppMeshVirtualNodeHealthCheck
+  { _appMeshVirtualNodeHealthCheckHealthyThreshold :: Val Integer
+  , _appMeshVirtualNodeHealthCheckIntervalMillis :: Val Integer
+  , _appMeshVirtualNodeHealthCheckPath :: Maybe (Val Text)
+  , _appMeshVirtualNodeHealthCheckPort :: Maybe (Val Integer)
+  , _appMeshVirtualNodeHealthCheckProtocol :: Val Text
+  , _appMeshVirtualNodeHealthCheckTimeoutMillis :: Val Integer
+  , _appMeshVirtualNodeHealthCheckUnhealthyThreshold :: Val Integer
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualNodeHealthCheck where
+  toJSON AppMeshVirtualNodeHealthCheck{..} =
+    object $
+    catMaybes
+    [ (Just . ("HealthyThreshold",) . toJSON) _appMeshVirtualNodeHealthCheckHealthyThreshold
+    , (Just . ("IntervalMillis",) . toJSON) _appMeshVirtualNodeHealthCheckIntervalMillis
+    , fmap (("Path",) . toJSON) _appMeshVirtualNodeHealthCheckPath
+    , fmap (("Port",) . toJSON) _appMeshVirtualNodeHealthCheckPort
+    , (Just . ("Protocol",) . toJSON) _appMeshVirtualNodeHealthCheckProtocol
+    , (Just . ("TimeoutMillis",) . toJSON) _appMeshVirtualNodeHealthCheckTimeoutMillis
+    , (Just . ("UnhealthyThreshold",) . toJSON) _appMeshVirtualNodeHealthCheckUnhealthyThreshold
+    ]
+
+-- | Constructor for 'AppMeshVirtualNodeHealthCheck' containing required
+-- fields as arguments.
+appMeshVirtualNodeHealthCheck
+  :: Val Integer -- ^ 'amvnhcHealthyThreshold'
+  -> Val Integer -- ^ 'amvnhcIntervalMillis'
+  -> Val Text -- ^ 'amvnhcProtocol'
+  -> Val Integer -- ^ 'amvnhcTimeoutMillis'
+  -> Val Integer -- ^ 'amvnhcUnhealthyThreshold'
+  -> AppMeshVirtualNodeHealthCheck
+appMeshVirtualNodeHealthCheck healthyThresholdarg intervalMillisarg protocolarg timeoutMillisarg unhealthyThresholdarg =
+  AppMeshVirtualNodeHealthCheck
+  { _appMeshVirtualNodeHealthCheckHealthyThreshold = healthyThresholdarg
+  , _appMeshVirtualNodeHealthCheckIntervalMillis = intervalMillisarg
+  , _appMeshVirtualNodeHealthCheckPath = Nothing
+  , _appMeshVirtualNodeHealthCheckPort = Nothing
+  , _appMeshVirtualNodeHealthCheckProtocol = protocolarg
+  , _appMeshVirtualNodeHealthCheckTimeoutMillis = timeoutMillisarg
+  , _appMeshVirtualNodeHealthCheckUnhealthyThreshold = unhealthyThresholdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-healthcheck.html#cfn-appmesh-virtualnode-healthcheck-healthythreshold
+amvnhcHealthyThreshold :: Lens' AppMeshVirtualNodeHealthCheck (Val Integer)
+amvnhcHealthyThreshold = lens _appMeshVirtualNodeHealthCheckHealthyThreshold (\s a -> s { _appMeshVirtualNodeHealthCheckHealthyThreshold = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-healthcheck.html#cfn-appmesh-virtualnode-healthcheck-intervalmillis
+amvnhcIntervalMillis :: Lens' AppMeshVirtualNodeHealthCheck (Val Integer)
+amvnhcIntervalMillis = lens _appMeshVirtualNodeHealthCheckIntervalMillis (\s a -> s { _appMeshVirtualNodeHealthCheckIntervalMillis = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-healthcheck.html#cfn-appmesh-virtualnode-healthcheck-path
+amvnhcPath :: Lens' AppMeshVirtualNodeHealthCheck (Maybe (Val Text))
+amvnhcPath = lens _appMeshVirtualNodeHealthCheckPath (\s a -> s { _appMeshVirtualNodeHealthCheckPath = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-healthcheck.html#cfn-appmesh-virtualnode-healthcheck-port
+amvnhcPort :: Lens' AppMeshVirtualNodeHealthCheck (Maybe (Val Integer))
+amvnhcPort = lens _appMeshVirtualNodeHealthCheckPort (\s a -> s { _appMeshVirtualNodeHealthCheckPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-healthcheck.html#cfn-appmesh-virtualnode-healthcheck-protocol
+amvnhcProtocol :: Lens' AppMeshVirtualNodeHealthCheck (Val Text)
+amvnhcProtocol = lens _appMeshVirtualNodeHealthCheckProtocol (\s a -> s { _appMeshVirtualNodeHealthCheckProtocol = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-healthcheck.html#cfn-appmesh-virtualnode-healthcheck-timeoutmillis
+amvnhcTimeoutMillis :: Lens' AppMeshVirtualNodeHealthCheck (Val Integer)
+amvnhcTimeoutMillis = lens _appMeshVirtualNodeHealthCheckTimeoutMillis (\s a -> s { _appMeshVirtualNodeHealthCheckTimeoutMillis = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-healthcheck.html#cfn-appmesh-virtualnode-healthcheck-unhealthythreshold
+amvnhcUnhealthyThreshold :: Lens' AppMeshVirtualNodeHealthCheck (Val Integer)
+amvnhcUnhealthyThreshold = lens _appMeshVirtualNodeHealthCheckUnhealthyThreshold (\s a -> s { _appMeshVirtualNodeHealthCheckUnhealthyThreshold = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeListener.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeListener.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeListener.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-listener.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualNodeListener where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeHealthCheck
+import Stratosphere.ResourceProperties.AppMeshVirtualNodePortMapping
+
+-- | Full data type definition for AppMeshVirtualNodeListener. See
+-- 'appMeshVirtualNodeListener' for a more convenient constructor.
+data AppMeshVirtualNodeListener =
+  AppMeshVirtualNodeListener
+  { _appMeshVirtualNodeListenerHealthCheck :: Maybe AppMeshVirtualNodeHealthCheck
+  , _appMeshVirtualNodeListenerPortMapping :: AppMeshVirtualNodePortMapping
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualNodeListener where
+  toJSON AppMeshVirtualNodeListener{..} =
+    object $
+    catMaybes
+    [ fmap (("HealthCheck",) . toJSON) _appMeshVirtualNodeListenerHealthCheck
+    , (Just . ("PortMapping",) . toJSON) _appMeshVirtualNodeListenerPortMapping
+    ]
+
+-- | Constructor for 'AppMeshVirtualNodeListener' containing required fields
+-- as arguments.
+appMeshVirtualNodeListener
+  :: AppMeshVirtualNodePortMapping -- ^ 'amvnlPortMapping'
+  -> AppMeshVirtualNodeListener
+appMeshVirtualNodeListener portMappingarg =
+  AppMeshVirtualNodeListener
+  { _appMeshVirtualNodeListenerHealthCheck = Nothing
+  , _appMeshVirtualNodeListenerPortMapping = portMappingarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-listener.html#cfn-appmesh-virtualnode-listener-healthcheck
+amvnlHealthCheck :: Lens' AppMeshVirtualNodeListener (Maybe AppMeshVirtualNodeHealthCheck)
+amvnlHealthCheck = lens _appMeshVirtualNodeListenerHealthCheck (\s a -> s { _appMeshVirtualNodeListenerHealthCheck = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-listener.html#cfn-appmesh-virtualnode-listener-portmapping
+amvnlPortMapping :: Lens' AppMeshVirtualNodeListener AppMeshVirtualNodePortMapping
+amvnlPortMapping = lens _appMeshVirtualNodeListenerPortMapping (\s a -> s { _appMeshVirtualNodeListenerPortMapping = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeLogging.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeLogging.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeLogging.hs
@@ -0,0 +1,38 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-logging.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualNodeLogging where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeAccessLog
+
+-- | Full data type definition for AppMeshVirtualNodeLogging. See
+-- 'appMeshVirtualNodeLogging' for a more convenient constructor.
+data AppMeshVirtualNodeLogging =
+  AppMeshVirtualNodeLogging
+  { _appMeshVirtualNodeLoggingAccessLog :: Maybe AppMeshVirtualNodeAccessLog
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualNodeLogging where
+  toJSON AppMeshVirtualNodeLogging{..} =
+    object $
+    catMaybes
+    [ fmap (("AccessLog",) . toJSON) _appMeshVirtualNodeLoggingAccessLog
+    ]
+
+-- | Constructor for 'AppMeshVirtualNodeLogging' containing required fields as
+-- arguments.
+appMeshVirtualNodeLogging
+  :: AppMeshVirtualNodeLogging
+appMeshVirtualNodeLogging  =
+  AppMeshVirtualNodeLogging
+  { _appMeshVirtualNodeLoggingAccessLog = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-logging.html#cfn-appmesh-virtualnode-logging-accesslog
+amvnlAccessLog :: Lens' AppMeshVirtualNodeLogging (Maybe AppMeshVirtualNodeAccessLog)
+amvnlAccessLog = lens _appMeshVirtualNodeLoggingAccessLog (\s a -> s { _appMeshVirtualNodeLoggingAccessLog = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodePortMapping.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodePortMapping.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodePortMapping.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-portmapping.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualNodePortMapping where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppMeshVirtualNodePortMapping. See
+-- 'appMeshVirtualNodePortMapping' for a more convenient constructor.
+data AppMeshVirtualNodePortMapping =
+  AppMeshVirtualNodePortMapping
+  { _appMeshVirtualNodePortMappingPort :: Val Integer
+  , _appMeshVirtualNodePortMappingProtocol :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualNodePortMapping where
+  toJSON AppMeshVirtualNodePortMapping{..} =
+    object $
+    catMaybes
+    [ (Just . ("Port",) . toJSON) _appMeshVirtualNodePortMappingPort
+    , (Just . ("Protocol",) . toJSON) _appMeshVirtualNodePortMappingProtocol
+    ]
+
+-- | Constructor for 'AppMeshVirtualNodePortMapping' containing required
+-- fields as arguments.
+appMeshVirtualNodePortMapping
+  :: Val Integer -- ^ 'amvnpmPort'
+  -> Val Text -- ^ 'amvnpmProtocol'
+  -> AppMeshVirtualNodePortMapping
+appMeshVirtualNodePortMapping portarg protocolarg =
+  AppMeshVirtualNodePortMapping
+  { _appMeshVirtualNodePortMappingPort = portarg
+  , _appMeshVirtualNodePortMappingProtocol = protocolarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-portmapping.html#cfn-appmesh-virtualnode-portmapping-port
+amvnpmPort :: Lens' AppMeshVirtualNodePortMapping (Val Integer)
+amvnpmPort = lens _appMeshVirtualNodePortMappingPort (\s a -> s { _appMeshVirtualNodePortMappingPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-portmapping.html#cfn-appmesh-virtualnode-portmapping-protocol
+amvnpmProtocol :: Lens' AppMeshVirtualNodePortMapping (Val Text)
+amvnpmProtocol = lens _appMeshVirtualNodePortMappingProtocol (\s a -> s { _appMeshVirtualNodePortMappingProtocol = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeServiceDiscovery.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeServiceDiscovery.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeServiceDiscovery.hs
@@ -0,0 +1,39 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-servicediscovery.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualNodeServiceDiscovery where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeDnsServiceDiscovery
+
+-- | Full data type definition for AppMeshVirtualNodeServiceDiscovery. See
+-- 'appMeshVirtualNodeServiceDiscovery' for a more convenient constructor.
+data AppMeshVirtualNodeServiceDiscovery =
+  AppMeshVirtualNodeServiceDiscovery
+  { _appMeshVirtualNodeServiceDiscoveryDNS :: AppMeshVirtualNodeDnsServiceDiscovery
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualNodeServiceDiscovery where
+  toJSON AppMeshVirtualNodeServiceDiscovery{..} =
+    object $
+    catMaybes
+    [ (Just . ("DNS",) . toJSON) _appMeshVirtualNodeServiceDiscoveryDNS
+    ]
+
+-- | Constructor for 'AppMeshVirtualNodeServiceDiscovery' containing required
+-- fields as arguments.
+appMeshVirtualNodeServiceDiscovery
+  :: AppMeshVirtualNodeDnsServiceDiscovery -- ^ 'amvnsdDNS'
+  -> AppMeshVirtualNodeServiceDiscovery
+appMeshVirtualNodeServiceDiscovery dNSarg =
+  AppMeshVirtualNodeServiceDiscovery
+  { _appMeshVirtualNodeServiceDiscoveryDNS = dNSarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-servicediscovery.html#cfn-appmesh-virtualnode-servicediscovery-dns
+amvnsdDNS :: Lens' AppMeshVirtualNodeServiceDiscovery AppMeshVirtualNodeDnsServiceDiscovery
+amvnsdDNS = lens _appMeshVirtualNodeServiceDiscoveryDNS (\s a -> s { _appMeshVirtualNodeServiceDiscoveryDNS = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeTagRef.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeTagRef.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeTagRef.hs
@@ -0,0 +1,46 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-tagref.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualNodeTagRef where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppMeshVirtualNodeTagRef. See
+-- 'appMeshVirtualNodeTagRef' for a more convenient constructor.
+data AppMeshVirtualNodeTagRef =
+  AppMeshVirtualNodeTagRef
+  { _appMeshVirtualNodeTagRefKey :: Val Text
+  , _appMeshVirtualNodeTagRefValue :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualNodeTagRef where
+  toJSON AppMeshVirtualNodeTagRef{..} =
+    object $
+    catMaybes
+    [ (Just . ("Key",) . toJSON) _appMeshVirtualNodeTagRefKey
+    , fmap (("Value",) . toJSON) _appMeshVirtualNodeTagRefValue
+    ]
+
+-- | Constructor for 'AppMeshVirtualNodeTagRef' containing required fields as
+-- arguments.
+appMeshVirtualNodeTagRef
+  :: Val Text -- ^ 'amvntrKey'
+  -> AppMeshVirtualNodeTagRef
+appMeshVirtualNodeTagRef keyarg =
+  AppMeshVirtualNodeTagRef
+  { _appMeshVirtualNodeTagRefKey = keyarg
+  , _appMeshVirtualNodeTagRefValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-tagref.html#cfn-appmesh-virtualnode-tagref-key
+amvntrKey :: Lens' AppMeshVirtualNodeTagRef (Val Text)
+amvntrKey = lens _appMeshVirtualNodeTagRefKey (\s a -> s { _appMeshVirtualNodeTagRefKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-tagref.html#cfn-appmesh-virtualnode-tagref-value
+amvntrValue :: Lens' AppMeshVirtualNodeTagRef (Maybe (Val Text))
+amvntrValue = lens _appMeshVirtualNodeTagRefValue (\s a -> s { _appMeshVirtualNodeTagRefValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeVirtualNodeSpec.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeVirtualNodeSpec.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeVirtualNodeSpec.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-virtualnodespec.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualNodeVirtualNodeSpec where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeBackend
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeListener
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeLogging
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeServiceDiscovery
+
+-- | Full data type definition for AppMeshVirtualNodeVirtualNodeSpec. See
+-- 'appMeshVirtualNodeVirtualNodeSpec' for a more convenient constructor.
+data AppMeshVirtualNodeVirtualNodeSpec =
+  AppMeshVirtualNodeVirtualNodeSpec
+  { _appMeshVirtualNodeVirtualNodeSpecBackends :: Maybe [AppMeshVirtualNodeBackend]
+  , _appMeshVirtualNodeVirtualNodeSpecListeners :: Maybe [AppMeshVirtualNodeListener]
+  , _appMeshVirtualNodeVirtualNodeSpecLogging :: Maybe AppMeshVirtualNodeLogging
+  , _appMeshVirtualNodeVirtualNodeSpecServiceDiscovery :: Maybe AppMeshVirtualNodeServiceDiscovery
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualNodeVirtualNodeSpec where
+  toJSON AppMeshVirtualNodeVirtualNodeSpec{..} =
+    object $
+    catMaybes
+    [ fmap (("Backends",) . toJSON) _appMeshVirtualNodeVirtualNodeSpecBackends
+    , fmap (("Listeners",) . toJSON) _appMeshVirtualNodeVirtualNodeSpecListeners
+    , fmap (("Logging",) . toJSON) _appMeshVirtualNodeVirtualNodeSpecLogging
+    , fmap (("ServiceDiscovery",) . toJSON) _appMeshVirtualNodeVirtualNodeSpecServiceDiscovery
+    ]
+
+-- | Constructor for 'AppMeshVirtualNodeVirtualNodeSpec' containing required
+-- fields as arguments.
+appMeshVirtualNodeVirtualNodeSpec
+  :: AppMeshVirtualNodeVirtualNodeSpec
+appMeshVirtualNodeVirtualNodeSpec  =
+  AppMeshVirtualNodeVirtualNodeSpec
+  { _appMeshVirtualNodeVirtualNodeSpecBackends = Nothing
+  , _appMeshVirtualNodeVirtualNodeSpecListeners = Nothing
+  , _appMeshVirtualNodeVirtualNodeSpecLogging = Nothing
+  , _appMeshVirtualNodeVirtualNodeSpecServiceDiscovery = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-virtualnodespec.html#cfn-appmesh-virtualnode-virtualnodespec-backends
+amvnvnsBackends :: Lens' AppMeshVirtualNodeVirtualNodeSpec (Maybe [AppMeshVirtualNodeBackend])
+amvnvnsBackends = lens _appMeshVirtualNodeVirtualNodeSpecBackends (\s a -> s { _appMeshVirtualNodeVirtualNodeSpecBackends = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-virtualnodespec.html#cfn-appmesh-virtualnode-virtualnodespec-listeners
+amvnvnsListeners :: Lens' AppMeshVirtualNodeVirtualNodeSpec (Maybe [AppMeshVirtualNodeListener])
+amvnvnsListeners = lens _appMeshVirtualNodeVirtualNodeSpecListeners (\s a -> s { _appMeshVirtualNodeVirtualNodeSpecListeners = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-virtualnodespec.html#cfn-appmesh-virtualnode-virtualnodespec-logging
+amvnvnsLogging :: Lens' AppMeshVirtualNodeVirtualNodeSpec (Maybe AppMeshVirtualNodeLogging)
+amvnvnsLogging = lens _appMeshVirtualNodeVirtualNodeSpecLogging (\s a -> s { _appMeshVirtualNodeVirtualNodeSpecLogging = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-virtualnodespec.html#cfn-appmesh-virtualnode-virtualnodespec-servicediscovery
+amvnvnsServiceDiscovery :: Lens' AppMeshVirtualNodeVirtualNodeSpec (Maybe AppMeshVirtualNodeServiceDiscovery)
+amvnvnsServiceDiscovery = lens _appMeshVirtualNodeVirtualNodeSpecServiceDiscovery (\s a -> s { _appMeshVirtualNodeVirtualNodeSpecServiceDiscovery = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeVirtualServiceBackend.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeVirtualServiceBackend.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualNodeVirtualServiceBackend.hs
@@ -0,0 +1,40 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-virtualservicebackend.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualNodeVirtualServiceBackend where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppMeshVirtualNodeVirtualServiceBackend.
+-- See 'appMeshVirtualNodeVirtualServiceBackend' for a more convenient
+-- constructor.
+data AppMeshVirtualNodeVirtualServiceBackend =
+  AppMeshVirtualNodeVirtualServiceBackend
+  { _appMeshVirtualNodeVirtualServiceBackendVirtualServiceName :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualNodeVirtualServiceBackend where
+  toJSON AppMeshVirtualNodeVirtualServiceBackend{..} =
+    object $
+    catMaybes
+    [ (Just . ("VirtualServiceName",) . toJSON) _appMeshVirtualNodeVirtualServiceBackendVirtualServiceName
+    ]
+
+-- | Constructor for 'AppMeshVirtualNodeVirtualServiceBackend' containing
+-- required fields as arguments.
+appMeshVirtualNodeVirtualServiceBackend
+  :: Val Text -- ^ 'amvnvsbVirtualServiceName'
+  -> AppMeshVirtualNodeVirtualServiceBackend
+appMeshVirtualNodeVirtualServiceBackend virtualServiceNamearg =
+  AppMeshVirtualNodeVirtualServiceBackend
+  { _appMeshVirtualNodeVirtualServiceBackendVirtualServiceName = virtualServiceNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualnode-virtualservicebackend.html#cfn-appmesh-virtualnode-virtualservicebackend-virtualservicename
+amvnvsbVirtualServiceName :: Lens' AppMeshVirtualNodeVirtualServiceBackend (Val Text)
+amvnvsbVirtualServiceName = lens _appMeshVirtualNodeVirtualServiceBackendVirtualServiceName (\s a -> s { _appMeshVirtualNodeVirtualServiceBackendVirtualServiceName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualRouterPortMapping.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualRouterPortMapping.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualRouterPortMapping.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualrouter-portmapping.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualRouterPortMapping where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppMeshVirtualRouterPortMapping. See
+-- 'appMeshVirtualRouterPortMapping' for a more convenient constructor.
+data AppMeshVirtualRouterPortMapping =
+  AppMeshVirtualRouterPortMapping
+  { _appMeshVirtualRouterPortMappingPort :: Val Integer
+  , _appMeshVirtualRouterPortMappingProtocol :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualRouterPortMapping where
+  toJSON AppMeshVirtualRouterPortMapping{..} =
+    object $
+    catMaybes
+    [ (Just . ("Port",) . toJSON) _appMeshVirtualRouterPortMappingPort
+    , (Just . ("Protocol",) . toJSON) _appMeshVirtualRouterPortMappingProtocol
+    ]
+
+-- | Constructor for 'AppMeshVirtualRouterPortMapping' containing required
+-- fields as arguments.
+appMeshVirtualRouterPortMapping
+  :: Val Integer -- ^ 'amvrpmPort'
+  -> Val Text -- ^ 'amvrpmProtocol'
+  -> AppMeshVirtualRouterPortMapping
+appMeshVirtualRouterPortMapping portarg protocolarg =
+  AppMeshVirtualRouterPortMapping
+  { _appMeshVirtualRouterPortMappingPort = portarg
+  , _appMeshVirtualRouterPortMappingProtocol = protocolarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualrouter-portmapping.html#cfn-appmesh-virtualrouter-portmapping-port
+amvrpmPort :: Lens' AppMeshVirtualRouterPortMapping (Val Integer)
+amvrpmPort = lens _appMeshVirtualRouterPortMappingPort (\s a -> s { _appMeshVirtualRouterPortMappingPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualrouter-portmapping.html#cfn-appmesh-virtualrouter-portmapping-protocol
+amvrpmProtocol :: Lens' AppMeshVirtualRouterPortMapping (Val Text)
+amvrpmProtocol = lens _appMeshVirtualRouterPortMappingProtocol (\s a -> s { _appMeshVirtualRouterPortMappingProtocol = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualRouterTagRef.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualRouterTagRef.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualRouterTagRef.hs
@@ -0,0 +1,46 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualrouter-tagref.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualRouterTagRef where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppMeshVirtualRouterTagRef. See
+-- 'appMeshVirtualRouterTagRef' for a more convenient constructor.
+data AppMeshVirtualRouterTagRef =
+  AppMeshVirtualRouterTagRef
+  { _appMeshVirtualRouterTagRefKey :: Val Text
+  , _appMeshVirtualRouterTagRefValue :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualRouterTagRef where
+  toJSON AppMeshVirtualRouterTagRef{..} =
+    object $
+    catMaybes
+    [ (Just . ("Key",) . toJSON) _appMeshVirtualRouterTagRefKey
+    , fmap (("Value",) . toJSON) _appMeshVirtualRouterTagRefValue
+    ]
+
+-- | Constructor for 'AppMeshVirtualRouterTagRef' containing required fields
+-- as arguments.
+appMeshVirtualRouterTagRef
+  :: Val Text -- ^ 'amvrtrKey'
+  -> AppMeshVirtualRouterTagRef
+appMeshVirtualRouterTagRef keyarg =
+  AppMeshVirtualRouterTagRef
+  { _appMeshVirtualRouterTagRefKey = keyarg
+  , _appMeshVirtualRouterTagRefValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualrouter-tagref.html#cfn-appmesh-virtualrouter-tagref-key
+amvrtrKey :: Lens' AppMeshVirtualRouterTagRef (Val Text)
+amvrtrKey = lens _appMeshVirtualRouterTagRefKey (\s a -> s { _appMeshVirtualRouterTagRefKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualrouter-tagref.html#cfn-appmesh-virtualrouter-tagref-value
+amvrtrValue :: Lens' AppMeshVirtualRouterTagRef (Maybe (Val Text))
+amvrtrValue = lens _appMeshVirtualRouterTagRefValue (\s a -> s { _appMeshVirtualRouterTagRefValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualRouterVirtualRouterListener.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualRouterVirtualRouterListener.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualRouterVirtualRouterListener.hs
@@ -0,0 +1,40 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualrouter-virtualrouterlistener.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualRouterVirtualRouterListener where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshVirtualRouterPortMapping
+
+-- | Full data type definition for AppMeshVirtualRouterVirtualRouterListener.
+-- See 'appMeshVirtualRouterVirtualRouterListener' for a more convenient
+-- constructor.
+data AppMeshVirtualRouterVirtualRouterListener =
+  AppMeshVirtualRouterVirtualRouterListener
+  { _appMeshVirtualRouterVirtualRouterListenerPortMapping :: AppMeshVirtualRouterPortMapping
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualRouterVirtualRouterListener where
+  toJSON AppMeshVirtualRouterVirtualRouterListener{..} =
+    object $
+    catMaybes
+    [ (Just . ("PortMapping",) . toJSON) _appMeshVirtualRouterVirtualRouterListenerPortMapping
+    ]
+
+-- | Constructor for 'AppMeshVirtualRouterVirtualRouterListener' containing
+-- required fields as arguments.
+appMeshVirtualRouterVirtualRouterListener
+  :: AppMeshVirtualRouterPortMapping -- ^ 'amvrvrlPortMapping'
+  -> AppMeshVirtualRouterVirtualRouterListener
+appMeshVirtualRouterVirtualRouterListener portMappingarg =
+  AppMeshVirtualRouterVirtualRouterListener
+  { _appMeshVirtualRouterVirtualRouterListenerPortMapping = portMappingarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualrouter-virtualrouterlistener.html#cfn-appmesh-virtualrouter-virtualrouterlistener-portmapping
+amvrvrlPortMapping :: Lens' AppMeshVirtualRouterVirtualRouterListener AppMeshVirtualRouterPortMapping
+amvrvrlPortMapping = lens _appMeshVirtualRouterVirtualRouterListenerPortMapping (\s a -> s { _appMeshVirtualRouterVirtualRouterListenerPortMapping = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualRouterVirtualRouterSpec.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualRouterVirtualRouterSpec.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualRouterVirtualRouterSpec.hs
@@ -0,0 +1,40 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualrouter-virtualrouterspec.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualRouterVirtualRouterSpec where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshVirtualRouterVirtualRouterListener
+
+-- | Full data type definition for AppMeshVirtualRouterVirtualRouterSpec. See
+-- 'appMeshVirtualRouterVirtualRouterSpec' for a more convenient
+-- constructor.
+data AppMeshVirtualRouterVirtualRouterSpec =
+  AppMeshVirtualRouterVirtualRouterSpec
+  { _appMeshVirtualRouterVirtualRouterSpecListeners :: [AppMeshVirtualRouterVirtualRouterListener]
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualRouterVirtualRouterSpec where
+  toJSON AppMeshVirtualRouterVirtualRouterSpec{..} =
+    object $
+    catMaybes
+    [ (Just . ("Listeners",) . toJSON) _appMeshVirtualRouterVirtualRouterSpecListeners
+    ]
+
+-- | Constructor for 'AppMeshVirtualRouterVirtualRouterSpec' containing
+-- required fields as arguments.
+appMeshVirtualRouterVirtualRouterSpec
+  :: [AppMeshVirtualRouterVirtualRouterListener] -- ^ 'amvrvrsListeners'
+  -> AppMeshVirtualRouterVirtualRouterSpec
+appMeshVirtualRouterVirtualRouterSpec listenersarg =
+  AppMeshVirtualRouterVirtualRouterSpec
+  { _appMeshVirtualRouterVirtualRouterSpecListeners = listenersarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualrouter-virtualrouterspec.html#cfn-appmesh-virtualrouter-virtualrouterspec-listeners
+amvrvrsListeners :: Lens' AppMeshVirtualRouterVirtualRouterSpec [AppMeshVirtualRouterVirtualRouterListener]
+amvrvrsListeners = lens _appMeshVirtualRouterVirtualRouterSpecListeners (\s a -> s { _appMeshVirtualRouterVirtualRouterSpecListeners = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualServiceTagRef.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualServiceTagRef.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualServiceTagRef.hs
@@ -0,0 +1,46 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualservice-tagref.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualServiceTagRef where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppMeshVirtualServiceTagRef. See
+-- 'appMeshVirtualServiceTagRef' for a more convenient constructor.
+data AppMeshVirtualServiceTagRef =
+  AppMeshVirtualServiceTagRef
+  { _appMeshVirtualServiceTagRefKey :: Val Text
+  , _appMeshVirtualServiceTagRefValue :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualServiceTagRef where
+  toJSON AppMeshVirtualServiceTagRef{..} =
+    object $
+    catMaybes
+    [ (Just . ("Key",) . toJSON) _appMeshVirtualServiceTagRefKey
+    , fmap (("Value",) . toJSON) _appMeshVirtualServiceTagRefValue
+    ]
+
+-- | Constructor for 'AppMeshVirtualServiceTagRef' containing required fields
+-- as arguments.
+appMeshVirtualServiceTagRef
+  :: Val Text -- ^ 'amvstrKey'
+  -> AppMeshVirtualServiceTagRef
+appMeshVirtualServiceTagRef keyarg =
+  AppMeshVirtualServiceTagRef
+  { _appMeshVirtualServiceTagRefKey = keyarg
+  , _appMeshVirtualServiceTagRefValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualservice-tagref.html#cfn-appmesh-virtualservice-tagref-key
+amvstrKey :: Lens' AppMeshVirtualServiceTagRef (Val Text)
+amvstrKey = lens _appMeshVirtualServiceTagRefKey (\s a -> s { _appMeshVirtualServiceTagRefKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualservice-tagref.html#cfn-appmesh-virtualservice-tagref-value
+amvstrValue :: Lens' AppMeshVirtualServiceTagRef (Maybe (Val Text))
+amvstrValue = lens _appMeshVirtualServiceTagRefValue (\s a -> s { _appMeshVirtualServiceTagRefValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualServiceVirtualNodeServiceProvider.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualServiceVirtualNodeServiceProvider.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualServiceVirtualNodeServiceProvider.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualservice-virtualnodeserviceprovider.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualNodeServiceProvider where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for
+-- AppMeshVirtualServiceVirtualNodeServiceProvider. See
+-- 'appMeshVirtualServiceVirtualNodeServiceProvider' for a more convenient
+-- constructor.
+data AppMeshVirtualServiceVirtualNodeServiceProvider =
+  AppMeshVirtualServiceVirtualNodeServiceProvider
+  { _appMeshVirtualServiceVirtualNodeServiceProviderVirtualNodeName :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualServiceVirtualNodeServiceProvider where
+  toJSON AppMeshVirtualServiceVirtualNodeServiceProvider{..} =
+    object $
+    catMaybes
+    [ (Just . ("VirtualNodeName",) . toJSON) _appMeshVirtualServiceVirtualNodeServiceProviderVirtualNodeName
+    ]
+
+-- | Constructor for 'AppMeshVirtualServiceVirtualNodeServiceProvider'
+-- containing required fields as arguments.
+appMeshVirtualServiceVirtualNodeServiceProvider
+  :: Val Text -- ^ 'amvsvnspVirtualNodeName'
+  -> AppMeshVirtualServiceVirtualNodeServiceProvider
+appMeshVirtualServiceVirtualNodeServiceProvider virtualNodeNamearg =
+  AppMeshVirtualServiceVirtualNodeServiceProvider
+  { _appMeshVirtualServiceVirtualNodeServiceProviderVirtualNodeName = virtualNodeNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualservice-virtualnodeserviceprovider.html#cfn-appmesh-virtualservice-virtualnodeserviceprovider-virtualnodename
+amvsvnspVirtualNodeName :: Lens' AppMeshVirtualServiceVirtualNodeServiceProvider (Val Text)
+amvsvnspVirtualNodeName = lens _appMeshVirtualServiceVirtualNodeServiceProviderVirtualNodeName (\s a -> s { _appMeshVirtualServiceVirtualNodeServiceProviderVirtualNodeName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualServiceVirtualRouterServiceProvider.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualServiceVirtualRouterServiceProvider.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualServiceVirtualRouterServiceProvider.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualservice-virtualrouterserviceprovider.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualRouterServiceProvider where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for
+-- AppMeshVirtualServiceVirtualRouterServiceProvider. See
+-- 'appMeshVirtualServiceVirtualRouterServiceProvider' for a more convenient
+-- constructor.
+data AppMeshVirtualServiceVirtualRouterServiceProvider =
+  AppMeshVirtualServiceVirtualRouterServiceProvider
+  { _appMeshVirtualServiceVirtualRouterServiceProviderVirtualRouterName :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualServiceVirtualRouterServiceProvider where
+  toJSON AppMeshVirtualServiceVirtualRouterServiceProvider{..} =
+    object $
+    catMaybes
+    [ (Just . ("VirtualRouterName",) . toJSON) _appMeshVirtualServiceVirtualRouterServiceProviderVirtualRouterName
+    ]
+
+-- | Constructor for 'AppMeshVirtualServiceVirtualRouterServiceProvider'
+-- containing required fields as arguments.
+appMeshVirtualServiceVirtualRouterServiceProvider
+  :: Val Text -- ^ 'amvsvrspVirtualRouterName'
+  -> AppMeshVirtualServiceVirtualRouterServiceProvider
+appMeshVirtualServiceVirtualRouterServiceProvider virtualRouterNamearg =
+  AppMeshVirtualServiceVirtualRouterServiceProvider
+  { _appMeshVirtualServiceVirtualRouterServiceProviderVirtualRouterName = virtualRouterNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualservice-virtualrouterserviceprovider.html#cfn-appmesh-virtualservice-virtualrouterserviceprovider-virtualroutername
+amvsvrspVirtualRouterName :: Lens' AppMeshVirtualServiceVirtualRouterServiceProvider (Val Text)
+amvsvrspVirtualRouterName = lens _appMeshVirtualServiceVirtualRouterServiceProviderVirtualRouterName (\s a -> s { _appMeshVirtualServiceVirtualRouterServiceProviderVirtualRouterName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualServiceVirtualServiceProvider.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualServiceVirtualServiceProvider.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualServiceVirtualServiceProvider.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualservice-virtualserviceprovider.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualServiceProvider where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualNodeServiceProvider
+import Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualRouterServiceProvider
+
+-- | Full data type definition for
+-- AppMeshVirtualServiceVirtualServiceProvider. See
+-- 'appMeshVirtualServiceVirtualServiceProvider' for a more convenient
+-- constructor.
+data AppMeshVirtualServiceVirtualServiceProvider =
+  AppMeshVirtualServiceVirtualServiceProvider
+  { _appMeshVirtualServiceVirtualServiceProviderVirtualNode :: Maybe AppMeshVirtualServiceVirtualNodeServiceProvider
+  , _appMeshVirtualServiceVirtualServiceProviderVirtualRouter :: Maybe AppMeshVirtualServiceVirtualRouterServiceProvider
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualServiceVirtualServiceProvider where
+  toJSON AppMeshVirtualServiceVirtualServiceProvider{..} =
+    object $
+    catMaybes
+    [ fmap (("VirtualNode",) . toJSON) _appMeshVirtualServiceVirtualServiceProviderVirtualNode
+    , fmap (("VirtualRouter",) . toJSON) _appMeshVirtualServiceVirtualServiceProviderVirtualRouter
+    ]
+
+-- | Constructor for 'AppMeshVirtualServiceVirtualServiceProvider' containing
+-- required fields as arguments.
+appMeshVirtualServiceVirtualServiceProvider
+  :: AppMeshVirtualServiceVirtualServiceProvider
+appMeshVirtualServiceVirtualServiceProvider  =
+  AppMeshVirtualServiceVirtualServiceProvider
+  { _appMeshVirtualServiceVirtualServiceProviderVirtualNode = Nothing
+  , _appMeshVirtualServiceVirtualServiceProviderVirtualRouter = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualservice-virtualserviceprovider.html#cfn-appmesh-virtualservice-virtualserviceprovider-virtualnode
+amvsvspVirtualNode :: Lens' AppMeshVirtualServiceVirtualServiceProvider (Maybe AppMeshVirtualServiceVirtualNodeServiceProvider)
+amvsvspVirtualNode = lens _appMeshVirtualServiceVirtualServiceProviderVirtualNode (\s a -> s { _appMeshVirtualServiceVirtualServiceProviderVirtualNode = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualservice-virtualserviceprovider.html#cfn-appmesh-virtualservice-virtualserviceprovider-virtualrouter
+amvsvspVirtualRouter :: Lens' AppMeshVirtualServiceVirtualServiceProvider (Maybe AppMeshVirtualServiceVirtualRouterServiceProvider)
+amvsvspVirtualRouter = lens _appMeshVirtualServiceVirtualServiceProviderVirtualRouter (\s a -> s { _appMeshVirtualServiceVirtualServiceProviderVirtualRouter = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualServiceVirtualServiceSpec.hs b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualServiceVirtualServiceSpec.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppMeshVirtualServiceVirtualServiceSpec.hs
@@ -0,0 +1,39 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualservice-virtualservicespec.html
+
+module Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualServiceSpec where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualServiceProvider
+
+-- | Full data type definition for AppMeshVirtualServiceVirtualServiceSpec.
+-- See 'appMeshVirtualServiceVirtualServiceSpec' for a more convenient
+-- constructor.
+data AppMeshVirtualServiceVirtualServiceSpec =
+  AppMeshVirtualServiceVirtualServiceSpec
+  { _appMeshVirtualServiceVirtualServiceSpecProvider :: Maybe AppMeshVirtualServiceVirtualServiceProvider
+  } deriving (Show, Eq)
+
+instance ToJSON AppMeshVirtualServiceVirtualServiceSpec where
+  toJSON AppMeshVirtualServiceVirtualServiceSpec{..} =
+    object $
+    catMaybes
+    [ fmap (("Provider",) . toJSON) _appMeshVirtualServiceVirtualServiceSpecProvider
+    ]
+
+-- | Constructor for 'AppMeshVirtualServiceVirtualServiceSpec' containing
+-- required fields as arguments.
+appMeshVirtualServiceVirtualServiceSpec
+  :: AppMeshVirtualServiceVirtualServiceSpec
+appMeshVirtualServiceVirtualServiceSpec  =
+  AppMeshVirtualServiceVirtualServiceSpec
+  { _appMeshVirtualServiceVirtualServiceSpecProvider = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualservice-virtualservicespec.html#cfn-appmesh-virtualservice-virtualservicespec-provider
+amvsvssProvider :: Lens' AppMeshVirtualServiceVirtualServiceSpec (Maybe AppMeshVirtualServiceVirtualServiceProvider)
+amvsvssProvider = lens _appMeshVirtualServiceVirtualServiceSpecProvider (\s a -> s { _appMeshVirtualServiceVirtualServiceSpecProvider = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ServiceDiscoveryServiceDnsRecord.hs b/library-gen/Stratosphere/ResourceProperties/ServiceDiscoveryServiceDnsRecord.hs
--- a/library-gen/Stratosphere/ResourceProperties/ServiceDiscoveryServiceDnsRecord.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ServiceDiscoveryServiceDnsRecord.hs
@@ -14,7 +14,7 @@
 -- 'serviceDiscoveryServiceDnsRecord' for a more convenient constructor.
 data ServiceDiscoveryServiceDnsRecord =
   ServiceDiscoveryServiceDnsRecord
-  { _serviceDiscoveryServiceDnsRecordTTL :: Val Text
+  { _serviceDiscoveryServiceDnsRecordTTL :: Val Double
   , _serviceDiscoveryServiceDnsRecordType :: Val Text
   } deriving (Show, Eq)
 
@@ -29,7 +29,7 @@
 -- | Constructor for 'ServiceDiscoveryServiceDnsRecord' containing required
 -- fields as arguments.
 serviceDiscoveryServiceDnsRecord
-  :: Val Text -- ^ 'sdsdrTTL'
+  :: Val Double -- ^ 'sdsdrTTL'
   -> Val Text -- ^ 'sdsdrType'
   -> ServiceDiscoveryServiceDnsRecord
 serviceDiscoveryServiceDnsRecord tTLarg typearg =
@@ -39,7 +39,7 @@
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-servicediscovery-service-dnsrecord.html#cfn-servicediscovery-service-dnsrecord-ttl
-sdsdrTTL :: Lens' ServiceDiscoveryServiceDnsRecord (Val Text)
+sdsdrTTL :: Lens' ServiceDiscoveryServiceDnsRecord (Val Double)
 sdsdrTTL = lens _serviceDiscoveryServiceDnsRecordTTL (\s a -> s { _serviceDiscoveryServiceDnsRecordTTL = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-servicediscovery-service-dnsrecord.html#cfn-servicediscovery-service-dnsrecord-type
diff --git a/library-gen/Stratosphere/Resources.hs b/library-gen/Stratosphere/Resources.hs
--- a/library-gen/Stratosphere/Resources.hs
+++ b/library-gen/Stratosphere/Resources.hs
@@ -75,6 +75,11 @@
 import Stratosphere.Resources.ApiGatewayV2Route as X
 import Stratosphere.Resources.ApiGatewayV2RouteResponse as X
 import Stratosphere.Resources.ApiGatewayV2Stage as X
+import Stratosphere.Resources.AppMeshMesh as X
+import Stratosphere.Resources.AppMeshRoute as X
+import Stratosphere.Resources.AppMeshVirtualNode as X
+import Stratosphere.Resources.AppMeshVirtualRouter as X
+import Stratosphere.Resources.AppMeshVirtualService as X
 import Stratosphere.Resources.AppStreamDirectoryConfig as X
 import Stratosphere.Resources.AppStreamFleet as X
 import Stratosphere.Resources.AppStreamImageBuilder as X
@@ -452,6 +457,38 @@
 import Stratosphere.ResourceProperties.ApiGatewayV2RouteResponseParameterConstraints as X
 import Stratosphere.ResourceProperties.ApiGatewayV2StageAccessLogSettings as X
 import Stratosphere.ResourceProperties.ApiGatewayV2StageRouteSettings as X
+import Stratosphere.ResourceProperties.AppMeshMeshEgressFilter as X
+import Stratosphere.ResourceProperties.AppMeshMeshMeshSpec as X
+import Stratosphere.ResourceProperties.AppMeshMeshTagRef as X
+import Stratosphere.ResourceProperties.AppMeshRouteHttpRoute as X
+import Stratosphere.ResourceProperties.AppMeshRouteHttpRouteAction as X
+import Stratosphere.ResourceProperties.AppMeshRouteHttpRouteMatch as X
+import Stratosphere.ResourceProperties.AppMeshRouteRouteSpec as X
+import Stratosphere.ResourceProperties.AppMeshRouteTagRef as X
+import Stratosphere.ResourceProperties.AppMeshRouteTcpRoute as X
+import Stratosphere.ResourceProperties.AppMeshRouteTcpRouteAction as X
+import Stratosphere.ResourceProperties.AppMeshRouteWeightedTarget as X
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeAccessLog as X
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeBackend as X
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeDnsServiceDiscovery as X
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeFileAccessLog as X
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeHealthCheck as X
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeListener as X
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeLogging as X
+import Stratosphere.ResourceProperties.AppMeshVirtualNodePortMapping as X
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeServiceDiscovery as X
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeTagRef as X
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeVirtualNodeSpec as X
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeVirtualServiceBackend as X
+import Stratosphere.ResourceProperties.AppMeshVirtualRouterPortMapping as X
+import Stratosphere.ResourceProperties.AppMeshVirtualRouterTagRef as X
+import Stratosphere.ResourceProperties.AppMeshVirtualRouterVirtualRouterListener as X
+import Stratosphere.ResourceProperties.AppMeshVirtualRouterVirtualRouterSpec as X
+import Stratosphere.ResourceProperties.AppMeshVirtualServiceTagRef as X
+import Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualNodeServiceProvider as X
+import Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualRouterServiceProvider as X
+import Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualServiceProvider as X
+import Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualServiceSpec as X
 import Stratosphere.ResourceProperties.AppStreamDirectoryConfigServiceAccountCredentials as X
 import Stratosphere.ResourceProperties.AppStreamFleetComputeCapacity as X
 import Stratosphere.ResourceProperties.AppStreamFleetDomainJoinInfo as X
diff --git a/library-gen/Stratosphere/Resources/AppMeshMesh.hs b/library-gen/Stratosphere/Resources/AppMeshMesh.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/AppMeshMesh.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-mesh.html
+
+module Stratosphere.Resources.AppMeshMesh where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshMeshMeshSpec
+import Stratosphere.ResourceProperties.AppMeshMeshTagRef
+
+-- | Full data type definition for AppMeshMesh. See 'appMeshMesh' for a more
+-- convenient constructor.
+data AppMeshMesh =
+  AppMeshMesh
+  { _appMeshMeshMeshName :: Val Text
+  , _appMeshMeshSpec :: Maybe AppMeshMeshMeshSpec
+  , _appMeshMeshTags :: Maybe [AppMeshMeshTagRef]
+  } deriving (Show, Eq)
+
+instance ToResourceProperties AppMeshMesh where
+  toResourceProperties AppMeshMesh{..} =
+    ResourceProperties
+    { resourcePropertiesType = "AWS::AppMesh::Mesh"
+    , resourcePropertiesProperties =
+        hashMapFromList $ catMaybes
+        [ (Just . ("MeshName",) . toJSON) _appMeshMeshMeshName
+        , fmap (("Spec",) . toJSON) _appMeshMeshSpec
+        , fmap (("Tags",) . toJSON) _appMeshMeshTags
+        ]
+    }
+
+-- | Constructor for 'AppMeshMesh' containing required fields as arguments.
+appMeshMesh
+  :: Val Text -- ^ 'ammMeshName'
+  -> AppMeshMesh
+appMeshMesh meshNamearg =
+  AppMeshMesh
+  { _appMeshMeshMeshName = meshNamearg
+  , _appMeshMeshSpec = Nothing
+  , _appMeshMeshTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-mesh.html#cfn-appmesh-mesh-meshname
+ammMeshName :: Lens' AppMeshMesh (Val Text)
+ammMeshName = lens _appMeshMeshMeshName (\s a -> s { _appMeshMeshMeshName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-mesh.html#cfn-appmesh-mesh-spec
+ammSpec :: Lens' AppMeshMesh (Maybe AppMeshMeshMeshSpec)
+ammSpec = lens _appMeshMeshSpec (\s a -> s { _appMeshMeshSpec = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-mesh.html#cfn-appmesh-mesh-tags
+ammTags :: Lens' AppMeshMesh (Maybe [AppMeshMeshTagRef])
+ammTags = lens _appMeshMeshTags (\s a -> s { _appMeshMeshTags = a })
diff --git a/library-gen/Stratosphere/Resources/AppMeshRoute.hs b/library-gen/Stratosphere/Resources/AppMeshRoute.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/AppMeshRoute.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-route.html
+
+module Stratosphere.Resources.AppMeshRoute where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshRouteRouteSpec
+import Stratosphere.ResourceProperties.AppMeshRouteTagRef
+
+-- | Full data type definition for AppMeshRoute. See 'appMeshRoute' for a more
+-- convenient constructor.
+data AppMeshRoute =
+  AppMeshRoute
+  { _appMeshRouteMeshName :: Val Text
+  , _appMeshRouteRouteName :: Val Text
+  , _appMeshRouteSpec :: AppMeshRouteRouteSpec
+  , _appMeshRouteTags :: Maybe [AppMeshRouteTagRef]
+  , _appMeshRouteVirtualRouterName :: Val Text
+  } deriving (Show, Eq)
+
+instance ToResourceProperties AppMeshRoute where
+  toResourceProperties AppMeshRoute{..} =
+    ResourceProperties
+    { resourcePropertiesType = "AWS::AppMesh::Route"
+    , resourcePropertiesProperties =
+        hashMapFromList $ catMaybes
+        [ (Just . ("MeshName",) . toJSON) _appMeshRouteMeshName
+        , (Just . ("RouteName",) . toJSON) _appMeshRouteRouteName
+        , (Just . ("Spec",) . toJSON) _appMeshRouteSpec
+        , fmap (("Tags",) . toJSON) _appMeshRouteTags
+        , (Just . ("VirtualRouterName",) . toJSON) _appMeshRouteVirtualRouterName
+        ]
+    }
+
+-- | Constructor for 'AppMeshRoute' containing required fields as arguments.
+appMeshRoute
+  :: Val Text -- ^ 'amrMeshName'
+  -> Val Text -- ^ 'amrRouteName'
+  -> AppMeshRouteRouteSpec -- ^ 'amrSpec'
+  -> Val Text -- ^ 'amrVirtualRouterName'
+  -> AppMeshRoute
+appMeshRoute meshNamearg routeNamearg specarg virtualRouterNamearg =
+  AppMeshRoute
+  { _appMeshRouteMeshName = meshNamearg
+  , _appMeshRouteRouteName = routeNamearg
+  , _appMeshRouteSpec = specarg
+  , _appMeshRouteTags = Nothing
+  , _appMeshRouteVirtualRouterName = virtualRouterNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-route.html#cfn-appmesh-route-meshname
+amrMeshName :: Lens' AppMeshRoute (Val Text)
+amrMeshName = lens _appMeshRouteMeshName (\s a -> s { _appMeshRouteMeshName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-route.html#cfn-appmesh-route-routename
+amrRouteName :: Lens' AppMeshRoute (Val Text)
+amrRouteName = lens _appMeshRouteRouteName (\s a -> s { _appMeshRouteRouteName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-route.html#cfn-appmesh-route-spec
+amrSpec :: Lens' AppMeshRoute AppMeshRouteRouteSpec
+amrSpec = lens _appMeshRouteSpec (\s a -> s { _appMeshRouteSpec = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-route.html#cfn-appmesh-route-tags
+amrTags :: Lens' AppMeshRoute (Maybe [AppMeshRouteTagRef])
+amrTags = lens _appMeshRouteTags (\s a -> s { _appMeshRouteTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-route.html#cfn-appmesh-route-virtualroutername
+amrVirtualRouterName :: Lens' AppMeshRoute (Val Text)
+amrVirtualRouterName = lens _appMeshRouteVirtualRouterName (\s a -> s { _appMeshRouteVirtualRouterName = a })
diff --git a/library-gen/Stratosphere/Resources/AppMeshVirtualNode.hs b/library-gen/Stratosphere/Resources/AppMeshVirtualNode.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/AppMeshVirtualNode.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-virtualnode.html
+
+module Stratosphere.Resources.AppMeshVirtualNode where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeVirtualNodeSpec
+import Stratosphere.ResourceProperties.AppMeshVirtualNodeTagRef
+
+-- | Full data type definition for AppMeshVirtualNode. See
+-- 'appMeshVirtualNode' for a more convenient constructor.
+data AppMeshVirtualNode =
+  AppMeshVirtualNode
+  { _appMeshVirtualNodeMeshName :: Val Text
+  , _appMeshVirtualNodeSpec :: AppMeshVirtualNodeVirtualNodeSpec
+  , _appMeshVirtualNodeTags :: Maybe [AppMeshVirtualNodeTagRef]
+  , _appMeshVirtualNodeVirtualNodeName :: Val Text
+  } deriving (Show, Eq)
+
+instance ToResourceProperties AppMeshVirtualNode where
+  toResourceProperties AppMeshVirtualNode{..} =
+    ResourceProperties
+    { resourcePropertiesType = "AWS::AppMesh::VirtualNode"
+    , resourcePropertiesProperties =
+        hashMapFromList $ catMaybes
+        [ (Just . ("MeshName",) . toJSON) _appMeshVirtualNodeMeshName
+        , (Just . ("Spec",) . toJSON) _appMeshVirtualNodeSpec
+        , fmap (("Tags",) . toJSON) _appMeshVirtualNodeTags
+        , (Just . ("VirtualNodeName",) . toJSON) _appMeshVirtualNodeVirtualNodeName
+        ]
+    }
+
+-- | Constructor for 'AppMeshVirtualNode' containing required fields as
+-- arguments.
+appMeshVirtualNode
+  :: Val Text -- ^ 'amvnMeshName'
+  -> AppMeshVirtualNodeVirtualNodeSpec -- ^ 'amvnSpec'
+  -> Val Text -- ^ 'amvnVirtualNodeName'
+  -> AppMeshVirtualNode
+appMeshVirtualNode meshNamearg specarg virtualNodeNamearg =
+  AppMeshVirtualNode
+  { _appMeshVirtualNodeMeshName = meshNamearg
+  , _appMeshVirtualNodeSpec = specarg
+  , _appMeshVirtualNodeTags = Nothing
+  , _appMeshVirtualNodeVirtualNodeName = virtualNodeNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-virtualnode.html#cfn-appmesh-virtualnode-meshname
+amvnMeshName :: Lens' AppMeshVirtualNode (Val Text)
+amvnMeshName = lens _appMeshVirtualNodeMeshName (\s a -> s { _appMeshVirtualNodeMeshName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-virtualnode.html#cfn-appmesh-virtualnode-spec
+amvnSpec :: Lens' AppMeshVirtualNode AppMeshVirtualNodeVirtualNodeSpec
+amvnSpec = lens _appMeshVirtualNodeSpec (\s a -> s { _appMeshVirtualNodeSpec = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-virtualnode.html#cfn-appmesh-virtualnode-tags
+amvnTags :: Lens' AppMeshVirtualNode (Maybe [AppMeshVirtualNodeTagRef])
+amvnTags = lens _appMeshVirtualNodeTags (\s a -> s { _appMeshVirtualNodeTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-virtualnode.html#cfn-appmesh-virtualnode-virtualnodename
+amvnVirtualNodeName :: Lens' AppMeshVirtualNode (Val Text)
+amvnVirtualNodeName = lens _appMeshVirtualNodeVirtualNodeName (\s a -> s { _appMeshVirtualNodeVirtualNodeName = a })
diff --git a/library-gen/Stratosphere/Resources/AppMeshVirtualRouter.hs b/library-gen/Stratosphere/Resources/AppMeshVirtualRouter.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/AppMeshVirtualRouter.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-virtualrouter.html
+
+module Stratosphere.Resources.AppMeshVirtualRouter where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshVirtualRouterVirtualRouterSpec
+import Stratosphere.ResourceProperties.AppMeshVirtualRouterTagRef
+
+-- | Full data type definition for AppMeshVirtualRouter. See
+-- 'appMeshVirtualRouter' for a more convenient constructor.
+data AppMeshVirtualRouter =
+  AppMeshVirtualRouter
+  { _appMeshVirtualRouterMeshName :: Val Text
+  , _appMeshVirtualRouterSpec :: AppMeshVirtualRouterVirtualRouterSpec
+  , _appMeshVirtualRouterTags :: Maybe [AppMeshVirtualRouterTagRef]
+  , _appMeshVirtualRouterVirtualRouterName :: Val Text
+  } deriving (Show, Eq)
+
+instance ToResourceProperties AppMeshVirtualRouter where
+  toResourceProperties AppMeshVirtualRouter{..} =
+    ResourceProperties
+    { resourcePropertiesType = "AWS::AppMesh::VirtualRouter"
+    , resourcePropertiesProperties =
+        hashMapFromList $ catMaybes
+        [ (Just . ("MeshName",) . toJSON) _appMeshVirtualRouterMeshName
+        , (Just . ("Spec",) . toJSON) _appMeshVirtualRouterSpec
+        , fmap (("Tags",) . toJSON) _appMeshVirtualRouterTags
+        , (Just . ("VirtualRouterName",) . toJSON) _appMeshVirtualRouterVirtualRouterName
+        ]
+    }
+
+-- | Constructor for 'AppMeshVirtualRouter' containing required fields as
+-- arguments.
+appMeshVirtualRouter
+  :: Val Text -- ^ 'amvrMeshName'
+  -> AppMeshVirtualRouterVirtualRouterSpec -- ^ 'amvrSpec'
+  -> Val Text -- ^ 'amvrVirtualRouterName'
+  -> AppMeshVirtualRouter
+appMeshVirtualRouter meshNamearg specarg virtualRouterNamearg =
+  AppMeshVirtualRouter
+  { _appMeshVirtualRouterMeshName = meshNamearg
+  , _appMeshVirtualRouterSpec = specarg
+  , _appMeshVirtualRouterTags = Nothing
+  , _appMeshVirtualRouterVirtualRouterName = virtualRouterNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-virtualrouter.html#cfn-appmesh-virtualrouter-meshname
+amvrMeshName :: Lens' AppMeshVirtualRouter (Val Text)
+amvrMeshName = lens _appMeshVirtualRouterMeshName (\s a -> s { _appMeshVirtualRouterMeshName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-virtualrouter.html#cfn-appmesh-virtualrouter-spec
+amvrSpec :: Lens' AppMeshVirtualRouter AppMeshVirtualRouterVirtualRouterSpec
+amvrSpec = lens _appMeshVirtualRouterSpec (\s a -> s { _appMeshVirtualRouterSpec = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-virtualrouter.html#cfn-appmesh-virtualrouter-tags
+amvrTags :: Lens' AppMeshVirtualRouter (Maybe [AppMeshVirtualRouterTagRef])
+amvrTags = lens _appMeshVirtualRouterTags (\s a -> s { _appMeshVirtualRouterTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-virtualrouter.html#cfn-appmesh-virtualrouter-virtualroutername
+amvrVirtualRouterName :: Lens' AppMeshVirtualRouter (Val Text)
+amvrVirtualRouterName = lens _appMeshVirtualRouterVirtualRouterName (\s a -> s { _appMeshVirtualRouterVirtualRouterName = a })
diff --git a/library-gen/Stratosphere/Resources/AppMeshVirtualService.hs b/library-gen/Stratosphere/Resources/AppMeshVirtualService.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/AppMeshVirtualService.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-virtualservice.html
+
+module Stratosphere.Resources.AppMeshVirtualService where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualServiceSpec
+import Stratosphere.ResourceProperties.AppMeshVirtualServiceTagRef
+
+-- | Full data type definition for AppMeshVirtualService. See
+-- 'appMeshVirtualService' for a more convenient constructor.
+data AppMeshVirtualService =
+  AppMeshVirtualService
+  { _appMeshVirtualServiceMeshName :: Val Text
+  , _appMeshVirtualServiceSpec :: AppMeshVirtualServiceVirtualServiceSpec
+  , _appMeshVirtualServiceTags :: Maybe [AppMeshVirtualServiceTagRef]
+  , _appMeshVirtualServiceVirtualServiceName :: Val Text
+  } deriving (Show, Eq)
+
+instance ToResourceProperties AppMeshVirtualService where
+  toResourceProperties AppMeshVirtualService{..} =
+    ResourceProperties
+    { resourcePropertiesType = "AWS::AppMesh::VirtualService"
+    , resourcePropertiesProperties =
+        hashMapFromList $ catMaybes
+        [ (Just . ("MeshName",) . toJSON) _appMeshVirtualServiceMeshName
+        , (Just . ("Spec",) . toJSON) _appMeshVirtualServiceSpec
+        , fmap (("Tags",) . toJSON) _appMeshVirtualServiceTags
+        , (Just . ("VirtualServiceName",) . toJSON) _appMeshVirtualServiceVirtualServiceName
+        ]
+    }
+
+-- | Constructor for 'AppMeshVirtualService' containing required fields as
+-- arguments.
+appMeshVirtualService
+  :: Val Text -- ^ 'amvsMeshName'
+  -> AppMeshVirtualServiceVirtualServiceSpec -- ^ 'amvsSpec'
+  -> Val Text -- ^ 'amvsVirtualServiceName'
+  -> AppMeshVirtualService
+appMeshVirtualService meshNamearg specarg virtualServiceNamearg =
+  AppMeshVirtualService
+  { _appMeshVirtualServiceMeshName = meshNamearg
+  , _appMeshVirtualServiceSpec = specarg
+  , _appMeshVirtualServiceTags = Nothing
+  , _appMeshVirtualServiceVirtualServiceName = virtualServiceNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-virtualservice.html#cfn-appmesh-virtualservice-meshname
+amvsMeshName :: Lens' AppMeshVirtualService (Val Text)
+amvsMeshName = lens _appMeshVirtualServiceMeshName (\s a -> s { _appMeshVirtualServiceMeshName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-virtualservice.html#cfn-appmesh-virtualservice-spec
+amvsSpec :: Lens' AppMeshVirtualService AppMeshVirtualServiceVirtualServiceSpec
+amvsSpec = lens _appMeshVirtualServiceSpec (\s a -> s { _appMeshVirtualServiceSpec = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-virtualservice.html#cfn-appmesh-virtualservice-tags
+amvsTags :: Lens' AppMeshVirtualService (Maybe [AppMeshVirtualServiceTagRef])
+amvsTags = lens _appMeshVirtualServiceTags (\s a -> s { _appMeshVirtualServiceTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appmesh-virtualservice.html#cfn-appmesh-virtualservice-virtualservicename
+amvsVirtualServiceName :: Lens' AppMeshVirtualService (Val Text)
+amvsVirtualServiceName = lens _appMeshVirtualServiceVirtualServiceName (\s a -> s { _appMeshVirtualServiceVirtualServiceName = a })
diff --git a/stratosphere.cabal b/stratosphere.cabal
--- a/stratosphere.cabal
+++ b/stratosphere.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: ea7cd0bc0e3e727dd5d25bdf08ba888d69317a1d5ace706408c2e87601a6583e
+-- hash: 112dc6cf41a7ab376e8d4417b3842f7a21e8db0e1cd6f09377ccc096fffe9a8b
 
 name:           stratosphere
-version:        0.35.0
+version:        0.36.0
 synopsis:       EDSL for AWS CloudFormation
 description:    EDSL for AWS CloudFormation
 category:       AWS, Cloud
@@ -87,6 +87,38 @@
       Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepAdjustment
       Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration
       Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration
+      Stratosphere.ResourceProperties.AppMeshMeshEgressFilter
+      Stratosphere.ResourceProperties.AppMeshMeshMeshSpec
+      Stratosphere.ResourceProperties.AppMeshMeshTagRef
+      Stratosphere.ResourceProperties.AppMeshRouteHttpRoute
+      Stratosphere.ResourceProperties.AppMeshRouteHttpRouteAction
+      Stratosphere.ResourceProperties.AppMeshRouteHttpRouteMatch
+      Stratosphere.ResourceProperties.AppMeshRouteRouteSpec
+      Stratosphere.ResourceProperties.AppMeshRouteTagRef
+      Stratosphere.ResourceProperties.AppMeshRouteTcpRoute
+      Stratosphere.ResourceProperties.AppMeshRouteTcpRouteAction
+      Stratosphere.ResourceProperties.AppMeshRouteWeightedTarget
+      Stratosphere.ResourceProperties.AppMeshVirtualNodeAccessLog
+      Stratosphere.ResourceProperties.AppMeshVirtualNodeBackend
+      Stratosphere.ResourceProperties.AppMeshVirtualNodeDnsServiceDiscovery
+      Stratosphere.ResourceProperties.AppMeshVirtualNodeFileAccessLog
+      Stratosphere.ResourceProperties.AppMeshVirtualNodeHealthCheck
+      Stratosphere.ResourceProperties.AppMeshVirtualNodeListener
+      Stratosphere.ResourceProperties.AppMeshVirtualNodeLogging
+      Stratosphere.ResourceProperties.AppMeshVirtualNodePortMapping
+      Stratosphere.ResourceProperties.AppMeshVirtualNodeServiceDiscovery
+      Stratosphere.ResourceProperties.AppMeshVirtualNodeTagRef
+      Stratosphere.ResourceProperties.AppMeshVirtualNodeVirtualNodeSpec
+      Stratosphere.ResourceProperties.AppMeshVirtualNodeVirtualServiceBackend
+      Stratosphere.ResourceProperties.AppMeshVirtualRouterPortMapping
+      Stratosphere.ResourceProperties.AppMeshVirtualRouterTagRef
+      Stratosphere.ResourceProperties.AppMeshVirtualRouterVirtualRouterListener
+      Stratosphere.ResourceProperties.AppMeshVirtualRouterVirtualRouterSpec
+      Stratosphere.ResourceProperties.AppMeshVirtualServiceTagRef
+      Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualNodeServiceProvider
+      Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualRouterServiceProvider
+      Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualServiceProvider
+      Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualServiceSpec
       Stratosphere.ResourceProperties.AppStreamDirectoryConfigServiceAccountCredentials
       Stratosphere.ResourceProperties.AppStreamFleetComputeCapacity
       Stratosphere.ResourceProperties.AppStreamFleetDomainJoinInfo
@@ -890,6 +922,11 @@
       Stratosphere.Resources.ApiGatewayVpcLink
       Stratosphere.Resources.ApplicationAutoScalingScalableTarget
       Stratosphere.Resources.ApplicationAutoScalingScalingPolicy
+      Stratosphere.Resources.AppMeshMesh
+      Stratosphere.Resources.AppMeshRoute
+      Stratosphere.Resources.AppMeshVirtualNode
+      Stratosphere.Resources.AppMeshVirtualRouter
+      Stratosphere.Resources.AppMeshVirtualService
       Stratosphere.Resources.AppStreamDirectoryConfig
       Stratosphere.Resources.AppStreamFleet
       Stratosphere.Resources.AppStreamImageBuilder
