diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Change Log
 
+## 0.28.1
+
+* Update resource specification document to version 2.16.0
+
 ## 0.28.0
 
 * Update resource specification document to version 2.15.0
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceElasticInferenceAccelerator.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceElasticInferenceAccelerator.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceElasticInferenceAccelerator.hs
@@ -0,0 +1,45 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-elasticinferenceaccelerator.html
+
+module Stratosphere.ResourceProperties.EC2InstanceElasticInferenceAccelerator where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for EC2InstanceElasticInferenceAccelerator. See
+-- 'ec2InstanceElasticInferenceAccelerator' for a more convenient
+-- constructor.
+data EC2InstanceElasticInferenceAccelerator =
+  EC2InstanceElasticInferenceAccelerator
+  { _eC2InstanceElasticInferenceAcceleratorType :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON EC2InstanceElasticInferenceAccelerator where
+  toJSON EC2InstanceElasticInferenceAccelerator{..} =
+    object $
+    catMaybes
+    [ (Just . ("Type",) . toJSON) _eC2InstanceElasticInferenceAcceleratorType
+    ]
+
+instance FromJSON EC2InstanceElasticInferenceAccelerator where
+  parseJSON (Object obj) =
+    EC2InstanceElasticInferenceAccelerator <$>
+      (obj .: "Type")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2InstanceElasticInferenceAccelerator' containing
+-- required fields as arguments.
+ec2InstanceElasticInferenceAccelerator
+  :: Val Text -- ^ 'ecieiaType'
+  -> EC2InstanceElasticInferenceAccelerator
+ec2InstanceElasticInferenceAccelerator typearg =
+  EC2InstanceElasticInferenceAccelerator
+  { _eC2InstanceElasticInferenceAcceleratorType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-elasticinferenceaccelerator.html#cfn-ec2-instance-elasticinferenceaccelerator-type
+ecieiaType :: Lens' EC2InstanceElasticInferenceAccelerator (Val Text)
+ecieiaType = lens _eC2InstanceElasticInferenceAcceleratorType (\s a -> s { _eC2InstanceElasticInferenceAcceleratorType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2InstanceLicenseSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EC2InstanceLicenseSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2InstanceLicenseSpecification.hs
@@ -0,0 +1,44 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-licensespecification.html
+
+module Stratosphere.ResourceProperties.EC2InstanceLicenseSpecification where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for EC2InstanceLicenseSpecification. See
+-- 'ec2InstanceLicenseSpecification' for a more convenient constructor.
+data EC2InstanceLicenseSpecification =
+  EC2InstanceLicenseSpecification
+  { _eC2InstanceLicenseSpecificationLicenseConfigurationArn :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON EC2InstanceLicenseSpecification where
+  toJSON EC2InstanceLicenseSpecification{..} =
+    object $
+    catMaybes
+    [ (Just . ("LicenseConfigurationArn",) . toJSON) _eC2InstanceLicenseSpecificationLicenseConfigurationArn
+    ]
+
+instance FromJSON EC2InstanceLicenseSpecification where
+  parseJSON (Object obj) =
+    EC2InstanceLicenseSpecification <$>
+      (obj .: "LicenseConfigurationArn")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2InstanceLicenseSpecification' containing required
+-- fields as arguments.
+ec2InstanceLicenseSpecification
+  :: Val Text -- ^ 'ecilsLicenseConfigurationArn'
+  -> EC2InstanceLicenseSpecification
+ec2InstanceLicenseSpecification licenseConfigurationArnarg =
+  EC2InstanceLicenseSpecification
+  { _eC2InstanceLicenseSpecificationLicenseConfigurationArn = licenseConfigurationArnarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-licensespecification.html#cfn-ec2-instance-licensespecification-licenseconfigurationarn
+ecilsLicenseConfigurationArn :: Lens' EC2InstanceLicenseSpecification (Val Text)
+ecilsLicenseConfigurationArn = lens _eC2InstanceLicenseSpecificationLicenseConfigurationArn (\s a -> s { _eC2InstanceLicenseSpecificationLicenseConfigurationArn = a })
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
@@ -169,6 +169,12 @@
 import Stratosphere.Resources.EC2SubnetCidrBlock as X
 import Stratosphere.Resources.EC2SubnetNetworkAclAssociation as X
 import Stratosphere.Resources.EC2SubnetRouteTableAssociation as X
+import Stratosphere.Resources.EC2TransitGateway as X
+import Stratosphere.Resources.EC2TransitGatewayAttachment as X
+import Stratosphere.Resources.EC2TransitGatewayRoute as X
+import Stratosphere.Resources.EC2TransitGatewayRouteTable as X
+import Stratosphere.Resources.EC2TransitGatewayRouteTableAssociation as X
+import Stratosphere.Resources.EC2TransitGatewayRouteTablePropagation as X
 import Stratosphere.Resources.EC2TrunkInterfaceAssociation as X
 import Stratosphere.Resources.EC2VPC as X
 import Stratosphere.Resources.EC2VPCCidrBlock as X
@@ -346,6 +352,7 @@
 import Stratosphere.Resources.ServiceCatalogPortfolioShare as X
 import Stratosphere.Resources.ServiceCatalogTagOption as X
 import Stratosphere.Resources.ServiceCatalogTagOptionAssociation as X
+import Stratosphere.Resources.ServiceDiscoveryHttpNamespace as X
 import Stratosphere.Resources.ServiceDiscoveryInstance as X
 import Stratosphere.Resources.ServiceDiscoveryPrivateDnsNamespace as X
 import Stratosphere.Resources.ServiceDiscoveryPublicDnsNamespace as X
@@ -601,8 +608,10 @@
 import Stratosphere.ResourceProperties.EC2InstanceCreditSpecification as X
 import Stratosphere.ResourceProperties.EC2InstanceEbs as X
 import Stratosphere.ResourceProperties.EC2InstanceElasticGpuSpecification as X
+import Stratosphere.ResourceProperties.EC2InstanceElasticInferenceAccelerator as X
 import Stratosphere.ResourceProperties.EC2InstanceInstanceIpv6Address as X
 import Stratosphere.ResourceProperties.EC2InstanceLaunchTemplateSpecification as X
+import Stratosphere.ResourceProperties.EC2InstanceLicenseSpecification as X
 import Stratosphere.ResourceProperties.EC2InstanceNetworkInterface as X
 import Stratosphere.ResourceProperties.EC2InstanceNoDevice as X
 import Stratosphere.ResourceProperties.EC2InstancePrivateIpAddressSpecification as X
@@ -1169,6 +1178,12 @@
   | EC2SubnetCidrBlockProperties EC2SubnetCidrBlock
   | EC2SubnetNetworkAclAssociationProperties EC2SubnetNetworkAclAssociation
   | EC2SubnetRouteTableAssociationProperties EC2SubnetRouteTableAssociation
+  | EC2TransitGatewayProperties EC2TransitGateway
+  | EC2TransitGatewayAttachmentProperties EC2TransitGatewayAttachment
+  | EC2TransitGatewayRouteProperties EC2TransitGatewayRoute
+  | EC2TransitGatewayRouteTableProperties EC2TransitGatewayRouteTable
+  | EC2TransitGatewayRouteTableAssociationProperties EC2TransitGatewayRouteTableAssociation
+  | EC2TransitGatewayRouteTablePropagationProperties EC2TransitGatewayRouteTablePropagation
   | EC2TrunkInterfaceAssociationProperties EC2TrunkInterfaceAssociation
   | EC2VPCProperties EC2VPC
   | EC2VPCCidrBlockProperties EC2VPCCidrBlock
@@ -1346,6 +1361,7 @@
   | ServiceCatalogPortfolioShareProperties ServiceCatalogPortfolioShare
   | ServiceCatalogTagOptionProperties ServiceCatalogTagOption
   | ServiceCatalogTagOptionAssociationProperties ServiceCatalogTagOptionAssociation
+  | ServiceDiscoveryHttpNamespaceProperties ServiceDiscoveryHttpNamespace
   | ServiceDiscoveryInstanceProperties ServiceDiscoveryInstance
   | ServiceDiscoveryPrivateDnsNamespaceProperties ServiceDiscoveryPrivateDnsNamespace
   | ServiceDiscoveryPublicDnsNamespaceProperties ServiceDiscoveryPublicDnsNamespace
@@ -1668,6 +1684,18 @@
   [ "Type" .= ("AWS::EC2::SubnetNetworkAclAssociation" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EC2SubnetRouteTableAssociationProperties x) =
   [ "Type" .= ("AWS::EC2::SubnetRouteTableAssociation" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2TransitGatewayProperties x) =
+  [ "Type" .= ("AWS::EC2::TransitGateway" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2TransitGatewayAttachmentProperties x) =
+  [ "Type" .= ("AWS::EC2::TransitGatewayAttachment" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2TransitGatewayRouteProperties x) =
+  [ "Type" .= ("AWS::EC2::TransitGatewayRoute" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2TransitGatewayRouteTableProperties x) =
+  [ "Type" .= ("AWS::EC2::TransitGatewayRouteTable" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2TransitGatewayRouteTableAssociationProperties x) =
+  [ "Type" .= ("AWS::EC2::TransitGatewayRouteTableAssociation" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2TransitGatewayRouteTablePropagationProperties x) =
+  [ "Type" .= ("AWS::EC2::TransitGatewayRouteTablePropagation" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EC2TrunkInterfaceAssociationProperties x) =
   [ "Type" .= ("AWS::EC2::TrunkInterfaceAssociation" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EC2VPCProperties x) =
@@ -2022,6 +2050,8 @@
   [ "Type" .= ("AWS::ServiceCatalog::TagOption" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (ServiceCatalogTagOptionAssociationProperties x) =
   [ "Type" .= ("AWS::ServiceCatalog::TagOptionAssociation" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ServiceDiscoveryHttpNamespaceProperties x) =
+  [ "Type" .= ("AWS::ServiceDiscovery::HttpNamespace" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (ServiceDiscoveryInstanceProperties x) =
   [ "Type" .= ("AWS::ServiceDiscovery::Instance" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (ServiceDiscoveryPrivateDnsNamespaceProperties x) =
@@ -2196,6 +2226,12 @@
          "AWS::EC2::SubnetCidrBlock" -> EC2SubnetCidrBlockProperties <$> (o .: "Properties")
          "AWS::EC2::SubnetNetworkAclAssociation" -> EC2SubnetNetworkAclAssociationProperties <$> (o .: "Properties")
          "AWS::EC2::SubnetRouteTableAssociation" -> EC2SubnetRouteTableAssociationProperties <$> (o .: "Properties")
+         "AWS::EC2::TransitGateway" -> EC2TransitGatewayProperties <$> (o .: "Properties")
+         "AWS::EC2::TransitGatewayAttachment" -> EC2TransitGatewayAttachmentProperties <$> (o .: "Properties")
+         "AWS::EC2::TransitGatewayRoute" -> EC2TransitGatewayRouteProperties <$> (o .: "Properties")
+         "AWS::EC2::TransitGatewayRouteTable" -> EC2TransitGatewayRouteTableProperties <$> (o .: "Properties")
+         "AWS::EC2::TransitGatewayRouteTableAssociation" -> EC2TransitGatewayRouteTableAssociationProperties <$> (o .: "Properties")
+         "AWS::EC2::TransitGatewayRouteTablePropagation" -> EC2TransitGatewayRouteTablePropagationProperties <$> (o .: "Properties")
          "AWS::EC2::TrunkInterfaceAssociation" -> EC2TrunkInterfaceAssociationProperties <$> (o .: "Properties")
          "AWS::EC2::VPC" -> EC2VPCProperties <$> (o .: "Properties")
          "AWS::EC2::VPCCidrBlock" -> EC2VPCCidrBlockProperties <$> (o .: "Properties")
@@ -2373,6 +2409,7 @@
          "AWS::ServiceCatalog::PortfolioShare" -> ServiceCatalogPortfolioShareProperties <$> (o .: "Properties")
          "AWS::ServiceCatalog::TagOption" -> ServiceCatalogTagOptionProperties <$> (o .: "Properties")
          "AWS::ServiceCatalog::TagOptionAssociation" -> ServiceCatalogTagOptionAssociationProperties <$> (o .: "Properties")
+         "AWS::ServiceDiscovery::HttpNamespace" -> ServiceDiscoveryHttpNamespaceProperties <$> (o .: "Properties")
          "AWS::ServiceDiscovery::Instance" -> ServiceDiscoveryInstanceProperties <$> (o .: "Properties")
          "AWS::ServiceDiscovery::PrivateDnsNamespace" -> ServiceDiscoveryPrivateDnsNamespaceProperties <$> (o .: "Properties")
          "AWS::ServiceDiscovery::PublicDnsNamespace" -> ServiceDiscoveryPublicDnsNamespaceProperties <$> (o .: "Properties")
diff --git a/library-gen/Stratosphere/Resources/DynamoDBTable.hs b/library-gen/Stratosphere/Resources/DynamoDBTable.hs
--- a/library-gen/Stratosphere/Resources/DynamoDBTable.hs
+++ b/library-gen/Stratosphere/Resources/DynamoDBTable.hs
@@ -23,6 +23,7 @@
 data DynamoDBTable =
   DynamoDBTable
   { _dynamoDBTableAttributeDefinitions :: Maybe [DynamoDBTableAttributeDefinition]
+  , _dynamoDBTableBillingMode :: Maybe (Val Text)
   , _dynamoDBTableGlobalSecondaryIndexes :: Maybe [DynamoDBTableGlobalSecondaryIndex]
   , _dynamoDBTableKeySchema :: [DynamoDBTableKeySchema]
   , _dynamoDBTableLocalSecondaryIndexes :: Maybe [DynamoDBTableLocalSecondaryIndex]
@@ -40,6 +41,7 @@
     object $
     catMaybes
     [ fmap (("AttributeDefinitions",) . toJSON) _dynamoDBTableAttributeDefinitions
+    , fmap (("BillingMode",) . toJSON) _dynamoDBTableBillingMode
     , fmap (("GlobalSecondaryIndexes",) . toJSON) _dynamoDBTableGlobalSecondaryIndexes
     , (Just . ("KeySchema",) . toJSON) _dynamoDBTableKeySchema
     , fmap (("LocalSecondaryIndexes",) . toJSON) _dynamoDBTableLocalSecondaryIndexes
@@ -56,6 +58,7 @@
   parseJSON (Object obj) =
     DynamoDBTable <$>
       (obj .:? "AttributeDefinitions") <*>
+      (obj .:? "BillingMode") <*>
       (obj .:? "GlobalSecondaryIndexes") <*>
       (obj .: "KeySchema") <*>
       (obj .:? "LocalSecondaryIndexes") <*>
@@ -75,6 +78,7 @@
 dynamoDBTable keySchemaarg =
   DynamoDBTable
   { _dynamoDBTableAttributeDefinitions = Nothing
+  , _dynamoDBTableBillingMode = Nothing
   , _dynamoDBTableGlobalSecondaryIndexes = Nothing
   , _dynamoDBTableKeySchema = keySchemaarg
   , _dynamoDBTableLocalSecondaryIndexes = Nothing
@@ -90,6 +94,10 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-attributedef
 ddbtAttributeDefinitions :: Lens' DynamoDBTable (Maybe [DynamoDBTableAttributeDefinition])
 ddbtAttributeDefinitions = lens _dynamoDBTableAttributeDefinitions (\s a -> s { _dynamoDBTableAttributeDefinitions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-billingmode
+ddbtBillingMode :: Lens' DynamoDBTable (Maybe (Val Text))
+ddbtBillingMode = lens _dynamoDBTableBillingMode (\s a -> s { _dynamoDBTableBillingMode = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-gsi
 ddbtGlobalSecondaryIndexes :: Lens' DynamoDBTable (Maybe [DynamoDBTableGlobalSecondaryIndex])
diff --git a/library-gen/Stratosphere/Resources/EC2Instance.hs b/library-gen/Stratosphere/Resources/EC2Instance.hs
--- a/library-gen/Stratosphere/Resources/EC2Instance.hs
+++ b/library-gen/Stratosphere/Resources/EC2Instance.hs
@@ -10,8 +10,10 @@
 import Stratosphere.ResourceProperties.EC2InstanceBlockDeviceMapping
 import Stratosphere.ResourceProperties.EC2InstanceCreditSpecification
 import Stratosphere.ResourceProperties.EC2InstanceElasticGpuSpecification
+import Stratosphere.ResourceProperties.EC2InstanceElasticInferenceAccelerator
 import Stratosphere.ResourceProperties.EC2InstanceInstanceIpv6Address
 import Stratosphere.ResourceProperties.EC2InstanceLaunchTemplateSpecification
+import Stratosphere.ResourceProperties.EC2InstanceLicenseSpecification
 import Stratosphere.ResourceProperties.EC2InstanceNetworkInterface
 import Stratosphere.ResourceProperties.EC2InstanceSsmAssociation
 import Stratosphere.ResourceProperties.Tag
@@ -29,6 +31,7 @@
   , _eC2InstanceDisableApiTermination :: Maybe (Val Bool)
   , _eC2InstanceEbsOptimized :: Maybe (Val Bool)
   , _eC2InstanceElasticGpuSpecifications :: Maybe [EC2InstanceElasticGpuSpecification]
+  , _eC2InstanceElasticInferenceAccelerators :: Maybe [EC2InstanceElasticInferenceAccelerator]
   , _eC2InstanceHostId :: Maybe (Val Text)
   , _eC2InstanceIamInstanceProfile :: Maybe (Val Text)
   , _eC2InstanceImageId :: Maybe (Val Text)
@@ -39,6 +42,7 @@
   , _eC2InstanceKernelId :: Maybe (Val Text)
   , _eC2InstanceKeyName :: Maybe (Val Text)
   , _eC2InstanceLaunchTemplate :: Maybe EC2InstanceLaunchTemplateSpecification
+  , _eC2InstanceLicenseSpecifications :: Maybe [EC2InstanceLicenseSpecification]
   , _eC2InstanceMonitoring :: Maybe (Val Bool)
   , _eC2InstanceNetworkInterfaces :: Maybe [EC2InstanceNetworkInterface]
   , _eC2InstancePlacementGroupName :: Maybe (Val Text)
@@ -67,6 +71,7 @@
     , fmap (("DisableApiTermination",) . toJSON . fmap Bool') _eC2InstanceDisableApiTermination
     , fmap (("EbsOptimized",) . toJSON . fmap Bool') _eC2InstanceEbsOptimized
     , fmap (("ElasticGpuSpecifications",) . toJSON) _eC2InstanceElasticGpuSpecifications
+    , fmap (("ElasticInferenceAccelerators",) . toJSON) _eC2InstanceElasticInferenceAccelerators
     , fmap (("HostId",) . toJSON) _eC2InstanceHostId
     , fmap (("IamInstanceProfile",) . toJSON) _eC2InstanceIamInstanceProfile
     , fmap (("ImageId",) . toJSON) _eC2InstanceImageId
@@ -77,6 +82,7 @@
     , fmap (("KernelId",) . toJSON) _eC2InstanceKernelId
     , fmap (("KeyName",) . toJSON) _eC2InstanceKeyName
     , fmap (("LaunchTemplate",) . toJSON) _eC2InstanceLaunchTemplate
+    , fmap (("LicenseSpecifications",) . toJSON) _eC2InstanceLicenseSpecifications
     , fmap (("Monitoring",) . toJSON . fmap Bool') _eC2InstanceMonitoring
     , fmap (("NetworkInterfaces",) . toJSON) _eC2InstanceNetworkInterfaces
     , fmap (("PlacementGroupName",) . toJSON) _eC2InstancePlacementGroupName
@@ -104,6 +110,7 @@
       fmap (fmap (fmap unBool')) (obj .:? "DisableApiTermination") <*>
       fmap (fmap (fmap unBool')) (obj .:? "EbsOptimized") <*>
       (obj .:? "ElasticGpuSpecifications") <*>
+      (obj .:? "ElasticInferenceAccelerators") <*>
       (obj .:? "HostId") <*>
       (obj .:? "IamInstanceProfile") <*>
       (obj .:? "ImageId") <*>
@@ -114,6 +121,7 @@
       (obj .:? "KernelId") <*>
       (obj .:? "KeyName") <*>
       (obj .:? "LaunchTemplate") <*>
+      (obj .:? "LicenseSpecifications") <*>
       fmap (fmap (fmap unBool')) (obj .:? "Monitoring") <*>
       (obj .:? "NetworkInterfaces") <*>
       (obj .:? "PlacementGroupName") <*>
@@ -143,6 +151,7 @@
   , _eC2InstanceDisableApiTermination = Nothing
   , _eC2InstanceEbsOptimized = Nothing
   , _eC2InstanceElasticGpuSpecifications = Nothing
+  , _eC2InstanceElasticInferenceAccelerators = Nothing
   , _eC2InstanceHostId = Nothing
   , _eC2InstanceIamInstanceProfile = Nothing
   , _eC2InstanceImageId = Nothing
@@ -153,6 +162,7 @@
   , _eC2InstanceKernelId = Nothing
   , _eC2InstanceKeyName = Nothing
   , _eC2InstanceLaunchTemplate = Nothing
+  , _eC2InstanceLicenseSpecifications = Nothing
   , _eC2InstanceMonitoring = Nothing
   , _eC2InstanceNetworkInterfaces = Nothing
   , _eC2InstancePlacementGroupName = Nothing
@@ -201,6 +211,10 @@
 eciElasticGpuSpecifications :: Lens' EC2Instance (Maybe [EC2InstanceElasticGpuSpecification])
 eciElasticGpuSpecifications = lens _eC2InstanceElasticGpuSpecifications (\s a -> s { _eC2InstanceElasticGpuSpecifications = a })
 
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-elasticinferenceaccelerators
+eciElasticInferenceAccelerators :: Lens' EC2Instance (Maybe [EC2InstanceElasticInferenceAccelerator])
+eciElasticInferenceAccelerators = lens _eC2InstanceElasticInferenceAccelerators (\s a -> s { _eC2InstanceElasticInferenceAccelerators = a })
+
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-hostid
 eciHostId :: Lens' EC2Instance (Maybe (Val Text))
 eciHostId = lens _eC2InstanceHostId (\s a -> s { _eC2InstanceHostId = a })
@@ -240,6 +254,10 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-launchtemplate
 eciLaunchTemplate :: Lens' EC2Instance (Maybe EC2InstanceLaunchTemplateSpecification)
 eciLaunchTemplate = lens _eC2InstanceLaunchTemplate (\s a -> s { _eC2InstanceLaunchTemplate = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-licensespecifications
+eciLicenseSpecifications :: Lens' EC2Instance (Maybe [EC2InstanceLicenseSpecification])
+eciLicenseSpecifications = lens _eC2InstanceLicenseSpecifications (\s a -> s { _eC2InstanceLicenseSpecifications = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-monitoring
 eciMonitoring :: Lens' EC2Instance (Maybe (Val Bool))
diff --git a/library-gen/Stratosphere/Resources/EC2TransitGateway.hs b/library-gen/Stratosphere/Resources/EC2TransitGateway.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2TransitGateway.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html
+
+module Stratosphere.Resources.EC2TransitGateway where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2TransitGateway. See 'ec2TransitGateway'
+-- for a more convenient constructor.
+data EC2TransitGateway =
+  EC2TransitGateway
+  { _eC2TransitGatewayAmazonSideAsn :: Maybe (Val Integer)
+  , _eC2TransitGatewayAutoAcceptSharedAttachments :: Maybe (Val Text)
+  , _eC2TransitGatewayDefaultRouteTableAssociation :: Maybe (Val Text)
+  , _eC2TransitGatewayDefaultRouteTablePropagation :: Maybe (Val Text)
+  , _eC2TransitGatewayDescription :: Maybe (Val Text)
+  , _eC2TransitGatewayDnsSupport :: Maybe (Val Text)
+  , _eC2TransitGatewayTags :: Maybe [Tag]
+  , _eC2TransitGatewayVpnEcmpSupport :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2TransitGateway where
+  toJSON EC2TransitGateway{..} =
+    object $
+    catMaybes
+    [ fmap (("AmazonSideAsn",) . toJSON . fmap Integer') _eC2TransitGatewayAmazonSideAsn
+    , fmap (("AutoAcceptSharedAttachments",) . toJSON) _eC2TransitGatewayAutoAcceptSharedAttachments
+    , fmap (("DefaultRouteTableAssociation",) . toJSON) _eC2TransitGatewayDefaultRouteTableAssociation
+    , fmap (("DefaultRouteTablePropagation",) . toJSON) _eC2TransitGatewayDefaultRouteTablePropagation
+    , fmap (("Description",) . toJSON) _eC2TransitGatewayDescription
+    , fmap (("DnsSupport",) . toJSON) _eC2TransitGatewayDnsSupport
+    , fmap (("Tags",) . toJSON) _eC2TransitGatewayTags
+    , fmap (("VpnEcmpSupport",) . toJSON) _eC2TransitGatewayVpnEcmpSupport
+    ]
+
+instance FromJSON EC2TransitGateway where
+  parseJSON (Object obj) =
+    EC2TransitGateway <$>
+      fmap (fmap (fmap unInteger')) (obj .:? "AmazonSideAsn") <*>
+      (obj .:? "AutoAcceptSharedAttachments") <*>
+      (obj .:? "DefaultRouteTableAssociation") <*>
+      (obj .:? "DefaultRouteTablePropagation") <*>
+      (obj .:? "Description") <*>
+      (obj .:? "DnsSupport") <*>
+      (obj .:? "Tags") <*>
+      (obj .:? "VpnEcmpSupport")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2TransitGateway' containing required fields as
+-- arguments.
+ec2TransitGateway
+  :: EC2TransitGateway
+ec2TransitGateway  =
+  EC2TransitGateway
+  { _eC2TransitGatewayAmazonSideAsn = Nothing
+  , _eC2TransitGatewayAutoAcceptSharedAttachments = Nothing
+  , _eC2TransitGatewayDefaultRouteTableAssociation = Nothing
+  , _eC2TransitGatewayDefaultRouteTablePropagation = Nothing
+  , _eC2TransitGatewayDescription = Nothing
+  , _eC2TransitGatewayDnsSupport = Nothing
+  , _eC2TransitGatewayTags = Nothing
+  , _eC2TransitGatewayVpnEcmpSupport = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-amazonsideasn
+ectgAmazonSideAsn :: Lens' EC2TransitGateway (Maybe (Val Integer))
+ectgAmazonSideAsn = lens _eC2TransitGatewayAmazonSideAsn (\s a -> s { _eC2TransitGatewayAmazonSideAsn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-autoacceptsharedattachments
+ectgAutoAcceptSharedAttachments :: Lens' EC2TransitGateway (Maybe (Val Text))
+ectgAutoAcceptSharedAttachments = lens _eC2TransitGatewayAutoAcceptSharedAttachments (\s a -> s { _eC2TransitGatewayAutoAcceptSharedAttachments = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-defaultroutetableassociation
+ectgDefaultRouteTableAssociation :: Lens' EC2TransitGateway (Maybe (Val Text))
+ectgDefaultRouteTableAssociation = lens _eC2TransitGatewayDefaultRouteTableAssociation (\s a -> s { _eC2TransitGatewayDefaultRouteTableAssociation = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-defaultroutetablepropagation
+ectgDefaultRouteTablePropagation :: Lens' EC2TransitGateway (Maybe (Val Text))
+ectgDefaultRouteTablePropagation = lens _eC2TransitGatewayDefaultRouteTablePropagation (\s a -> s { _eC2TransitGatewayDefaultRouteTablePropagation = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-description
+ectgDescription :: Lens' EC2TransitGateway (Maybe (Val Text))
+ectgDescription = lens _eC2TransitGatewayDescription (\s a -> s { _eC2TransitGatewayDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-dnssupport
+ectgDnsSupport :: Lens' EC2TransitGateway (Maybe (Val Text))
+ectgDnsSupport = lens _eC2TransitGatewayDnsSupport (\s a -> s { _eC2TransitGatewayDnsSupport = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-tags
+ectgTags :: Lens' EC2TransitGateway (Maybe [Tag])
+ectgTags = lens _eC2TransitGatewayTags (\s a -> s { _eC2TransitGatewayTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-vpnecmpsupport
+ectgVpnEcmpSupport :: Lens' EC2TransitGateway (Maybe (Val Text))
+ectgVpnEcmpSupport = lens _eC2TransitGatewayVpnEcmpSupport (\s a -> s { _eC2TransitGatewayVpnEcmpSupport = a })
diff --git a/library-gen/Stratosphere/Resources/EC2TransitGatewayAttachment.hs b/library-gen/Stratosphere/Resources/EC2TransitGatewayAttachment.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2TransitGatewayAttachment.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayattachment.html
+
+module Stratosphere.Resources.EC2TransitGatewayAttachment where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2TransitGatewayAttachment. See
+-- 'ec2TransitGatewayAttachment' for a more convenient constructor.
+data EC2TransitGatewayAttachment =
+  EC2TransitGatewayAttachment
+  { _eC2TransitGatewayAttachmentSubnetIds :: ValList Text
+  , _eC2TransitGatewayAttachmentTags :: Maybe [Tag]
+  , _eC2TransitGatewayAttachmentTransitGatewayId :: Val Text
+  , _eC2TransitGatewayAttachmentVpcId :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON EC2TransitGatewayAttachment where
+  toJSON EC2TransitGatewayAttachment{..} =
+    object $
+    catMaybes
+    [ (Just . ("SubnetIds",) . toJSON) _eC2TransitGatewayAttachmentSubnetIds
+    , fmap (("Tags",) . toJSON) _eC2TransitGatewayAttachmentTags
+    , (Just . ("TransitGatewayId",) . toJSON) _eC2TransitGatewayAttachmentTransitGatewayId
+    , (Just . ("VpcId",) . toJSON) _eC2TransitGatewayAttachmentVpcId
+    ]
+
+instance FromJSON EC2TransitGatewayAttachment where
+  parseJSON (Object obj) =
+    EC2TransitGatewayAttachment <$>
+      (obj .: "SubnetIds") <*>
+      (obj .:? "Tags") <*>
+      (obj .: "TransitGatewayId") <*>
+      (obj .: "VpcId")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2TransitGatewayAttachment' containing required fields
+-- as arguments.
+ec2TransitGatewayAttachment
+  :: ValList Text -- ^ 'ectgaSubnetIds'
+  -> Val Text -- ^ 'ectgaTransitGatewayId'
+  -> Val Text -- ^ 'ectgaVpcId'
+  -> EC2TransitGatewayAttachment
+ec2TransitGatewayAttachment subnetIdsarg transitGatewayIdarg vpcIdarg =
+  EC2TransitGatewayAttachment
+  { _eC2TransitGatewayAttachmentSubnetIds = subnetIdsarg
+  , _eC2TransitGatewayAttachmentTags = Nothing
+  , _eC2TransitGatewayAttachmentTransitGatewayId = transitGatewayIdarg
+  , _eC2TransitGatewayAttachmentVpcId = vpcIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayattachment.html#cfn-ec2-transitgatewayattachment-subnetids
+ectgaSubnetIds :: Lens' EC2TransitGatewayAttachment (ValList Text)
+ectgaSubnetIds = lens _eC2TransitGatewayAttachmentSubnetIds (\s a -> s { _eC2TransitGatewayAttachmentSubnetIds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayattachment.html#cfn-ec2-transitgatewayattachment-tags
+ectgaTags :: Lens' EC2TransitGatewayAttachment (Maybe [Tag])
+ectgaTags = lens _eC2TransitGatewayAttachmentTags (\s a -> s { _eC2TransitGatewayAttachmentTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayattachment.html#cfn-ec2-transitgatewayattachment-transitgatewayid
+ectgaTransitGatewayId :: Lens' EC2TransitGatewayAttachment (Val Text)
+ectgaTransitGatewayId = lens _eC2TransitGatewayAttachmentTransitGatewayId (\s a -> s { _eC2TransitGatewayAttachmentTransitGatewayId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayattachment.html#cfn-ec2-transitgatewayattachment-vpcid
+ectgaVpcId :: Lens' EC2TransitGatewayAttachment (Val Text)
+ectgaVpcId = lens _eC2TransitGatewayAttachmentVpcId (\s a -> s { _eC2TransitGatewayAttachmentVpcId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2TransitGatewayRoute.hs b/library-gen/Stratosphere/Resources/EC2TransitGatewayRoute.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2TransitGatewayRoute.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroute.html
+
+module Stratosphere.Resources.EC2TransitGatewayRoute where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for EC2TransitGatewayRoute. See
+-- 'ec2TransitGatewayRoute' for a more convenient constructor.
+data EC2TransitGatewayRoute =
+  EC2TransitGatewayRoute
+  { _eC2TransitGatewayRouteBlackhole :: Maybe (Val Bool)
+  , _eC2TransitGatewayRouteDestinationCidrBlock :: Maybe (Val Text)
+  , _eC2TransitGatewayRouteTransitGatewayAttachmentId :: Maybe (Val Text)
+  , _eC2TransitGatewayRouteTransitGatewayRouteTableId :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON EC2TransitGatewayRoute where
+  toJSON EC2TransitGatewayRoute{..} =
+    object $
+    catMaybes
+    [ fmap (("Blackhole",) . toJSON . fmap Bool') _eC2TransitGatewayRouteBlackhole
+    , fmap (("DestinationCidrBlock",) . toJSON) _eC2TransitGatewayRouteDestinationCidrBlock
+    , fmap (("TransitGatewayAttachmentId",) . toJSON) _eC2TransitGatewayRouteTransitGatewayAttachmentId
+    , (Just . ("TransitGatewayRouteTableId",) . toJSON) _eC2TransitGatewayRouteTransitGatewayRouteTableId
+    ]
+
+instance FromJSON EC2TransitGatewayRoute where
+  parseJSON (Object obj) =
+    EC2TransitGatewayRoute <$>
+      fmap (fmap (fmap unBool')) (obj .:? "Blackhole") <*>
+      (obj .:? "DestinationCidrBlock") <*>
+      (obj .:? "TransitGatewayAttachmentId") <*>
+      (obj .: "TransitGatewayRouteTableId")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2TransitGatewayRoute' containing required fields as
+-- arguments.
+ec2TransitGatewayRoute
+  :: Val Text -- ^ 'ectgrTransitGatewayRouteTableId'
+  -> EC2TransitGatewayRoute
+ec2TransitGatewayRoute transitGatewayRouteTableIdarg =
+  EC2TransitGatewayRoute
+  { _eC2TransitGatewayRouteBlackhole = Nothing
+  , _eC2TransitGatewayRouteDestinationCidrBlock = Nothing
+  , _eC2TransitGatewayRouteTransitGatewayAttachmentId = Nothing
+  , _eC2TransitGatewayRouteTransitGatewayRouteTableId = transitGatewayRouteTableIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroute.html#cfn-ec2-transitgatewayroute-blackhole
+ectgrBlackhole :: Lens' EC2TransitGatewayRoute (Maybe (Val Bool))
+ectgrBlackhole = lens _eC2TransitGatewayRouteBlackhole (\s a -> s { _eC2TransitGatewayRouteBlackhole = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroute.html#cfn-ec2-transitgatewayroute-destinationcidrblock
+ectgrDestinationCidrBlock :: Lens' EC2TransitGatewayRoute (Maybe (Val Text))
+ectgrDestinationCidrBlock = lens _eC2TransitGatewayRouteDestinationCidrBlock (\s a -> s { _eC2TransitGatewayRouteDestinationCidrBlock = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroute.html#cfn-ec2-transitgatewayroute-transitgatewayattachmentid
+ectgrTransitGatewayAttachmentId :: Lens' EC2TransitGatewayRoute (Maybe (Val Text))
+ectgrTransitGatewayAttachmentId = lens _eC2TransitGatewayRouteTransitGatewayAttachmentId (\s a -> s { _eC2TransitGatewayRouteTransitGatewayAttachmentId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroute.html#cfn-ec2-transitgatewayroute-transitgatewayroutetableid
+ectgrTransitGatewayRouteTableId :: Lens' EC2TransitGatewayRoute (Val Text)
+ectgrTransitGatewayRouteTableId = lens _eC2TransitGatewayRouteTransitGatewayRouteTableId (\s a -> s { _eC2TransitGatewayRouteTransitGatewayRouteTableId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2TransitGatewayRouteTable.hs b/library-gen/Stratosphere/Resources/EC2TransitGatewayRouteTable.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2TransitGatewayRouteTable.hs
@@ -0,0 +1,52 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetable.html
+
+module Stratosphere.Resources.EC2TransitGatewayRouteTable where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2TransitGatewayRouteTable. See
+-- 'ec2TransitGatewayRouteTable' for a more convenient constructor.
+data EC2TransitGatewayRouteTable =
+  EC2TransitGatewayRouteTable
+  { _eC2TransitGatewayRouteTableTags :: Maybe [Tag]
+  , _eC2TransitGatewayRouteTableTransitGatewayId :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON EC2TransitGatewayRouteTable where
+  toJSON EC2TransitGatewayRouteTable{..} =
+    object $
+    catMaybes
+    [ fmap (("Tags",) . toJSON) _eC2TransitGatewayRouteTableTags
+    , (Just . ("TransitGatewayId",) . toJSON) _eC2TransitGatewayRouteTableTransitGatewayId
+    ]
+
+instance FromJSON EC2TransitGatewayRouteTable where
+  parseJSON (Object obj) =
+    EC2TransitGatewayRouteTable <$>
+      (obj .:? "Tags") <*>
+      (obj .: "TransitGatewayId")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2TransitGatewayRouteTable' containing required fields
+-- as arguments.
+ec2TransitGatewayRouteTable
+  :: Val Text -- ^ 'ectgrtTransitGatewayId'
+  -> EC2TransitGatewayRouteTable
+ec2TransitGatewayRouteTable transitGatewayIdarg =
+  EC2TransitGatewayRouteTable
+  { _eC2TransitGatewayRouteTableTags = Nothing
+  , _eC2TransitGatewayRouteTableTransitGatewayId = transitGatewayIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetable.html#cfn-ec2-transitgatewayroutetable-tags
+ectgrtTags :: Lens' EC2TransitGatewayRouteTable (Maybe [Tag])
+ectgrtTags = lens _eC2TransitGatewayRouteTableTags (\s a -> s { _eC2TransitGatewayRouteTableTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetable.html#cfn-ec2-transitgatewayroutetable-transitgatewayid
+ectgrtTransitGatewayId :: Lens' EC2TransitGatewayRouteTable (Val Text)
+ectgrtTransitGatewayId = lens _eC2TransitGatewayRouteTableTransitGatewayId (\s a -> s { _eC2TransitGatewayRouteTableTransitGatewayId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2TransitGatewayRouteTableAssociation.hs b/library-gen/Stratosphere/Resources/EC2TransitGatewayRouteTableAssociation.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2TransitGatewayRouteTableAssociation.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetableassociation.html
+
+module Stratosphere.Resources.EC2TransitGatewayRouteTableAssociation where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for EC2TransitGatewayRouteTableAssociation. See
+-- 'ec2TransitGatewayRouteTableAssociation' for a more convenient
+-- constructor.
+data EC2TransitGatewayRouteTableAssociation =
+  EC2TransitGatewayRouteTableAssociation
+  { _eC2TransitGatewayRouteTableAssociationTransitGatewayAttachmentId :: Val Text
+  , _eC2TransitGatewayRouteTableAssociationTransitGatewayRouteTableId :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON EC2TransitGatewayRouteTableAssociation where
+  toJSON EC2TransitGatewayRouteTableAssociation{..} =
+    object $
+    catMaybes
+    [ (Just . ("TransitGatewayAttachmentId",) . toJSON) _eC2TransitGatewayRouteTableAssociationTransitGatewayAttachmentId
+    , (Just . ("TransitGatewayRouteTableId",) . toJSON) _eC2TransitGatewayRouteTableAssociationTransitGatewayRouteTableId
+    ]
+
+instance FromJSON EC2TransitGatewayRouteTableAssociation where
+  parseJSON (Object obj) =
+    EC2TransitGatewayRouteTableAssociation <$>
+      (obj .: "TransitGatewayAttachmentId") <*>
+      (obj .: "TransitGatewayRouteTableId")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2TransitGatewayRouteTableAssociation' containing
+-- required fields as arguments.
+ec2TransitGatewayRouteTableAssociation
+  :: Val Text -- ^ 'ectgrtaTransitGatewayAttachmentId'
+  -> Val Text -- ^ 'ectgrtaTransitGatewayRouteTableId'
+  -> EC2TransitGatewayRouteTableAssociation
+ec2TransitGatewayRouteTableAssociation transitGatewayAttachmentIdarg transitGatewayRouteTableIdarg =
+  EC2TransitGatewayRouteTableAssociation
+  { _eC2TransitGatewayRouteTableAssociationTransitGatewayAttachmentId = transitGatewayAttachmentIdarg
+  , _eC2TransitGatewayRouteTableAssociationTransitGatewayRouteTableId = transitGatewayRouteTableIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetableassociation.html#cfn-ec2-transitgatewayroutetableassociation-transitgatewayattachmentid
+ectgrtaTransitGatewayAttachmentId :: Lens' EC2TransitGatewayRouteTableAssociation (Val Text)
+ectgrtaTransitGatewayAttachmentId = lens _eC2TransitGatewayRouteTableAssociationTransitGatewayAttachmentId (\s a -> s { _eC2TransitGatewayRouteTableAssociationTransitGatewayAttachmentId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetableassociation.html#cfn-ec2-transitgatewayroutetableassociation-transitgatewayroutetableid
+ectgrtaTransitGatewayRouteTableId :: Lens' EC2TransitGatewayRouteTableAssociation (Val Text)
+ectgrtaTransitGatewayRouteTableId = lens _eC2TransitGatewayRouteTableAssociationTransitGatewayRouteTableId (\s a -> s { _eC2TransitGatewayRouteTableAssociationTransitGatewayRouteTableId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2TransitGatewayRouteTablePropagation.hs b/library-gen/Stratosphere/Resources/EC2TransitGatewayRouteTablePropagation.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2TransitGatewayRouteTablePropagation.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetablepropagation.html
+
+module Stratosphere.Resources.EC2TransitGatewayRouteTablePropagation where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for EC2TransitGatewayRouteTablePropagation. See
+-- 'ec2TransitGatewayRouteTablePropagation' for a more convenient
+-- constructor.
+data EC2TransitGatewayRouteTablePropagation =
+  EC2TransitGatewayRouteTablePropagation
+  { _eC2TransitGatewayRouteTablePropagationTransitGatewayAttachmentId :: Val Text
+  , _eC2TransitGatewayRouteTablePropagationTransitGatewayRouteTableId :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON EC2TransitGatewayRouteTablePropagation where
+  toJSON EC2TransitGatewayRouteTablePropagation{..} =
+    object $
+    catMaybes
+    [ (Just . ("TransitGatewayAttachmentId",) . toJSON) _eC2TransitGatewayRouteTablePropagationTransitGatewayAttachmentId
+    , (Just . ("TransitGatewayRouteTableId",) . toJSON) _eC2TransitGatewayRouteTablePropagationTransitGatewayRouteTableId
+    ]
+
+instance FromJSON EC2TransitGatewayRouteTablePropagation where
+  parseJSON (Object obj) =
+    EC2TransitGatewayRouteTablePropagation <$>
+      (obj .: "TransitGatewayAttachmentId") <*>
+      (obj .: "TransitGatewayRouteTableId")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2TransitGatewayRouteTablePropagation' containing
+-- required fields as arguments.
+ec2TransitGatewayRouteTablePropagation
+  :: Val Text -- ^ 'ectgrtpTransitGatewayAttachmentId'
+  -> Val Text -- ^ 'ectgrtpTransitGatewayRouteTableId'
+  -> EC2TransitGatewayRouteTablePropagation
+ec2TransitGatewayRouteTablePropagation transitGatewayAttachmentIdarg transitGatewayRouteTableIdarg =
+  EC2TransitGatewayRouteTablePropagation
+  { _eC2TransitGatewayRouteTablePropagationTransitGatewayAttachmentId = transitGatewayAttachmentIdarg
+  , _eC2TransitGatewayRouteTablePropagationTransitGatewayRouteTableId = transitGatewayRouteTableIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetablepropagation.html#cfn-ec2-transitgatewayroutetablepropagation-transitgatewayattachmentid
+ectgrtpTransitGatewayAttachmentId :: Lens' EC2TransitGatewayRouteTablePropagation (Val Text)
+ectgrtpTransitGatewayAttachmentId = lens _eC2TransitGatewayRouteTablePropagationTransitGatewayAttachmentId (\s a -> s { _eC2TransitGatewayRouteTablePropagationTransitGatewayAttachmentId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetablepropagation.html#cfn-ec2-transitgatewayroutetablepropagation-transitgatewayroutetableid
+ectgrtpTransitGatewayRouteTableId :: Lens' EC2TransitGatewayRouteTablePropagation (Val Text)
+ectgrtpTransitGatewayRouteTableId = lens _eC2TransitGatewayRouteTablePropagationTransitGatewayRouteTableId (\s a -> s { _eC2TransitGatewayRouteTablePropagationTransitGatewayRouteTableId = a })
diff --git a/library-gen/Stratosphere/Resources/LambdaFunction.hs b/library-gen/Stratosphere/Resources/LambdaFunction.hs
--- a/library-gen/Stratosphere/Resources/LambdaFunction.hs
+++ b/library-gen/Stratosphere/Resources/LambdaFunction.hs
@@ -26,6 +26,7 @@
   , _lambdaFunctionFunctionName :: Maybe (Val Text)
   , _lambdaFunctionHandler :: Val Text
   , _lambdaFunctionKmsKeyArn :: Maybe (Val Text)
+  , _lambdaFunctionLayers :: Maybe (ValList Text)
   , _lambdaFunctionMemorySize :: Maybe (Val Integer)
   , _lambdaFunctionReservedConcurrentExecutions :: Maybe (Val Integer)
   , _lambdaFunctionRole :: Val Text
@@ -47,6 +48,7 @@
     , fmap (("FunctionName",) . toJSON) _lambdaFunctionFunctionName
     , (Just . ("Handler",) . toJSON) _lambdaFunctionHandler
     , fmap (("KmsKeyArn",) . toJSON) _lambdaFunctionKmsKeyArn
+    , fmap (("Layers",) . toJSON) _lambdaFunctionLayers
     , fmap (("MemorySize",) . toJSON . fmap Integer') _lambdaFunctionMemorySize
     , fmap (("ReservedConcurrentExecutions",) . toJSON . fmap Integer') _lambdaFunctionReservedConcurrentExecutions
     , (Just . ("Role",) . toJSON) _lambdaFunctionRole
@@ -67,6 +69,7 @@
       (obj .:? "FunctionName") <*>
       (obj .: "Handler") <*>
       (obj .:? "KmsKeyArn") <*>
+      (obj .:? "Layers") <*>
       fmap (fmap (fmap unInteger')) (obj .:? "MemorySize") <*>
       fmap (fmap (fmap unInteger')) (obj .:? "ReservedConcurrentExecutions") <*>
       (obj .: "Role") <*>
@@ -93,6 +96,7 @@
   , _lambdaFunctionFunctionName = Nothing
   , _lambdaFunctionHandler = handlerarg
   , _lambdaFunctionKmsKeyArn = Nothing
+  , _lambdaFunctionLayers = Nothing
   , _lambdaFunctionMemorySize = Nothing
   , _lambdaFunctionReservedConcurrentExecutions = Nothing
   , _lambdaFunctionRole = rolearg
@@ -130,6 +134,10 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-kmskeyarn
 lfKmsKeyArn :: Lens' LambdaFunction (Maybe (Val Text))
 lfKmsKeyArn = lens _lambdaFunctionKmsKeyArn (\s a -> s { _lambdaFunctionKmsKeyArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-layers
+lfLayers :: Lens' LambdaFunction (Maybe (ValList Text))
+lfLayers = lens _lambdaFunctionLayers (\s a -> s { _lambdaFunctionLayers = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-memorysize
 lfMemorySize :: Lens' LambdaFunction (Maybe (Val Integer))
diff --git a/library-gen/Stratosphere/Resources/ServiceDiscoveryHttpNamespace.hs b/library-gen/Stratosphere/Resources/ServiceDiscoveryHttpNamespace.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ServiceDiscoveryHttpNamespace.hs
@@ -0,0 +1,52 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicediscovery-httpnamespace.html
+
+module Stratosphere.Resources.ServiceDiscoveryHttpNamespace where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for ServiceDiscoveryHttpNamespace. See
+-- 'serviceDiscoveryHttpNamespace' for a more convenient constructor.
+data ServiceDiscoveryHttpNamespace =
+  ServiceDiscoveryHttpNamespace
+  { _serviceDiscoveryHttpNamespaceDescription :: Maybe (Val Text)
+  , _serviceDiscoveryHttpNamespaceName :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON ServiceDiscoveryHttpNamespace where
+  toJSON ServiceDiscoveryHttpNamespace{..} =
+    object $
+    catMaybes
+    [ fmap (("Description",) . toJSON) _serviceDiscoveryHttpNamespaceDescription
+    , (Just . ("Name",) . toJSON) _serviceDiscoveryHttpNamespaceName
+    ]
+
+instance FromJSON ServiceDiscoveryHttpNamespace where
+  parseJSON (Object obj) =
+    ServiceDiscoveryHttpNamespace <$>
+      (obj .:? "Description") <*>
+      (obj .: "Name")
+  parseJSON _ = mempty
+
+-- | Constructor for 'ServiceDiscoveryHttpNamespace' containing required
+-- fields as arguments.
+serviceDiscoveryHttpNamespace
+  :: Val Text -- ^ 'sdhnName'
+  -> ServiceDiscoveryHttpNamespace
+serviceDiscoveryHttpNamespace namearg =
+  ServiceDiscoveryHttpNamespace
+  { _serviceDiscoveryHttpNamespaceDescription = Nothing
+  , _serviceDiscoveryHttpNamespaceName = namearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicediscovery-httpnamespace.html#cfn-servicediscovery-httpnamespace-description
+sdhnDescription :: Lens' ServiceDiscoveryHttpNamespace (Maybe (Val Text))
+sdhnDescription = lens _serviceDiscoveryHttpNamespaceDescription (\s a -> s { _serviceDiscoveryHttpNamespaceDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicediscovery-httpnamespace.html#cfn-servicediscovery-httpnamespace-name
+sdhnName :: Lens' ServiceDiscoveryHttpNamespace (Val Text)
+sdhnName = lens _serviceDiscoveryHttpNamespaceName (\s a -> s { _serviceDiscoveryHttpNamespaceName = 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: c6be8594b6af4840f4dfb0d537a8b728fce2c167abd197d5f721b772d6db9350
+-- hash: f077db9d7208f051341b88e7a12bceaddd86dd6e30b2e2622d024f3846d50c76
 
 name:           stratosphere
-version:        0.28.0
+version:        0.28.1
 synopsis:       EDSL for AWS CloudFormation
 description:    EDSL for AWS CloudFormation
 category:       AWS, Cloud
@@ -283,8 +283,10 @@
       Stratosphere.ResourceProperties.EC2InstanceCreditSpecification
       Stratosphere.ResourceProperties.EC2InstanceEbs
       Stratosphere.ResourceProperties.EC2InstanceElasticGpuSpecification
+      Stratosphere.ResourceProperties.EC2InstanceElasticInferenceAccelerator
       Stratosphere.ResourceProperties.EC2InstanceInstanceIpv6Address
       Stratosphere.ResourceProperties.EC2InstanceLaunchTemplateSpecification
+      Stratosphere.ResourceProperties.EC2InstanceLicenseSpecification
       Stratosphere.ResourceProperties.EC2InstanceNetworkInterface
       Stratosphere.ResourceProperties.EC2InstanceNoDevice
       Stratosphere.ResourceProperties.EC2InstancePrivateIpAddressSpecification
@@ -839,6 +841,12 @@
       Stratosphere.Resources.EC2SubnetCidrBlock
       Stratosphere.Resources.EC2SubnetNetworkAclAssociation
       Stratosphere.Resources.EC2SubnetRouteTableAssociation
+      Stratosphere.Resources.EC2TransitGateway
+      Stratosphere.Resources.EC2TransitGatewayAttachment
+      Stratosphere.Resources.EC2TransitGatewayRoute
+      Stratosphere.Resources.EC2TransitGatewayRouteTable
+      Stratosphere.Resources.EC2TransitGatewayRouteTableAssociation
+      Stratosphere.Resources.EC2TransitGatewayRouteTablePropagation
       Stratosphere.Resources.EC2TrunkInterfaceAssociation
       Stratosphere.Resources.EC2Volume
       Stratosphere.Resources.EC2VolumeAttachment
@@ -998,6 +1006,7 @@
       Stratosphere.Resources.ServiceCatalogPortfolioShare
       Stratosphere.Resources.ServiceCatalogTagOption
       Stratosphere.Resources.ServiceCatalogTagOptionAssociation
+      Stratosphere.Resources.ServiceDiscoveryHttpNamespace
       Stratosphere.Resources.ServiceDiscoveryInstance
       Stratosphere.Resources.ServiceDiscoveryPrivateDnsNamespace
       Stratosphere.Resources.ServiceDiscoveryPublicDnsNamespace
